183 lines
4.2 KiB
Go
183 lines
4.2 KiB
Go
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
|
|
bucketIDs []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)
|
|
bucketIDs := paramWhereBucketIds(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
|
|
}
|
|
|
|
bucketIDsNumSlice := []uint32{}
|
|
if *bucketIDs != "" {
|
|
expIDsSlice := strings.Split(*bucketIDs, ",")
|
|
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
|
|
}
|
|
bucketIDsNumSlice = append(bucketIDsNumSlice, uint32(idNum))
|
|
}
|
|
}
|
|
|
|
if *beginDay < 20250101 || *beginDay > 21001231 || *endDay < 20250101 || *endDay > 21001231 {
|
|
fmt.Fprintln(os.Stderr, "begin/end day error")
|
|
fs.PrintDefaults()
|
|
return nil
|
|
}
|
|
|
|
if *target == "" {
|
|
fmt.Fprintln(os.Stderr, "target error")
|
|
fs.PrintDefaults()
|
|
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,
|
|
},
|
|
bucketIDs: bucketIDsNumSlice,
|
|
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{
|
|
WhereBucketId: getExpParams.bucketIDs,
|
|
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
|
|
}
|