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,54 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/web-show/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"res.go",
"vdoactive.go",
"vdoad.go",
],
importpath = "go-common/app/interface/main/web-show/dao/resource",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/web-show/conf:go_default_library",
"//app/interface/main/web-show/model/resource:go_default_library",
"//library/database/sql:go_default_library",
"//library/log:go_default_library",
"//library/stat/prom:go_default_library",
"//library/time: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,68 @@
package resource
import (
"context"
"go-common/app/interface/main/web-show/conf"
xsql "go-common/library/database/sql"
"go-common/library/log"
"go-common/library/stat/prom"
)
//Dao struct
type Dao struct {
db *xsql.DB
videodb *xsql.DB
// ad_active
selAllVdoActStmt *xsql.Stmt
selVdoActMTCntStmt *xsql.Stmt
delAllVdoActStmt *xsql.Stmt
// ad
selAdVdoActStmt *xsql.Stmt
selAdMtCntVdoStmt *xsql.Stmt
// res
selAllResStmt *xsql.Stmt
selAllAssignStmt *xsql.Stmt
selDefBannerStmt *xsql.Stmt
}
// New init mysql db
func New(c *conf.Config) (dao *Dao) {
dao = &Dao{
db: xsql.NewMySQL(c.MySQL.Res),
videodb: xsql.NewMySQL(c.MySQL.Ads),
}
dao.initActive()
dao.initRes()
dao.initAd()
return
}
// Close close the resource.
func (dao *Dao) Close() {
dao.db.Close()
}
// PromError err
func PromError(name string, format string, args ...interface{}) {
prom.BusinessErrCount.Incr(name)
log.Error(format, args...)
}
// Ping Dao
func (dao *Dao) Ping(c context.Context) (err error) {
if err = dao.db.Ping(c); err != nil {
log.Error("dao.db.Ping error(%v)", err)
return
}
if err = dao.videodb.Ping(c); err != nil {
log.Error("dao.videodb.Ping error(%v)", err)
}
return
}
//BeginTran Dao
func (dao *Dao) BeginTran(c context.Context) (tx *xsql.Tx, err error) {
tx, err = dao.videodb.Begin(c)
return
}

View File

@@ -0,0 +1,34 @@
package resource
import (
"context"
"flag"
"path/filepath"
"testing"
"go-common/app/interface/main/web-show/conf"
. "github.com/smartystreets/goconvey/convey"
)
var d *Dao
func WithDao(f func(d *Dao)) func() {
return func() {
dir, _ := filepath.Abs("../cmd/web-show-test.toml")
flag.Set("conf", dir)
conf.Init()
if d == nil {
d = New(conf.Conf)
}
f(d)
}
}
func TestDao_Operation(t *testing.T) {
Convey("test operation", t, WithDao(func(d *Dao) {
data, err := d.Resources(context.TODO())
So(err, ShouldBeNil)
Printf("%+v", data)
}))
}

View File

@@ -0,0 +1,76 @@
package resource
import (
"context"
"time"
"go-common/app/interface/main/web-show/model/resource"
"go-common/library/database/sql"
"go-common/library/log"
)
const (
_selAllResSQL = `SELECT id,platform,name,parent,counter,position FROM resource WHERE state=0 ORDER BY counter desc`
_selAllAssignSQL = `SELECT id,name,contract_id,resource_id,pic,litpic,url,atype,weight,rule,agency FROM resource_assignment WHERE stime<? AND etime>? AND state=0 ORDER BY weight,stime desc`
_selDefBannerSQL = `SELECT id,name,contract_id,resource_id,pic,litpic,url,atype,weight,rule FROM default_one WHERE state=0`
)
func (dao *Dao) initRes() {
dao.selAllResStmt = dao.db.Prepared(_selAllResSQL)
dao.selAllAssignStmt = dao.db.Prepared(_selAllAssignSQL)
dao.selDefBannerStmt = dao.db.Prepared(_selDefBannerSQL)
}
// Resources get resource infos from db
func (dao *Dao) Resources(c context.Context) (rscs []*resource.Res, err error) {
rows, err := dao.selAllResStmt.Query(c)
if err != nil {
log.Error("dao.selAllResStmt query error (%v)", err)
return
}
defer rows.Close()
rscs = make([]*resource.Res, 0)
for rows.Next() {
rsc := &resource.Res{}
if err = rows.Scan(&rsc.ID, &rsc.Platform, &rsc.Name, &rsc.Parent, &rsc.Counter, &rsc.Position); err != nil {
PromError("Resources", "rows.scan err(%v)", err)
return
}
rscs = append(rscs, rsc)
}
return
}
// Assignment get assigment from db
func (dao *Dao) Assignment(c context.Context) (asgs []*resource.Assignment, err error) {
rows, err := dao.selAllAssignStmt.Query(c, time.Now(), time.Now())
if err != nil {
log.Error("dao.selAllAssignmentStmt query error (%v)", err)
return
}
defer rows.Close()
asgs = make([]*resource.Assignment, 0)
for rows.Next() {
asg := &resource.Assignment{}
if err = rows.Scan(&asg.ID, &asg.Name, &asg.ContractID, &asg.ResID, &asg.Pic, &asg.LitPic, &asg.URL, &asg.Atype, &asg.Weight, &asg.Rule, &asg.Agency); err != nil {
PromError("Assignment", "rows.scan err(%v)", err)
return
}
asgs = append(asgs, asg)
}
return
}
// DefaultBanner set
func (dao *Dao) DefaultBanner(c context.Context) (asg *resource.Assignment, err error) {
row := dao.selDefBannerStmt.QueryRow(c)
asg = &resource.Assignment{}
if err = row.Scan(&asg.ID, &asg.Name, &asg.ContractID, &asg.ResID, &asg.Pic, &asg.LitPic, &asg.URL, &asg.Atype, &asg.Weight, &asg.Rule); err != nil {
if err == sql.ErrNoRows {
err = nil
} else {
PromError("DefaultBanner", "dao.DefaultBanner.QueryRow error(%v)", err)
}
}
return
}

