242 lines
6.3 KiB
Go
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
|
|
}
|