forked from all_user/stat_center
Initial commit
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package statutils
|
||||
|
||||
import (
|
||||
"stat/common/utils"
|
||||
"stat/models/syncrecord"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type SyncItem struct {
|
||||
AppID int32 // 应用ID
|
||||
JobName string // 任务名称
|
||||
JobDesc string // 任务描述
|
||||
today time.Time // 内部日期
|
||||
todayCount int64 // 今日拉取条数
|
||||
CurrentCount int64 // 当前拉取条数
|
||||
RequestBegin time.Time // 请求开始时间
|
||||
RequestEnd time.Time // 请求结束时间
|
||||
ProcessBegin time.Time // 处理开始时间
|
||||
ProcessEnd time.Time // 处理结束时间
|
||||
jobBegin time.Time // 任务开始时间
|
||||
jobEnd time.Time // 任务结束时间
|
||||
DataLatest time.Time // 拉到的数据的最后时间
|
||||
Error error // 失败错误
|
||||
load bool // 是否载入redis数据
|
||||
}
|
||||
|
||||
func (s *SyncItem) IncCount(value int64) {
|
||||
s.todayCount += value
|
||||
s.CurrentCount += value
|
||||
}
|
||||
|
||||
func (s *SyncItem) TodayCount() int64 {
|
||||
return s.todayCount
|
||||
}
|
||||
|
||||
func (s *SyncItem) JobBegin() time.Time {
|
||||
return s.jobBegin
|
||||
}
|
||||
|
||||
func (s *SyncItem) SetJobBegin(start time.Time) {
|
||||
today := utils.BeginningOfDay(start)
|
||||
s.jobBegin = start
|
||||
if !s.load {
|
||||
s.load = true
|
||||
s.today = today
|
||||
GetTodayCount(s)
|
||||
}
|
||||
if !s.today.Equal(today) {
|
||||
s.today = today
|
||||
s.todayCount = 0
|
||||
s.CurrentCount = 0
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SyncItem) JobEnd() time.Time {
|
||||
return s.jobEnd
|
||||
}
|
||||
|
||||
func (s *SyncItem) SetJobEnd(end time.Time) {
|
||||
s.jobEnd = end
|
||||
SetTodayCount(s)
|
||||
}
|
||||
|
||||
type SyncMonitor struct {
|
||||
mu sync.Mutex
|
||||
dict map[int32]map[string]*SyncItem
|
||||
}
|
||||
|
||||
func (s *SyncMonitor) SetData(appId int32, job string, setFunc func(item *SyncItem)) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
jobs := s.dict[appId]
|
||||
if jobs == nil {
|
||||
jobs = map[string]*SyncItem{}
|
||||
s.dict[appId] = jobs
|
||||
}
|
||||
item := jobs[job]
|
||||
if item == nil {
|
||||
item = &SyncItem{AppID: appId, JobName: job, JobDesc: syncrecord.SyncJobDescribe[job]}
|
||||
jobs[job] = item
|
||||
}
|
||||
item.AppID = appId
|
||||
item.JobName = job
|
||||
|
||||
setFunc(item)
|
||||
|
||||
// protect some item attr
|
||||
item.AppID = appId
|
||||
item.JobName = job
|
||||
item.JobDesc = syncrecord.SyncJobDescribe[job]
|
||||
}
|
||||
|
||||
func (s *SyncMonitor) Traverse(fn func(item *SyncItem)) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
for _, jobs := range s.dict {
|
||||
for _, item := range jobs {
|
||||
fn(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
GlobalSyncMonitor = &SyncMonitor{
|
||||
dict: map[int32]map[string]*SyncItem{},
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user