mirror of https://github.com/allinssl/allinssl
97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
package scheduler
|
||
|
||
import (
|
||
"ALLinSSL/backend/internal/report"
|
||
"ALLinSSL/backend/internal/siteMonitor"
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
"strconv"
|
||
"sync"
|
||
"time"
|
||
)
|
||
|
||
func SiteMonitor() {
|
||
s, err := siteMonitor.GetSqlite()
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
defer s.Close()
|
||
s1, err := report.GetSqlite()
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
return
|
||
}
|
||
defer s1.Close()
|
||
data, err := s.Select()
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
now := time.Now()
|
||
loc := now.Location()
|
||
var wg sync.WaitGroup
|
||
for _, v := range data {
|
||
if v["active"].(int64) == 1 {
|
||
lastTimeStr := v["last_time"].(string)
|
||
lastTime, err := time.ParseInLocation("2006-01-02 15:04:05", lastTimeStr, loc)
|
||
if err != nil {
|
||
// fmt.Println(err)
|
||
continue
|
||
}
|
||
if now.Sub(lastTime).Minutes() >= float64(v["cycle"].(int64)) {
|
||
wg.Add(1)
|
||
go func() {
|
||
defer wg.Done()
|
||
Err := siteMonitor.UpdInfo(fmt.Sprintf("%d", v["id"].(int64)), v["site_domain"].(string), s, v["report_type"].(string))
|
||
|
||
path := fmt.Sprintf("data/site_monitor/%d", v["id"].(int64))
|
||
dir := filepath.Dir(path)
|
||
if err := os.MkdirAll(dir, os.ModePerm); err != nil {
|
||
return
|
||
}
|
||
errCount := 0
|
||
file, err := os.ReadFile(path)
|
||
if err != nil {
|
||
errCount = 0
|
||
}
|
||
errCount, err = strconv.Atoi(string(file))
|
||
if err != nil {
|
||
errCount = 0
|
||
}
|
||
|
||
// 此处应该发送错误邮件
|
||
if Err != nil {
|
||
errCount += 1
|
||
os.WriteFile(path, []byte(strconv.Itoa(errCount)), os.ModePerm)
|
||
repeatSendGap, ok := v["repeat_send_gap"].(int64)
|
||
if !ok {
|
||
repeatSendGap = 10
|
||
}
|
||
reportType, ok := v["report_type"].(string)
|
||
if ok && errCount >= int(repeatSendGap) {
|
||
s1.TableName = "report"
|
||
rdata, err := s1.Where("type=?", []interface{}{reportType}).Select()
|
||
if err != nil {
|
||
return
|
||
}
|
||
if len(rdata) <= 0 {
|
||
return
|
||
}
|
||
_ = report.Notify(map[string]any{
|
||
"provider": reportType,
|
||
"provider_id": strconv.FormatInt(rdata[0]["id"].(int64), 10),
|
||
"body": fmt.Sprintf("检测到域名为%s的网站出现异常,请保持关注!\n检测时间:%s", v["site_domain"].(string), now.Format("2006-01-02 15:04:05")),
|
||
"subject": "ALLinSSL网站监控通知",
|
||
})
|
||
os.Remove(path)
|
||
}
|
||
} else {
|
||
os.Remove(path)
|
||
}
|
||
}()
|
||
}
|
||
}
|
||
}
|
||
wg.Wait()
|
||
}
|