// 后台运行的任务 func ServeBackGround() { if db.MasterDB == nil { return } // 初始化 七牛云存储 logic.DefaultUploader.InitQiniu() // 常驻内存的数据 go loadData() c := cron.New() // 每天对非活跃用户降频 c.AddFunc("@daily", decrUserActiveWeight) // 两分钟刷一次浏览数(TODO:重启丢失问题?信号控制重启?) c.AddFunc("@every 2m", logic.Views.Flush) if global.OnlineEnv() { // 每天生成 sitemap 文件 c.AddFunc("@daily", logic.GenSitemap) // 给用户发邮件,如通知网站最近的动态,每周的晨读汇总等 c.AddFunc("0 0 4 * * 1", logic.DefaultEmail.EmailNotice) } c.Start() }
func executeTpl(ctx echo.Context, tpl *template.Template, data map[string]interface{}) error { objLog := logic.GetLogger(ctx) // 如果没有定义css和js模板,则定义之 if jsTpl := tpl.Lookup("js"); jsTpl == nil { tpl.Parse(`{{define "js"}}{{end}}`) } if jsTpl := tpl.Lookup("css"); jsTpl == nil { tpl.Parse(`{{define "css"}}{{end}}`) } // 当前用户信息 curUser, ok := ctx.Get("user").(*model.Me) if ok { data["me"] = curUser } else { data["me"] = map[string]interface{}{} } // websocket主机 if global.OnlineEnv() { data["wshost"] = config.ConfigFile.MustValue("global", "domain") } else { data["wshost"] = global.App.Host + ":" + global.App.Port } global.App.SetUptime() data["app"] = global.App data["online_users"] = map[string]int{"online": logic.Book.Len(), "maxonline": logic.MaxOnlineNum()} buf := new(bytes.Buffer) err := tpl.Execute(buf, data) if err != nil { objLog.Errorln("excute template error:", err) return err } return ctx.HTML(http.StatusOK, buf.String()) }