View File

@@ -0,0 +1,75 @@
package resource
import (
"context"
"database/sql"
"go-common/app/interface/main/web-show/model/resource"
xsql "go-common/library/database/sql"
"go-common/library/log"
xtime "go-common/library/time"
)
const (
_inVdoActSQL = "INSERT IGNORE INTO video_ads_active (name,aid,cid,url,skipable,strategy,mtime) VALUES(?,?,?,?,?,?,?)"
_selAllVdoActSQL = "SELECT name,aid,cid,url,skipable,strategy FROM video_ads_active ORDER BY id"
_selVdoMTCntActSQL = `SELECT FROM_UNIXTIME(ROUND(AVG(UNIX_TIMESTAMP(mtime)))) FROM video_ads_active`
_delAllVdoActSQL = "DELETE FROM video_ads_active"
)
// initActive init
func (dao *Dao) initActive() {
dao.selAllVdoActStmt = dao.videodb.Prepared(_selAllVdoActSQL)
dao.selVdoActMTCntStmt = dao.videodb.Prepared(_selVdoMTCntActSQL)
dao.delAllVdoActStmt = dao.videodb.Prepared(_delAllVdoActSQL)
}
// TxInsertVideo dao
func (dao *Dao) TxInsertVideo(tx *xsql.Tx, vad resource.VideoAD) (err error) {
if _, err = tx.Exec(_inVdoActSQL, vad.Name, vad.Aid, vad.Cid, vad.URL, vad.Skipable, vad.Strategy, vad.MTime); err != nil {
log.Error("tx.Stmt(dao.inStmt).Exec(), err (%v)", err)
}
return
}
//VideoAds dao
func (dao *Dao) VideoAds(c context.Context) (vads map[int64][]*resource.VideoAD, err error) {
rows, err := dao.selAllVdoActStmt.Query(c)
if err != nil {
log.Error("dao.selAllVdoStmt query error (%v)", err)
return
}
defer rows.Close()
vads = map[int64][]*resource.VideoAD{}
for rows.Next() {
vad := &resource.VideoAD{}
if err = rows.Scan(&vad.Name, &vad.Aid, &vad.Cid, &vad.URL, &vad.Skipable, &vad.Strategy); err != nil {
log.Error("rows.Scan err (%v)", err)
vads = nil
return
}
vads[vad.Aid] = append(vads[vad.Aid], vad)
}
return
}
// ActVideoMTimeCount dao
func (dao *Dao) ActVideoMTimeCount(c context.Context) (mtime xtime.Time, err error) {
row := dao.selVdoActMTCntStmt.QueryRow(c)
if err = row.Scan(&mtime); err != nil {
if err == sql.ErrNoRows {
err = nil
} else {
log.Error("row.Scan(), err (%v)", err)
}
}
return
}
// DelAllVideo dao
func (dao *Dao) DelAllVideo(c context.Context) (err error) {
if _, err = dao.delAllVdoActStmt.Exec(c); err != nil {
log.Error("mysqlDB.Exec error(%v)", err)
}
return
}

View File

@@ -0,0 +1,56 @@
package resource
import (
"context"
"database/sql"
"time"
"go-common/app/interface/main/web-show/model/resource"
xsql "go-common/library/database/sql"
"go-common/library/log"
xtime "go-common/library/time"
)
const (
_selAdVdoActSQL = `SELECT id,name,aid,ad_cid,ad_url,skipable,ad_strategy,mtime FROM video_ads WHERE platform=0 and type=0 and state=0 AND verified=1 AND starttime<? AND endtime>?`
_selAdMtCntVdoSQL = `SELECT FROM_UNIXTIME(ROUND(AVG(UNIX_TIMESTAMP(mtime)))) FROM video_ads WHERE platform=0 and type=0 and state=0 AND verified=1 AND starttime<? AND endtime>?`
)
func (dao *Dao) initAd() {
dao.selAdVdoActStmt = dao.videodb.Prepared(_selAdVdoActSQL)
dao.selAdMtCntVdoStmt = dao.videodb.Prepared(_selAdMtCntVdoSQL)
}
// AllVideoActive dao
func (dao *Dao) AllVideoActive(c context.Context, now time.Time) (ads []resource.VideoAD, err error) {
var rows *xsql.Rows
if rows, err = dao.selAdVdoActStmt.Query(c, now, now); err != nil {
log.Error("dao..Exec(%v, %v), err (%v)", now, now, err)
return
}
defer rows.Close()
ads = make([]resource.VideoAD, 0, 100)
for rows.Next() {
ad := resource.VideoAD{}
if err = rows.Scan(&ad.ID, &ad.Name, &ad.AidS, &ad.Cid, &ad.URL, &ad.Skipable, &ad.Strategy, &ad.MTime); err != nil {
log.Error("rows.Scan(), err (%v)", err)
ads = nil
return
}
ads = append(ads, ad)
}
return
}
// AdVideoMTimeCount dao
func (dao *Dao) AdVideoMTimeCount(c context.Context, now time.Time) (mtime xtime.Time, err error) {
row := dao.selAdMtCntVdoStmt.QueryRow(c, now, now)
if err = row.Scan(&mtime); err != nil {
if err == sql.ErrNoRows {
err = nil
} else {
log.Error("mysqlDB error(%v)", err)
}
}
return
}