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,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"mail.go",
"service.go",
"task.go",
],
importpath = "go-common/app/interface/main/laser/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/laser/conf:go_default_library",
"//app/interface/main/laser/dao:go_default_library",
"//app/interface/main/laser/model:go_default_library",
"//library/database/sql:go_default_library",
"//library/log:go_default_library",
"//library/stat/prom: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,39 @@
package service
import (
"context"
"fmt"
"go-common/library/log"
)
const (
ISO8601Date = "2006-01-02"
)
// SendEmail is send the finished Task info to reciever
func (s *Service) SendEmail(c context.Context, taskID int64) (err error) {
task, err := s.dao.DetailTask(c, taskID)
if err != nil {
log.Error("s.SendEmail() error(%v)", err)
return
}
createAt := task.CTime.Time().Format(ISO8601Date)
var sourceDesc string
if task.SourceType == 1 {
sourceDesc = "创作姬"
} else {
sourceDesc = "其他"
}
var appStr string
if task.Platform == 1 {
appStr = "IOS"
} else if task.Platform == 2 {
appStr = "Android"
}
date := task.LogDate.Time().Format(ISO8601Date)
subject := fmt.Sprintf(" %s 创建的日志上报完成通知", createAt)
body := fmt.Sprintf("你于%s创建的一条日志上报任务上报来源%s%s App端采集的日志文件日期%s指定MID%d现已上报完毕。", createAt, sourceDesc, appStr, date, task.MID)
err = s.dao.SendEmail(subject, task.ContactEmail, body)
return
}

View File

@@ -0,0 +1,55 @@
package service
import (
"context"
"go-common/app/interface/main/laser/conf"
"go-common/app/interface/main/laser/dao"
"go-common/library/log"
"go-common/library/stat/prom"
)
type Service struct {
conf *conf.Config
dao *dao.Dao
pCacheHit *prom.Prom
pCacheMiss *prom.Prom
missch chan func()
}
func New(c *conf.Config) (s *Service) {
s = &Service{
conf: c,
dao: dao.New(c),
pCacheHit: prom.CacheHit,
pCacheMiss: prom.CacheMiss,
missch: make(chan func(), 1024),
}
go s.cacheproc()
return
}
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
func (s *Service) Close() {
s.dao.Close()
}
// AddCache add to chan for cache
func (s *Service) addCache(f func()) {
select {
case s.missch <- f:
default:
log.Warn("cacheproc chan full")
}
}
// cacheproc is a routine for execute closure.
func (s *Service) cacheproc() {
for {
f := <-s.missch
f()
}
}

View File

@@ -0,0 +1,107 @@
package service
import (
"context"
"go-common/app/interface/main/laser/model"
xsql "go-common/library/database/sql"
"go-common/library/log"
)
// QueryTaskState is query satisfied logDate from memcache if key exist,Otherwise query from db.
func (s *Service) QueryUndoneTaskLogdate(c context.Context, mid int64, platform int, sourceType int) (logDate int64, err error) {
// cache flag: cached to memcache only when query db.
cache := true
var v *model.TaskInfo
if v, err = s.dao.TaskInfoCache(c, mid); err != nil {
err = nil
cache = false
} else if v != nil {
// if memcache key exist
if v.Empty {
return
}
if logDateExist(v, sourceType, platform) {
logDate = v.LogDate.Time().Unix()
return
}
return
}
// if memcache key not exist , then query db.
v, err = s.dao.QueryUndoneTaskInfo(c, mid)
if err != nil {
return
}
if v != nil {
if logDateExist(v, sourceType, platform) {
logDate = v.LogDate.Time().Unix()
}
} else {
// if not found from db, new empty Instance and set Flag:Empty true.
v = &model.TaskInfo{
Empty: true,
}
}
if cache {
s.addCache(func() {
s.dao.AddTaskInfoCache(context.Background(), mid, v)
})
}
return
}
func logDateExist(t *model.TaskInfo, sourceType int, platform int) bool {
if sourceType == t.SourceType && (platform == t.Platform || platform == model.ALL_PLATFORM) {
return true
}
return false
}
// UpdateTaskState is update task set state = 1 ,insert taskLog to table task_log and remove memcache.
func (s *Service) UpdateTaskState(c context.Context, mid int64, build string, platform int, taskState int, reason string) (err error) {
// avoid err when remove the specified-mid task on laser-admin application.
taskID, err := s.dao.QueryTaskID(c, mid)
if err != nil {
log.Error("s.UpdateTaskState() error(%v)", err)
return
}
if taskID == 0 {
return
}
tx, err := s.dao.BeginTran(c)
if err != nil {
log.Error("s.dao.BeginTran() error(%v)", err)
return
}
rows, err := s.dao.TxUpdateTaskState(c, tx, 1, taskID)
if err != nil || rows <= 0 {
tx.Rollback()
log.Error("s.UpdateTaskState() error(%v)", err)
return
}
err = s.addTaskLog(c, tx, taskID, mid, build, platform, taskState, reason)
if err != nil {
tx.Rollback()
log.Error("s.UpdateTaskState() error(%v)", err)
return
}
if err = tx.Commit(); err != nil {
log.Error("tx.Commit() error(%v)", err)
return
}
s.dao.RemoveTaskInfoCache(c, mid)
go s.SendEmail(context.Background(), taskID)
return
}
// addTaskLog is insert TaskLog to table task_log.
func (s *Service) addTaskLog(c context.Context, tx *xsql.Tx, taskID int64, mid int64, build string, platform int, taskState int, reason string) (err error) {
insertID, err := s.dao.TxAddTaskLog(c, tx, taskID, mid, build, platform, taskState, reason)
if err != nil || insertID <= 0 {
log.Error("s.UpdateTaskState() error(%v)", err)
return
}
return
}