123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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
- }
|