init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package seo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"time"
|
||||
"videoweb/app/skd/job/sitemap"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/seo/sitemapdirty"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
var seoCron *cron.Cron
|
||||
|
||||
func init() {
|
||||
seoCron = cron.New(cron.WithSeconds())
|
||||
}
|
||||
|
||||
var (
|
||||
dirtyMu sync.Mutex
|
||||
// generatedDirtyAt 最近一次 sitemap 生成所对应的内容变更时间
|
||||
generatedDirtyAt time.Time
|
||||
)
|
||||
|
||||
// Start 启动 SEO 静态资源生成(sitemap)。
|
||||
// 页面级搜索引擎推送由 web 进程的 seopush 任务负责,不在这里处理。
|
||||
func Start() {
|
||||
generatedDirtyAt = sitemapdirty.LastDirtyAt(context.Background())
|
||||
sitemap.StartSitemapJob(6*time.Hour, sitemap.OutputDir)
|
||||
|
||||
// 短剧发布/更新/下架发生在 web 进程,这里检查它留下的变更标记,有变更才重新生成
|
||||
_, _ = seoCron.AddFunc("0 */2 * * * ?", func() {
|
||||
regenerateSitemapIfDirty()
|
||||
})
|
||||
seoCron.Start()
|
||||
log.Info("seo skd started")
|
||||
}
|
||||
|
||||
func regenerateSitemapIfDirty() {
|
||||
if !dirtyMu.TryLock() {
|
||||
return
|
||||
}
|
||||
defer dirtyMu.Unlock()
|
||||
|
||||
dirtyAt := sitemapdirty.LastDirtyAt(context.Background())
|
||||
if dirtyAt.IsZero() || !dirtyAt.After(generatedDirtyAt) {
|
||||
return
|
||||
}
|
||||
log.Info("seo: content changed, regenerate sitemap", log.Any("dirtyAt", dirtyAt))
|
||||
sitemap.GenerateSitemap()
|
||||
generatedDirtyAt = dirtyAt
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if seoCron != nil {
|
||||
seoCron.Stop()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user