Explorar el Código

租机ip播报策略优化

maker hace 2 años
padre
commit
336f2c50a0
Se han modificado 3 ficheros con 124 adiciones y 70 borrados
  1. 21 7
      model/log/log_ip.go
  2. 45 6
      service/log/log_ip.go
  3. 58 57
      service/system/sys_robot.go

+ 21 - 7
model/log/log_ip.go

@@ -11,6 +11,19 @@ type IpLog struct {
 	CreateTime string `json:"create_time"` // 创建时间
 }
 
+//播报处理的iplog
+type IpLogBroadcast struct {
+	Id         uint   `json:"id"`
+	Ip         string `json:"ip"`          //模拟器ip
+	User       string `json:"user"`        //负责人
+	LogUuid    string `json:"log_uuid"`    //日志UUID
+	GameId     int    `json:"game_id"`     //游戏id
+	Account    string `json:"account"`     //账号
+	PcCode     string `json:"pc_code"`     //电脑编号
+	CreateDate string `json:"create_date"` // 创建日期
+	CreateTime string `json:"create_time"` // 创建时间
+}
+
 type IpLogRequest struct {
 	Id         uint     `json:"id"`
 	Ip         string   `json:"ip"` //模拟器ip
@@ -66,9 +79,11 @@ type QueryIpList struct {
 
 type AbnormalMachineIp struct {
 	Id         uint   `json:"id"`
-	Ip         string `json:"ip"` //模拟器ip
-	Count      int    `json:"count"`	//ip数量
+	Ip         string `json:"ip"`          //模拟器ip
+	Count      int    `json:"count"`       //ip数量
 	GameId     int    `json:"game_id"`     //游戏id
+	User       string `json:"user"`        //负责人
+	TaskName   string `json:"task_name"`   //任务名称
 	PcCode     string `json:"pc_code"`     //电脑编号
 	CreateDate string `json:"create_date"` // 创建日期
 }
@@ -84,12 +99,12 @@ type AbnormalIpLogRequest struct {
 
 type TodayAbnormalMachineIp struct {
 	Id         uint   `json:"id"`
-	Ip         string `json:"ip"` //模拟器ip
-	Count      int    `json:"count"`	//ip数量
+	Ip         string `json:"ip"`          //模拟器ip
+	Count      int    `json:"count"`       //ip数量
 	GameId     int    `json:"game_id"`     //游戏id
 	PcCode     string `json:"pc_code"`     //电脑编号
-	User       string `json:"user"`			//负责人名称
-	TaskName   string `json:"task_name"`	//任务名称
+	User       string `json:"user"`        //负责人名称
+	TaskName   string `json:"task_name"`   //任务名称
 	CreateDate string `json:"create_date"` // 创建日期
 }
 
@@ -104,4 +119,3 @@ func (AbnormalMachineIp) TableName() string {
 func (GameIpResponse) TableName() string {
 	return "game_ip_list"
 }
-

+ 45 - 6
service/log/log_ip.go

@@ -92,6 +92,8 @@ func (s *ServiceIpLog) GetAbnormalIpLogList(api log.AbnormalIpLogRequest, info r
 		startDate = api.Date[0]
 		endDate = api.Date[1]
 	}
+	db = db.Select("abnormal_machine_ip.*, game_task.task_name, game_task.user")
+	db = db.Joins("left join game_task on game_task.task_id = abnormal_machine_ip.game_id")
 	db = db.Where("create_date >= ? and create_date <= ?", startDate, endDate)
 	if api.GameId != 0 {
 		db = db.Where("game_id = ?", api.GameId)
@@ -112,10 +114,12 @@ func (s *ServiceIpLog) GetAbnormalIpLogList(api log.AbnormalIpLogRequest, info r
 			var OrderStr string
 			// 设置有效排序key 防止sql注入
 			// 感谢 Tom4t0 提交漏洞信息
-			orderMap := make(map[string]bool, 3)
+			orderMap := make(map[string]bool, 5)
 			orderMap["game_id"] = true
 			orderMap["count"] = true
 			orderMap["create_date"] = true
+			orderMap["user"] = true
+			orderMap["task_name"] = true
 			if orderMap[order] {
 				if desc {
 					OrderStr = order + " desc"
@@ -140,25 +144,60 @@ func (s *ServiceIpLog) GetAbnormalIpLogList(api log.AbnormalIpLogRequest, info r
 }
 
 //获取今日异常租机ip(ip播报使用)
-func (s *ServiceIpLog) GetTodayAbnormalIpLogList() (list []log.TodayAbnormalMachineIp, err error){
+func (s *ServiceIpLog) GetTodayAbnormalIpLogList() (list map[string]string, err error){
 	var total int64
 	var apiList []log.TodayAbnormalMachineIp
+	pcCodeList := make(map[string]string)
+	usePcCode := make(map[string]string)
 	date := time.Now().Format("2006-01-02")
+	//1个半小时前的时间
+	effectiveTime :=time.Now().Add(-time.Minute * 90).Format("2006-01-02 15:04:05")
+
 	db := global.GVA_DB.Table("abnormal_machine_ip as ami")
 	db = db.Select("ami.*, gt.task_name, gt.user")
 	db = db.Joins("left join game_task as gt on gt.task_id = ami.game_id")
 	db = db.Where("create_date", date)
 	err = db.Count(&total).Error
+	if total == 0 {
+		return usePcCode, err
+	}
 	if err != nil {
-		return apiList, err
+		return usePcCode, err
 	} else {
 		err = db.Order("id").Find(&apiList).Error
 	}
 	//遍历更改日期格式
 	for i, _ := range apiList {
 		apiList[i].CreateDate = apiList[i].CreateDate[:10]
+		//得到{编号【负责人名称类似结构】}
+		pcCodeList[apiList[i].PcCode] = apiList[i].User
+	}
+
+	//遍历列表中的租机,查询数据库(租机编号,和本日时间),得到记录集合,通过ip作为map的key,判断是否需要播报
+	//遍历租机编号列表
+	for k,_ := range pcCodeList {
+		var ipList []log.IpLogBroadcast
+		ipSet := make(map[string]int)
+		db1 := global.GVA_DB.Model(&log.IpLog{}).Select("ip_log.*, game_task.user")
+		db1 = db1.Joins("left join game_task on game_task.task_id = ip_log.game_id")
+		db1.Where("create_date = ? and pc_code = ? and ip_log.create_time > ? ", date, k, effectiveTime).Limit(5).Order("id desc").Find(&ipList)
+		//fmt.Println(ipList)
+		//fmt.Println(len(ipList))
+		//样本太少,不做处理
+		if len(ipList) <= 1 {
+			return usePcCode, err
+		}
+		//遍历ipList,查找
+		for _, v := range ipList {
+			ipSet[v.Ip] = 1
+			//fmt.Println(ipSet)
+			//fmt.Println(len(ipSet))
+		}
+		if len(ipSet) == 1 {
+			usePcCode[ipList[0].PcCode] = ipList[0].User
+		}
 	}
-	return apiList , err
+	return usePcCode , err
 }
 
 //根据gameId获取ip
@@ -317,6 +356,7 @@ func (s *ServiceIpLog) UpdateAbnormalMachineIp() (err error) {
 	db = db.Where("create_date", date)
 	db = db.Group("pc_code, ip, game_id")
 	err = db.Find(&abnormalIpList).Error
+	//fmt.Println(abnormalIpList)
 	if err != nil {
 		return err
 	}
@@ -343,7 +383,7 @@ func (s *ServiceIpLog) UpdateAbnormalMachineIp() (err error) {
 			continue
 		}
 		//如果数据库中没有相同的记录,则创建相对应的记录
-		err = global.GVA_DB.Model(&log.AbnormalMachineIp{}).Create(&abnormalIpList[i]).Error
+		err = global.GVA_DB.Model(&log.AbnormalMachineIp{}).Omit("user", "task_name").Create(&abnormalIpList[i]).Error
 		if err != nil {
 			return err
 		}
@@ -375,7 +415,6 @@ func (s *ServiceIpLog) UpdateGameIpList() (err error) {
 		return err
 	}
 	err = db.Order("ip_log.id").Find(&apiList).Error
-	fmt.Println(apiList)
 	//遍历更改日期格式
 	for i, _ := range apiList {
 		var entity log.GameIpResponse

+ 58 - 57
service/system/sys_robot.go

@@ -135,8 +135,8 @@ func (robotService *RobotService) SyncIPMessage() {
 	//	_, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
 	//}
 	fmt.Println("ip定时任务")
-	msg := "# IP异常播报 \n "
-	personMsg := "# IP异常播报 \n "
+	msg := "# IP异常播报 \n"
+	personMsg := "# IP异常播报 \n"
 	var syncData task.SyncData
 	var ipService log.ServiceIpLog
 
@@ -164,6 +164,7 @@ func (robotService *RobotService) SyncIPMessage() {
 	}
 	var mobile []string
 	mpsPerson, _ := syncData.Person.GetUserInfoData()
+	fmt.Println(abnormalTodayIpList)
 	personMsgData := make(map[string]string, len(mpsPerson))
 	ipMsgData := make(map[string]string, len(mpsPerson))
 
@@ -177,16 +178,16 @@ func (robotService *RobotService) SyncIPMessage() {
 	//if len(abnormalTodayIpList) != 0
 	//将租机编号添加至消息体
 	for k, v := range abnormalTodayIpList {
-		ipMsgData[v.User] += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName)
-		if k != len(abnormalTodayIpList) - 1 {
-			ipMsgData[v.User] +=  "\n"
-		}
+		ipMsgData[v] += fmt.Sprintf("<font color=\"warning\">%s</font>", k ) + "\n"
+		//if k != len(abnormalTodayIpList) - 1 {
+		//	ipMsgData[v.User] +=  "\n"
+		//}
 	}
 
 	for k, _ := range ipMsgData {
 		mobile = append(mobile, mpsPerson[k].MobilePhoneNumber)
-		msg += "# " + k + " " + "\n"
-		msg += fmt.Sprintf("<font color=\"warning\">%s</font>", ipMsgData[k]) + "\n"
+		msg += k + " " + "\n"
+		msg += fmt.Sprintf("<font color=\"warning\">%s</font>", ipMsgData[k])
 		personMsgData[k] += fmt.Sprintf("<font color=\"warning\">%s</font>", ipMsgData[k]) + "\n"
 	}
 	url := global.GVA_CONFIG.SendUrl.ComputerSendUrl
@@ -215,52 +216,52 @@ func (robotService *RobotService) SyncIPMessage() {
 }
 
 // SyncMachineIPMessage 定时判断机器ip
-func (robotService *RobotService) SyncMachineIPMessage() {
-	fmt.Println("租机ip定时检查")
-	msg := "# IP租机异常播报 \n "
-	personMsg := "# IP租机异常播报 \n "
-	var syncData task.SyncData
-	var ipService log.ServiceIpLog
-	//首先更新异常列表
-	err := ipService.UpdateAbnormalMachineIp()
-	if err != nil {
-		global.GVA_LOG.Info("更新租机异常信息失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
-	}
-	abnormalTodayIpList, _ := ipService.GetTodayAbnormalIpLogList()
-	if len(abnormalTodayIpList) == 0 {
-		return
-	}
-	var mobile []string
-	mpsPerson, _ := syncData.Person.GetUserInfoData()
-	personMsgData := make(map[string]string, len(mpsPerson))
-	//fmt.Println(mpsPerson)
-	for _, v := range abnormalTodayIpList {
-		mobile = append(mobile, mpsPerson[v.User].MobilePhoneNumber)
-		msg += "# " + v.User + " " + "\n"
-		msg += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName) + "\n"
-		personMsgData[v.User] += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName) + "\n"
-	}
-	url := global.GVA_CONFIG.SendUrl.ComputerSendUrl
-	var sendData SendMsg
-	sendData.MsgType = "markdown"
-	sendData.Markdown.Content = msg
-	syncData.SendMsgData(url, sendData)
-
-	if len(mobile) != 0 {
-		var sendTextData task.SendTextMsg
-		sendTextData.MsgType = "text"
-		sendTextData.Text.MentionedMobileList = mobile
-		//fmt.Println(mobile)
-		//b ,_ := json.Marshal(sendTextData)
-		//global.GVA_LOG.Warn(string(b))
-		syncData.SendMsgData(url, sendTextData)
-	}
-	for person, personData := range personMsgData {
-		var sendPersonData SendMsg
-		sendPersonMsg := personMsg + personData
-		sendPersonData.MsgType = "markdown"
-		sendPersonData.Markdown.Content = sendPersonMsg
-		syncData.SendMsgData(mpsPerson[person].Url, sendPersonData)
-	}
-	return
-}
+//func (robotService *RobotService) SyncMachineIPMessage() {
+//	fmt.Println("租机ip定时检查")
+//	msg := "# IP租机异常播报 \n "
+//	personMsg := "# IP租机异常播报 \n "
+//	var syncData task.SyncData
+//	var ipService log.ServiceIpLog
+//	//首先更新异常列表
+//	err := ipService.UpdateAbnormalMachineIp()
+//	if err != nil {
+//		global.GVA_LOG.Info("更新租机异常信息失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
+//	}
+//	abnormalTodayIpList, _ := ipService.GetTodayAbnormalIpLogList()
+//	if len(abnormalTodayIpList) == 0 {
+//		return
+//	}
+//	var mobile []string
+//	mpsPerson, _ := syncData.Person.GetUserInfoData()
+//	personMsgData := make(map[string]string, len(mpsPerson))
+//	//fmt.Println(mpsPerson)
+//	for _, v := range abnormalTodayIpList {
+//		mobile = append(mobile, mpsPerson[v.User].MobilePhoneNumber)
+//		msg += "# " + v.User + " " + "\n"
+//		msg += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName) + "\n"
+//		personMsgData[v.User] += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName) + "\n"
+//	}
+//	url := global.GVA_CONFIG.SendUrl.ComputerSendUrl
+//	var sendData SendMsg
+//	sendData.MsgType = "markdown"
+//	sendData.Markdown.Content = msg
+//	syncData.SendMsgData(url, sendData)
+//
+//	if len(mobile) != 0 {
+//		var sendTextData task.SendTextMsg
+//		sendTextData.MsgType = "text"
+//		sendTextData.Text.MentionedMobileList = mobile
+//		//fmt.Println(mobile)
+//		//b ,_ := json.Marshal(sendTextData)
+//		//global.GVA_LOG.Warn(string(b))
+//		syncData.SendMsgData(url, sendTextData)
+//	}
+//	for person, personData := range personMsgData {
+//		var sendPersonData SendMsg
+//		sendPersonMsg := personMsg + personData
+//		sendPersonData.MsgType = "markdown"
+//		sendPersonData.Markdown.Content = sendPersonMsg
+//		syncData.SendMsgData(mpsPerson[person].Url, sendPersonData)
+//	}
+//	return
+//}