forked from all_user/stat_center
Initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package domainser
|
||||
|
||||
import (
|
||||
"context"
|
||||
"stat/common/enum/consts"
|
||||
"stat/common/log"
|
||||
"stat/common/statutils"
|
||||
"stat/models/domainmod"
|
||||
"stat/statg"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
var (
|
||||
checkCron *cron.Cron
|
||||
)
|
||||
|
||||
func init() {
|
||||
checkCron = cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(&log.Logger{}))) // 秒级定时任务
|
||||
}
|
||||
|
||||
// Start 定时器任务启动
|
||||
func Start() {
|
||||
log.Info("domain checker start...")
|
||||
ctx := context.Background()
|
||||
if statg.Conf.RunMod != consts.RunModRelease {
|
||||
return
|
||||
}
|
||||
_, _ = checkCron.AddFunc("0 0/5 * * * ?", func() {
|
||||
statutils.ServerMon.RunWithName(func() error {
|
||||
return DomainCheck(ctx)
|
||||
}, statutils.GetFuncName(DomainCheck))
|
||||
})
|
||||
checkCron.Start()
|
||||
}
|
||||
|
||||
func DomainCheck(ctx context.Context) error {
|
||||
list, err := domainmod.FindManyDomain(ctx, bson.M{
|
||||
"enable": true,
|
||||
"checkTime": bson.M{"$lt": time.Now().Add(-10 * time.Minute)},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
redirectedChecks := []domainmod.CheckType{domainmod.CheckTypePollute}
|
||||
unRedirectedChecks := []domainmod.CheckType{domainmod.CheckTypePollute, domainmod.CheckTypeGFW}
|
||||
|
||||
domains := make(domainmod.DomainList, 0)
|
||||
for _, item := range list {
|
||||
if item.Redirected {
|
||||
item.Checks = redirectedChecks
|
||||
} else {
|
||||
item.Checks = unRedirectedChecks
|
||||
}
|
||||
if item.Status == domainmod.CheckStatusNone {
|
||||
if item.CheckTime.Before(time.Now().Add(-10 * time.Minute)) {
|
||||
domains = append(domains, item)
|
||||
}
|
||||
} else {
|
||||
if item.CheckTime.Before(time.Now().Add(time.Duration(-item.CycleHour) * time.Hour)) {
|
||||
domains = append(domains, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(domains) == 0 {
|
||||
return nil
|
||||
}
|
||||
domainChecker := &DomainChecker{
|
||||
Items: domains,
|
||||
}
|
||||
return domainChecker.StartCheck()
|
||||
}
|
||||
Reference in New Issue
Block a user