Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["abtest_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-resource/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["abtest.go"],
importpath = "go-common/app/interface/main/app-resource/dao/abtest",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-resource/conf:go_default_library",
"//app/interface/main/app-resource/model/experiment:go_default_library",
"//library/database/sql:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/xstr:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,110 @@
package abtest
import (
"context"
"encoding/json"
"fmt"
"net/url"
"strconv"
"go-common/app/interface/main/app-resource/conf"
"go-common/app/interface/main/app-resource/model/experiment"
"go-common/library/database/sql"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
"github.com/pkg/errors"
)
const (
_selExpLimit = `SELECT experiment_id,build,conditions FROM experiment_limit`
_selExpByIDs = `SELECT id,name,plat,strategy,description,traffic_group FROM experiment WHERE state=1 AND id IN (%s) ORDER BY uptime DESC`
)
// Dao is notice dao.
type Dao struct {
db *sql.DB
limit *sql.Stmt
dataPath string
client *bm.Client
}
// New new a notice dao.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
db: sql.NewMySQL(c.MySQL.Show),
client: bm.NewClient(conf.Conf.HTTPClient),
dataPath: c.Host.Data + "/abserver/v1/app/match-exp",
}
d.limit = d.db.Prepared(_selExpLimit)
return
}
func (d *Dao) ExperimentLimit(c context.Context) (lm map[int64][]*experiment.Limit, err error) {
rows, err := d.limit.Query(c)
if err != nil {
log.Error("d.limit.Query error (%v)", err)
return
}
defer rows.Close()
lm = map[int64][]*experiment.Limit{}
for rows.Next() {
limit := &experiment.Limit{}
if err = rows.Scan(&limit.ExperimentID, &limit.Build, &limit.Condition); err != nil {
log.Error("rows.Scan err (%v)", err)
continue
}
lm[limit.ExperimentID] = append(lm[limit.ExperimentID], limit)
}
return
}
func (d *Dao) ExperimentByIDs(c context.Context, ids []int64) (eps []*experiment.Experiment, err error) {
rows, err := d.db.Query(c, fmt.Sprintf(_selExpByIDs, xstr.JoinInts(ids)))
if err != nil {
log.Error("d.expByIDs.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
ep := &experiment.Experiment{}
if err = rows.Scan(&ep.ID, &ep.Name, &ep.Plat, &ep.Strategy, &ep.Desc, &ep.TrafficGroup); err != nil {
log.Error("rows.Scan err (%v)", err)
continue
}
eps = append(eps, ep)
}
return
}
// AbServer http://info.bilibili.co/pages/viewpage.action?pageId=8741843 大数据abtest
func (d *Dao) AbServer(c context.Context, buvid, device, mobiAPP, filteredStr string, build int, mid int64) (res json.RawMessage, err error) {
params := url.Values{}
params.Set("buvid", buvid)
params.Set("device", device)
params.Set("mobi_app", mobiAPP)
params.Set("build", strconv.Itoa(build))
if mid > 0 {
params.Set("mid", strconv.FormatInt(mid, 10))
}
if filteredStr != "" {
params.Set("filtered", filteredStr)
}
var data struct {
Code int `json:"errorCode"`
}
if err = d.client.Get(c, d.dataPath, "", params, &res); err != nil {
return
}
if err = json.Unmarshal(res, &data); err != nil {
err = errors.Wrap(err, "json.Unmarshal")
return
}
if data.Code != ecode.OK.Code() {
log.Warn("code(%d) path:(%s)", data.Code, d.dataPath+params.Encode())
return
}
return
}

View File

@@ -0,0 +1,59 @@
package abtest
import (
"context"
"flag"
"path/filepath"
"testing"
"time"
"go-common/app/interface/main/app-resource/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func ctx() context.Context {
return context.Background()
}
func init() {
dir, _ := filepath.Abs("../../cmd/app-resource-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
time.Sleep(time.Second)
}
func TestExperimentLimit(t *testing.T) {
Convey("get ExperimentLimit all", t, func() {
res, err := d.ExperimentLimit(ctx())
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
func TestExperimentByIDs(t *testing.T) {
Convey("get ExperimentByIDs all", t, func() {
res, err := d.ExperimentByIDs(ctx(), []int64{1})
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
func TestAbServer(t *testing.T) {
Convey("TestAbServer", t, func() {
res, err := d.AbServer(context.TODO(),
"9902822F-DDD1-47BC-A08F-19F746C9CB8459220infoc",
"phone",
"iphone",
"",
6720,
1,
)
Println(string(res), err)
})
}