Files
stat_center/skd/job/monitor/method.go
T
2026-05-20 16:13:58 +08:00

242 lines
6.3 KiB
Go

package monitor
import (
"context"
"fmt"
"stat/common/enum/consts"
"stat/common/log"
"stat/models/appInfoMod"
"stat/models/channelmod"
"stat/models/downloadinfo"
"stat/models/registermod"
"stat/statg"
"strings"
"time"
)
type LanpageMonitor struct {
Minute int64
LastDay int64
}
var lastIosCount int64
var lastAndroidCount int64
var lastBiliIosCount int64
var lastNhavIosCount int64
var lastHuawenIosCount int64
var lastZhihuIosCount int64
var lanpages = []string{"madougg.com"}
var channels = []string{"xza00267", "xza00182", "xza00082", "xza00139", "xza00242", "sqt00120", "xza00274", "xza00258", "ysa00021", "fabuye", channelmod.OfficialChannelName, "mdapp01", "mdapp", "modelweb", "mdapp02", "mdapp03"}
func RunMonitor() error {
msg := RunLandPageMonitor()
statg.Bot.SendDownloadMessage(msg)
channelMsg := ChannelMonitor()
statg.Bot.SendDownloadMessage(channelMsg)
return nil
}
func RunLandPageMonitor() string {
ctx := context.Background()
appid := int32(888) // 麻豆
end := time.Now()
start := end.Add(-30 * time.Minute)
lanpageMap := make(map[string]*LanpageMonitor)
downloadList, serr := downloadinfo.GetAccessCountByTime(ctx, appid, start, end)
if serr != nil {
log.Error("RunMonitor, GetAccessCountByTime", log.E(serr))
return ""
}
for _, valueInfo := range downloadList {
if len(valueInfo.Domain) > 0 {
domain := valueInfo.Domain
if strings.Contains(valueInfo.Domain, "https://") {
domain = strings.Replace(valueInfo.Domain, "https://", "", -1)
} else if strings.Contains(valueInfo.Domain, "http://") {
domain = strings.Replace(valueInfo.Domain, "http://", "", -1)
}
if value, ok := lanpageMap[domain]; ok {
value.Minute += 1
} else {
lanpageMap[domain] = &LanpageMonitor{
Minute: 1,
}
}
}
}
lastDayEnd := time.Now().AddDate(0, 0, -1)
lastDayStart := lastDayEnd.Add(-30 * time.Minute)
LastDownloadList, serr := downloadinfo.GetAccessCountByTime(ctx, appid, lastDayStart, lastDayEnd)
if serr != nil {
log.Error("RunMonitor, GetAccessCountByTime", log.E(serr))
return ""
}
for _, valueInfo := range LastDownloadList {
if len(valueInfo.Domain) > 0 {
domain := valueInfo.Domain
if strings.Contains(valueInfo.Domain, "https://") {
domain = strings.Replace(valueInfo.Domain, "https://", "", -1)
} else if strings.Contains(valueInfo.Domain, "http://") {
domain = strings.Replace(valueInfo.Domain, "http://", "", -1)
}
if value, ok := lanpageMap[domain]; ok {
value.LastDay += 1
} else {
lanpageMap[domain] = &LanpageMonitor{
LastDay: 1,
}
}
}
}
// 整理渠道数据
tgTxt := "落地页监控:\n"
// tgTxt += fmt.Sprintf("开始: %s\n结束: %s\n", start.Format("2006-01-02T15:04:05"), end.Format("2006-01-02T15:04:05"))
for _, lanpage := range lanpages {
for k, value := range lanpageMap {
if k == lanpage {
message := fmt.Sprintf("%s: 当日:%d 昨日:%d\n", k, value.Minute, value.LastDay)
tgTxt += message
}
}
}
if len(lanpageMap) > 0 {
return tgTxt
}
return ""
}
func ChannelMonitor() string {
ctx := context.Background()
appid := int32(888) // 麻豆
end := time.Now()
start := end.Add(-30 * time.Minute)
lastDayEnd := time.Now().AddDate(0, 0, -1)
lastDayStart := lastDayEnd.Add(-30 * time.Minute)
channelMap := make(map[string]*LanpageMonitor)
for _, channelinfo := range channels {
registerList, err := registermod.RegisterUsersInfoByDistrict(ctx, appid, channelinfo, start, end)
if err != nil {
log.Error("NewCountMethod RegisterUsersInfoByDistrict ", log.E(err))
return ""
}
for _, valueInfo := range registerList {
if valueInfo.IsDirect {
if value, ok := channelMap[valueInfo.DistrictCode]; ok {
value.Minute += 1
} else {
channelMap[valueInfo.DistrictCode] = &LanpageMonitor{
Minute: 1,
}
}
}
}
LastDayRegisterList, err := registermod.RegisterUsersInfoByDistrict(ctx, appid, channelinfo, lastDayStart, lastDayEnd)
if err != nil {
log.Error("NewCountMethod RegisterUsersInfoByDistrict ", log.E(err))
return ""
}
for _, valueInfo := range LastDayRegisterList {
if valueInfo.IsDirect {
if value, ok := channelMap[valueInfo.DistrictCode]; ok {
value.LastDay += 1
} else {
channelMap[valueInfo.DistrictCode] = &LanpageMonitor{
LastDay: 1,
}
}
}
}
}
// 自来量
fissionCount, err := registermod.FissionAddUserCount(ctx, appid, start, end)
if err != nil {
log.Error("NewCountMethod RegisterUsersInfoByDistrict ", log.E(err))
return ""
}
LastDayFissionCount, err := registermod.FissionAddUserCount(ctx, appid, lastDayStart, lastDayEnd)
if err != nil {
log.Error("NewCountMethod RegisterUsersInfoByDistrict ", log.E(err))
return ""
}
channelMap["裂变"] = &LanpageMonitor{
LastDay: LastDayFissionCount,
Minute: fissionCount,
}
// 整理渠道数据
tgTxt := "麻豆渠道监控:\n"
// tgTxt += fmt.Sprintf("开始: %s\n结束: %s\n", start.Format("2006-01-02T15:04:05"), end.Format("2006-01-02T15:04:05"))
for k, value := range channelMap {
if channelmod.IsOfficialChannelName(k) {
k = "自来量"
}
message := fmt.Sprintf("%s: 当日:%d 昨日:%d\n", k, value.Minute, value.LastDay)
tgTxt += message
}
if len(channelMap) > 0 {
return tgTxt
}
// 统计数据
return ""
}
func NewCountMonitor() error {
ctx := context.Background()
end := time.Now()
start := end.Add(-time.Minute * 10)
appIds := []int32{999, 694, 594, 494, 888, 444, 66666}
for _, appid := range appIds {
iosCount, err := registermod.IosAddUserCount(ctx, appid, start, end)
if err != nil {
log.Error("DirectVisitCountMethod IosAddUserCount", log.E(err))
return err
}
androidCount, err := registermod.AndroidAddUserCount(ctx, appid, start, end)
if err != nil {
log.Error("DirectVisitCountMethod IosAddUserCount", log.E(err))
return err
}
if statg.Conf.RunMod == consts.RunModRelease {
if androidCount <= 10 || iosCount <= 5 {
appinfo, _ := appInfoMod.GetAppInfoById(ctx, appid)
// 必须存在
if appinfo.AppId == appid {
text := fmt.Sprintf("[警告]:应用名称:%s\n2分钟新增异常:\n时间:%s\nandroid:%d\nios:%d\n", appinfo.Name, start, androidCount, iosCount)
err = statg.Bot.SendMonitorMessage(text)
if err != nil {
log.Error("tg Send ", log.E(err))
continue
}
}
}
}
}
return nil
}