package system
import (
"encoding/json"
"fmt"
"log-server/global"
"log-server/service/log"
"log-server/service/task"
"log-server/utils"
"strconv"
"time"
)
type RobotService struct{}
type SendMsg struct {
MsgType string `json:"msgtype"`
Markdown struct {
Content string `json:"content"`
} `json:"markdown"`
}
func (robotService *RobotService) PostRobotToEnterpriseWeChatByMarkdown(url string, content string) (result []byte, err error) {
var sendMsg SendMsg
sendMsg.MsgType = "markdown"
sendMsg.Markdown.Content = content
result, err = utils.HttpPost(url, sendMsg)
return
}
// SyncJfDevicesMessage 定时同步机房设备信息
func (robotService *RobotService) SyncJfDevicesMessage() {
//机房现在就开了第15架和第16架设备
//rackArr := []int{15, 16}
rackArr := map[int]float64{
//设备架号:该架正常率标准值
15: 0.6,
16: 0.6,
}
content := ">#### **机房设备预警** (" + time.Now().Format("2006-01-02 15:04:05") + "):\n"
var keyWord string
for rack, abnormalRate := range rackArr {
result, err := robotService.RequestJfDevicesState(rack)
if err != nil {
global.GVA_LOG.Error("获取机房设备信息失败,设备可能断电,请注意排查!!!")
keyWord = "获取机房设备信息失败,设备可能断电,请注意排查!!!,错误信息:" + err.Error()
break
}
if string(result) != "null" {
var data [][]int
err := json.Unmarshal(result, &data)
if err != nil {
return
}
NumTotal := len(data)
NumGood := 0
for _, v := range data {
if v[2] == 3 {
NumGood += 1
}
}
//global.GVA_LOG.Info(strconv.Itoa(NumTotal))
//global.GVA_LOG.Info(strconv.Itoa(NumGood))numIntoGame * numStartGame / 1e6
rate := float64(NumGood) / float64(NumTotal)
if rate < abnormalRate {
keyWord += "\n 机房第" + strconv.Itoa(rack) + "架设备正常率为:" + strconv.FormatFloat(rate, 'f', 2, 64) + ",设备正常率低,建议维护重启 \n"
}
//global.GVA_LOG.Info(keyWord)
}
}
if keyWord != "" {
content += keyWord
url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
_, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
}
return
}
// SyncJfXmyNewAccount 定时获取机房小绵羊新号剩余
func (robotService *RobotService) SyncJfXmyNewAccount() {
content := ">#### **【账号提醒】预警** (" + time.Now().Format("2006-01-02 15:04:05") + "):\n"
var keyWord string
result, err := robotService.RequestJfXmyNewAccount()
if err != nil {
global.GVA_LOG.Error("定时获取机房小绵羊新号剩余失败!!!")
keyWord = "定时获取机房小绵羊新号剩余失败!!!,错误信息:" + err.Error()
return
}
//global.GVA_LOG.Info(string(result))
accountNum, err := strconv.ParseInt(string(result), 10, 64)
if err != nil {
global.GVA_LOG.Error("定时获取机房小绵羊新号剩余失败2!!!")
keyWord = "定时获取机房小绵羊新号剩余失败2!!!,错误信息:" + err.Error()
return
}
if string(result) != "null" && string(result) != "" {
if accountNum <= 1000 {
keyWord += "机房小绵羊新号不足,请及时添加,当前剩余:" + string(result) + " \n"
//keyWord += "机房小绵羊新号当前剩余:" + string(result) + " \n"
}
}
if keyWord != "" {
content += keyWord
url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
_, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
}
return
}
// RequestJfDevicesState 获取机房设备信息
func (robotService *RobotService) RequestJfDevicesState(rack int) (result []byte, err error) {
jfUrl := "http://182.150.53.148:6007/v1/manage/chart"
jfParams := map[string]string{
"Rack": strconv.Itoa(rack),
}
result, err = utils.HttpGet(jfUrl, jfParams)
return
}
// RequestJfXmyNewAccount 获取机房小绵羊新号剩余
func (robotService *RobotService) RequestJfXmyNewAccount() (result []byte, err error) {
jfUrl := "http://xjf.lianyou.fun:8099/v1/account/get_left_smallsheep_account"
jfParams := map[string]string{}
result, err = utils.HttpGet(jfUrl, jfParams)
return
}
// SyncIPMessage 定时判断ip
func (robotService *RobotService) SyncIPMessage() {
//if keyWord != "" {
// content += keyWord
// url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
// _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
//}
fmt.Println("ip定时任务")
msg := "# IP异常播报 \n"
personMsg := "# IP异常播报 \n"
var syncData task.SyncData
var ipService log.ServiceIpLog
//首先更新ip列表
err := ipService.UpdateGameIpList()
if err != nil {
global.GVA_LOG.Info("定时更新ip列表失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
}
//然后更新异常列表
err = ipService.UpdateAbnormalMachineIp()
if err != nil {
global.GVA_LOG.Info("更新租机异常信息失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
}
//获取异常游戏名称和负责人
//abnormalIpList, _ := ipService.GetAbnormalIp()
//获取异常租机编号和负责人
abnormalTodayIpList, _ := ipService.GetTodayAbnormalIpLogList()
//如果没有异常列表,直接返回
//if len(abnormalIpList) == 0 && len(abnormalTodayIpList) == 0 {
// return
//}
if len(abnormalTodayIpList) == 0 {
return
}
var mobile []string
mpsPerson, _ := syncData.Person.GetUserInfoData()
fmt.Println(abnormalTodayIpList)
personMsgData := make(map[string]string, len(mpsPerson))
ipMsgData := make(map[string]string, len(mpsPerson))
//如果if len(abnormalIpList) != 0
//将游戏名称添加至数组
//if len(abnormalIpList) != 0 {
// for k, _ := range abnormalIpList {
// ipMsgData[k] += fmt.Sprintf("%s", abnormalIpList[k]) + "\n"
// }
//}
//if len(abnormalTodayIpList) != 0
//将租机编号添加至消息体
for k, v := range abnormalTodayIpList {
ipMsgData[v] += fmt.Sprintf("%s", 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("%s", ipMsgData[k])
personMsgData[k] += fmt.Sprintf("%s", ipMsgData[k]) + "\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
}
// 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("%s", v.PcCode+" "+v.TaskName) + "\n"
// personMsgData[v.User] += fmt.Sprintf("%s", 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
//}