init
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/robfig/cron/v3"
|
||||
"strconv"
|
||||
"time"
|
||||
"trojan/core"
|
||||
"trojan/trojan"
|
||||
)
|
||||
|
||||
var c *cron.Cron
|
||||
|
||||
// SetData 设置流量限制
|
||||
func SetData(id uint, quota int) *ResponseBody {
|
||||
responseBody := ResponseBody{Msg: "success"}
|
||||
defer TimeCost(time.Now(), &responseBody)
|
||||
mysql := core.GetMysql()
|
||||
if err := mysql.SetQuota(id, quota); err != nil {
|
||||
responseBody.Msg = err.Error()
|
||||
}
|
||||
return &responseBody
|
||||
}
|
||||
|
||||
// CleanData 清空流量
|
||||
func CleanData(id uint) *ResponseBody {
|
||||
responseBody := ResponseBody{Msg: "success"}
|
||||
defer TimeCost(time.Now(), &responseBody)
|
||||
mysql := core.GetMysql()
|
||||
if err := mysql.CleanData(id); err != nil {
|
||||
responseBody.Msg = err.Error()
|
||||
}
|
||||
return &responseBody
|
||||
}
|
||||
|
||||
func monthlyResetJob() {
|
||||
mysql := core.GetMysql()
|
||||
if err := mysql.MonthlyResetData(); err != nil {
|
||||
fmt.Println("MonthlyResetError: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// GetResetDay 获取重置日
|
||||
func GetResetDay() *ResponseBody {
|
||||
responseBody := ResponseBody{Msg: "success"}
|
||||
defer TimeCost(time.Now(), &responseBody)
|
||||
dayStr, _ := core.GetValue("reset_day")
|
||||
day, _ := strconv.Atoi(dayStr)
|
||||
responseBody.Data = map[string]interface{}{
|
||||
"resetDay": day,
|
||||
}
|
||||
return &responseBody
|
||||
}
|
||||
|
||||
// UpdateResetDay 更新重置流量日
|
||||
func UpdateResetDay(day uint) *ResponseBody {
|
||||
responseBody := ResponseBody{Msg: "success"}
|
||||
defer TimeCost(time.Now(), &responseBody)
|
||||
if day > 31 || day < 0 {
|
||||
responseBody.Msg = fmt.Sprintf("%d为非正常日期", day)
|
||||
return &responseBody
|
||||
}
|
||||
dayStr, _ := core.GetValue("reset_day")
|
||||
oldDay, _ := strconv.Atoi(dayStr)
|
||||
if day == uint(oldDay) {
|
||||
return &responseBody
|
||||
}
|
||||
if len(c.Entries()) > 1 {
|
||||
c.Remove(c.Entries()[len(c.Entries())-1].ID)
|
||||
}
|
||||
if day != 0 {
|
||||
c.AddFunc(fmt.Sprintf("0 0 %d * *", day), func() {
|
||||
monthlyResetJob()
|
||||
})
|
||||
}
|
||||
core.SetValue("reset_day", strconv.Itoa(int(day)))
|
||||
return &responseBody
|
||||
}
|
||||
|
||||
// ScheduleTask 定时任务
|
||||
func ScheduleTask() {
|
||||
loc, _ := time.LoadLocation("Asia/Shanghai")
|
||||
c = cron.New(cron.WithLocation(loc))
|
||||
c.AddFunc("@daily", func() {
|
||||
mysql := core.GetMysql()
|
||||
if needRestart, err := mysql.DailyCheckExpire(); err != nil {
|
||||
fmt.Println("DailyCheckError: " + err.Error())
|
||||
} else if needRestart {
|
||||
trojan.Restart()
|
||||
}
|
||||
})
|
||||
|
||||
dayStr, _ := core.GetValue("reset_day")
|
||||
if dayStr == "" {
|
||||
dayStr = "1"
|
||||
core.SetValue("reset_day", dayStr)
|
||||
}
|
||||
day, _ := strconv.Atoi(dayStr)
|
||||
if day != 0 {
|
||||
c.AddFunc(fmt.Sprintf("0 0 %d * *", day), func() {
|
||||
monthlyResetJob()
|
||||
})
|
||||
}
|
||||
c.Start()
|
||||
}
|
||||
Reference in New Issue
Block a user