支持实验数据拉取
This commit is contained in:
@@ -35,7 +35,7 @@ Usage: saastoola exp COMMAND [OPTIONS]
|
||||
|
||||
Commands:
|
||||
list List exps
|
||||
get Get exp report
|
||||
get Get exp report
|
||||
|
||||
"help" is the default command.
|
||||
|
||||
|
||||
@@ -1,5 +1,180 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.algo.com.cn/public/saasapi"
|
||||
"git.algo.com.cn/public/saasapi/pkg/saashttp"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
type getExpParams struct {
|
||||
saasHttp *saashttp.SaasClient
|
||||
expIDs []uint32
|
||||
beginDay uint64
|
||||
endDay uint64
|
||||
target string
|
||||
advertiserIDs []uint64
|
||||
groupBy []string
|
||||
totalFlag bool
|
||||
extFields []string
|
||||
}
|
||||
|
||||
func RunExpGet(args ...string) error {
|
||||
fs := flag.NewFlagSet("get", flag.ExitOnError)
|
||||
cfgFile := paramConfig(fs)
|
||||
beginDay := paramWhereBeginDay(fs)
|
||||
endDay := paramWhereEndDay(fs)
|
||||
expIDs := paramWhereExpIds(fs)
|
||||
target := paramWhereTarget(fs)
|
||||
advertiserIDs := paramWhereAdvertiserId(fs)
|
||||
groupBy := paramGroupBy(fs)
|
||||
totalFlag := paramTotalFlag(fs)
|
||||
extFields := paramExtFields(fs)
|
||||
|
||||
if err := fs.Parse(args); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "command line parse error", "err", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if fs.NArg() > 0 {
|
||||
fs.PrintDefaults()
|
||||
return nil
|
||||
}
|
||||
|
||||
expIDsNumSlice := []uint32{}
|
||||
if *expIDs != "" {
|
||||
expIDsSlice := strings.Split(*expIDs, ",")
|
||||
for _, id := range expIDsSlice {
|
||||
idNum, err := strconv.ParseUint(id, 10, 32)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "expid parse error", "err", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if idNum == 0 || idNum > 10 {
|
||||
fmt.Fprintln(os.Stderr, "expid range error")
|
||||
return nil
|
||||
}
|
||||
expIDsNumSlice = append(expIDsNumSlice, uint32(idNum))
|
||||
}
|
||||
}
|
||||
|
||||
if *beginDay < 20250101 || *beginDay > 21001231 || *endDay < 20250101 || *endDay > 21001231 {
|
||||
fmt.Fprintln(os.Stderr, "begin/end day error")
|
||||
return nil
|
||||
}
|
||||
|
||||
if *target == "" {
|
||||
fmt.Fprintln(os.Stderr, "target error")
|
||||
return nil
|
||||
}
|
||||
|
||||
uidNumSlice := []uint64{}
|
||||
if *advertiserIDs != "" {
|
||||
uidSlice := strings.Split(*advertiserIDs, ",")
|
||||
for _, id := range uidSlice {
|
||||
idNum, err := strconv.ParseUint(id, 10, 64)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "advertiser id parse error", "err", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if idNum == 0 {
|
||||
fmt.Fprintln(os.Stderr, "advertiser id error")
|
||||
return nil
|
||||
}
|
||||
uidNumSlice = append(uidNumSlice, idNum)
|
||||
}
|
||||
}
|
||||
|
||||
groupBySlice := []string{}
|
||||
if *groupBy != "" {
|
||||
validGroupBy := map[string]bool{"advertiser_id": true, "user_weight_factor": true}
|
||||
groupBySlice := strings.Split(*groupBy, ",")
|
||||
for _, group := range groupBySlice {
|
||||
if !validGroupBy[group] {
|
||||
fmt.Fprintln(os.Stderr, "group by error", "group", group)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extFieldsSlice := []string{}
|
||||
if *extFields != "" {
|
||||
extFieldsSlice = strings.Split(*extFields, ",")
|
||||
if slices.Contains(extFieldsSlice, "") {
|
||||
fmt.Fprintln(os.Stderr, "ext field error")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
cfg, err := LoadConfigFile(*cfgFile)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err)
|
||||
return err
|
||||
}
|
||||
|
||||
getExpParams := getExpParams{
|
||||
saasHttp: &saashttp.SaasClient{
|
||||
Client: &http.Client{},
|
||||
ApiUrls: saashttp.InitAPIUrl(&cfg.ApiUrls),
|
||||
Auth: &cfg.Auth,
|
||||
},
|
||||
expIDs: expIDsNumSlice,
|
||||
beginDay: *beginDay,
|
||||
endDay: *endDay,
|
||||
target: *target,
|
||||
advertiserIDs: uidNumSlice,
|
||||
groupBy: groupBySlice,
|
||||
totalFlag: *totalFlag,
|
||||
extFields: extFieldsSlice,
|
||||
}
|
||||
return doExpGet(getExpParams)
|
||||
}
|
||||
|
||||
func doExpGet(getExpParams getExpParams) error {
|
||||
|
||||
totalFlag := uint32(0)
|
||||
if getExpParams.totalFlag {
|
||||
totalFlag = 1
|
||||
}
|
||||
|
||||
saasReq := &saasapi.SaasReq{
|
||||
Cmd: &saasapi.SaasReq_ExpGet{
|
||||
ExpGet: &saasapi.ExpGet{
|
||||
WhereExpId: getExpParams.expIDs,
|
||||
WhereBeginDay: getExpParams.beginDay,
|
||||
WhereEndDay: getExpParams.endDay,
|
||||
WhereTarget: getExpParams.target,
|
||||
WhereAdvertiserId: getExpParams.advertiserIDs,
|
||||
GroupBy: getExpParams.groupBy,
|
||||
TotalFlag: totalFlag,
|
||||
ExtFields: getExpParams.extFields,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
res, err := getExpParams.saasHttp.ExpGet(saasReq)
|
||||
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "submit GetExp error", "err", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if res.Code != saasapi.ErrorCode_SUCC {
|
||||
fmt.Fprintln(os.Stderr, "get exp failed", "code", res.Code, "status", res.Status)
|
||||
return nil
|
||||
}
|
||||
|
||||
getExpRes := res.GetExpGetRes()
|
||||
|
||||
fmt.Printf("exp res: %v\n", protojson.Format(getExpRes))
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -117,6 +117,38 @@ func paramOS(fs *flag.FlagSet) *uint {
|
||||
return fs.Uint("os", 2, "1=iOS, 2=Android, default=2")
|
||||
}
|
||||
|
||||
func paramWhereBeginDay(fs *flag.FlagSet) *uint64 {
|
||||
return fs.Uint64("beginday", 0, "Begin day")
|
||||
}
|
||||
|
||||
func paramWhereEndDay(fs *flag.FlagSet) *uint64 {
|
||||
return fs.Uint64("endday", 0, "End day")
|
||||
}
|
||||
|
||||
func paramWhereExpIds(fs *flag.FlagSet) *string {
|
||||
return fs.String("expids", "", "Exp IDs. Use commas to separate multiple IDs. empty is all")
|
||||
}
|
||||
|
||||
func paramWhereTarget(fs *flag.FlagSet) *string {
|
||||
return fs.String("target", "", "Target ID")
|
||||
}
|
||||
|
||||
func paramWhereAdvertiserId(fs *flag.FlagSet) *string {
|
||||
return fs.String("uid", "", "Advertiser IDs. Use commas to separate multiple IDs.")
|
||||
}
|
||||
|
||||
func paramGroupBy(fs *flag.FlagSet) *string {
|
||||
return fs.String("groupby", "", "Group by. Use commas to separate multiple fields. empty is none")
|
||||
}
|
||||
|
||||
func paramExtFields(fs *flag.FlagSet) *string {
|
||||
return fs.String("extfields", "", "Ext fields. Use commas to separate multiple fields. * is all")
|
||||
}
|
||||
|
||||
func paramTotalFlag(fs *flag.FlagSet) *bool {
|
||||
return fs.Bool("total", false, "Total flag")
|
||||
}
|
||||
|
||||
// ParseByteSize 解析字节大小字符串为字节数
|
||||
func ParseByteSize(sizeStr string) (uint64, error) {
|
||||
sizeStr = strings.TrimSpace(sizeStr)
|
||||
|
||||
Reference in New Issue
Block a user