sys_robot.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. package system
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log-server/global"
  6. "log-server/service/log"
  7. "log-server/service/task"
  8. "log-server/utils"
  9. "strconv"
  10. "time"
  11. )
  12. type RobotService struct{}
  13. type SendMsg struct {
  14. MsgType string `json:"msgtype"`
  15. Markdown struct {
  16. Content string `json:"content"`
  17. } `json:"markdown"`
  18. }
  19. func (robotService *RobotService) PostRobotToEnterpriseWeChatByMarkdown(url string, content string) (result []byte, err error) {
  20. var sendMsg SendMsg
  21. sendMsg.MsgType = "markdown"
  22. sendMsg.Markdown.Content = content
  23. result, err = utils.HttpPost(url, sendMsg)
  24. return
  25. }
  26. // SyncJfDevicesMessage 定时同步机房设备信息
  27. func (robotService *RobotService) SyncJfDevicesMessage() {
  28. //机房现在就开了第15架和第16架设备
  29. //rackArr := []int{15, 16}
  30. rackArr := map[int]float64{
  31. //设备架号:该架正常率标准值
  32. 15: 0.6,
  33. 16: 0.6,
  34. }
  35. content := ">#### **机房设备预警** (" + time.Now().Format("2006-01-02 15:04:05") + "):\n"
  36. var keyWord string
  37. for rack, abnormalRate := range rackArr {
  38. result, err := robotService.RequestJfDevicesState(rack)
  39. if err != nil {
  40. global.GVA_LOG.Error("获取机房设备信息失败,设备可能断电,请注意排查!!!")
  41. keyWord = "获取机房设备信息失败,设备可能断电,请注意排查!!!,错误信息:" + err.Error()
  42. break
  43. }
  44. if string(result) != "null" {
  45. var data [][]int
  46. err := json.Unmarshal(result, &data)
  47. if err != nil {
  48. return
  49. }
  50. NumTotal := len(data)
  51. NumGood := 0
  52. for _, v := range data {
  53. if v[2] == 3 {
  54. NumGood += 1
  55. }
  56. }
  57. //global.GVA_LOG.Info(strconv.Itoa(NumTotal))
  58. //global.GVA_LOG.Info(strconv.Itoa(NumGood))numIntoGame * numStartGame / 1e6
  59. rate := float64(NumGood) / float64(NumTotal)
  60. if rate < abnormalRate {
  61. keyWord += "\n 机房第" + strconv.Itoa(rack) + "架设备正常率为:" + strconv.FormatFloat(rate, 'f', 2, 64) + ",设备正常率低,建议维护重启 \n"
  62. }
  63. //global.GVA_LOG.Info(keyWord)
  64. }
  65. }
  66. if keyWord != "" {
  67. content += keyWord
  68. url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
  69. _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
  70. }
  71. return
  72. }
  73. // SyncJfXmyNewAccount 定时获取机房小绵羊新号剩余
  74. func (robotService *RobotService) SyncJfXmyNewAccount() {
  75. content := ">#### **【账号提醒】预警** (" + time.Now().Format("2006-01-02 15:04:05") + "):\n"
  76. var keyWord string
  77. result, err := robotService.RequestJfXmyNewAccount()
  78. if err != nil {
  79. global.GVA_LOG.Error("定时获取机房小绵羊新号剩余失败!!!")
  80. keyWord = "定时获取机房小绵羊新号剩余失败!!!,错误信息:" + err.Error()
  81. return
  82. }
  83. //global.GVA_LOG.Info(string(result))
  84. accountNum, err := strconv.ParseInt(string(result), 10, 64)
  85. if err != nil {
  86. global.GVA_LOG.Error("定时获取机房小绵羊新号剩余失败2!!!")
  87. keyWord = "定时获取机房小绵羊新号剩余失败2!!!,错误信息:" + err.Error()
  88. return
  89. }
  90. if string(result) != "null" && string(result) != "" {
  91. if accountNum <= 1000 {
  92. keyWord += "机房小绵羊新号不足,请及时添加,当前剩余:" + string(result) + " \n"
  93. //keyWord += "机房小绵羊新号当前剩余:" + string(result) + " \n"
  94. }
  95. }
  96. if keyWord != "" {
  97. content += keyWord
  98. url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
  99. _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
  100. }
  101. return
  102. }
  103. // RequestJfDevicesState 获取机房设备信息
  104. func (robotService *RobotService) RequestJfDevicesState(rack int) (result []byte, err error) {
  105. jfUrl := "http://182.150.53.148:6007/v1/manage/chart"
  106. jfParams := map[string]string{
  107. "Rack": strconv.Itoa(rack),
  108. }
  109. result, err = utils.HttpGet(jfUrl, jfParams)
  110. return
  111. }
  112. // RequestJfXmyNewAccount 获取机房小绵羊新号剩余
  113. func (robotService *RobotService) RequestJfXmyNewAccount() (result []byte, err error) {
  114. jfUrl := global.GVA_CONFIG.ExtranetDomain.Control + "/v1/account/get_left_smallsheep_account"
  115. jfParams := map[string]string{}
  116. result, err = utils.HttpGet(jfUrl, jfParams)
  117. return
  118. }
  119. // SyncIPMessage 定时判断ip
  120. func (robotService *RobotService) SyncIPMessage() {
  121. //if keyWord != "" {
  122. // content += keyWord
  123. // url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
  124. // _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
  125. //}
  126. fmt.Println("ip定时任务")
  127. msg := "# IP异常播报 \n"
  128. personMsg := "# IP异常播报 \n"
  129. var syncData task.SyncData
  130. var ipService log.ServiceIpLog
  131. //首先更新ip列表
  132. err := ipService.UpdateGameIpList()
  133. if err != nil {
  134. global.GVA_LOG.Info("定时更新ip列表失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
  135. }
  136. //然后更新异常列表
  137. err = ipService.UpdateAbnormalMachineIp()
  138. if err != nil {
  139. global.GVA_LOG.Info("更新租机异常信息失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
  140. }
  141. //获取异常游戏名称和负责人
  142. //abnormalIpList, _ := ipService.GetAbnormalIp()
  143. //获取异常租机编号和负责人
  144. abnormalTodayIpList, _ := ipService.GetTodayAbnormalIpLogList()
  145. //如果没有异常列表,直接返回
  146. //if len(abnormalIpList) == 0 && len(abnormalTodayIpList) == 0 {
  147. // return
  148. //}
  149. if len(abnormalTodayIpList) == 0 {
  150. return
  151. }
  152. var mobile []string
  153. mpsPerson, _ := syncData.Person.GetUserInfoData()
  154. fmt.Println(abnormalTodayIpList)
  155. personMsgData := make(map[string]string, len(mpsPerson))
  156. ipMsgData := make(map[string]string, len(mpsPerson))
  157. //如果if len(abnormalIpList) != 0
  158. //将游戏名称添加至数组
  159. //if len(abnormalIpList) != 0 {
  160. // for k, _ := range abnormalIpList {
  161. // ipMsgData[k] += fmt.Sprintf("<font color=\"warning\">%s</font>", abnormalIpList[k]) + "\n"
  162. // }
  163. //}
  164. //if len(abnormalTodayIpList) != 0
  165. //将租机编号添加至消息体
  166. for k, v := range abnormalTodayIpList {
  167. ipMsgData[v] += fmt.Sprintf("<font color=\"warning\">%s</font>", k) + "\n"
  168. //if k != len(abnormalTodayIpList) - 1 {
  169. // ipMsgData[v.User] += "\n"
  170. //}
  171. }
  172. for k, _ := range ipMsgData {
  173. mobile = append(mobile, mpsPerson[k].MobilePhoneNumber)
  174. msg += k + " " + "\n"
  175. msg += fmt.Sprintf("<font color=\"warning\">%s</font>", ipMsgData[k])
  176. personMsgData[k] += fmt.Sprintf("<font color=\"warning\">%s</font>", ipMsgData[k]) + "\n"
  177. }
  178. url := global.GVA_CONFIG.SendUrl.ComputerSendUrl
  179. var sendData SendMsg
  180. sendData.MsgType = "markdown"
  181. sendData.Markdown.Content = msg
  182. syncData.SendMsgData(url, sendData)
  183. //企微机器人基于电话号码@
  184. if len(mobile) != 0 {
  185. var sendTextData task.SendTextMsg
  186. sendTextData.MsgType = "text"
  187. sendTextData.Text.MentionedMobileList = mobile
  188. //fmt.Println(mobile)
  189. //b ,_ := json.Marshal(sendTextData)
  190. //global.GVA_LOG.Warn(string(b))
  191. syncData.SendMsgData(url, sendTextData)
  192. }
  193. for person, personData := range personMsgData {
  194. var sendPersonData SendMsg
  195. sendPersonMsg := personMsg + personData
  196. sendPersonData.MsgType = "markdown"
  197. sendPersonData.Markdown.Content = sendPersonMsg
  198. syncData.SendMsgData(mpsPerson[person].Url, sendPersonData)
  199. }
  200. return
  201. }
  202. // SyncMachineIPMessage 定时判断机器ip
  203. //func (robotService *RobotService) SyncMachineIPMessage() {
  204. // fmt.Println("租机ip定时检查")
  205. // msg := "# IP租机异常播报 \n "
  206. // personMsg := "# IP租机异常播报 \n "
  207. // var syncData task.SyncData
  208. // var ipService log.ServiceIpLog
  209. // //首先更新异常列表
  210. // err := ipService.UpdateAbnormalMachineIp()
  211. // if err != nil {
  212. // global.GVA_LOG.Info("更新租机异常信息失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
  213. // }
  214. // abnormalTodayIpList, _ := ipService.GetTodayAbnormalIpLogList()
  215. // if len(abnormalTodayIpList) == 0 {
  216. // return
  217. // }
  218. // var mobile []string
  219. // mpsPerson, _ := syncData.Person.GetUserInfoData()
  220. // personMsgData := make(map[string]string, len(mpsPerson))
  221. // //fmt.Println(mpsPerson)
  222. // for _, v := range abnormalTodayIpList {
  223. // mobile = append(mobile, mpsPerson[v.User].MobilePhoneNumber)
  224. // msg += "# " + v.User + " " + "\n"
  225. // msg += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName) + "\n"
  226. // personMsgData[v.User] += fmt.Sprintf("<font color=\"warning\">%s</font>", v.PcCode+" "+v.TaskName) + "\n"
  227. // }
  228. // url := global.GVA_CONFIG.SendUrl.ComputerSendUrl
  229. // var sendData SendMsg
  230. // sendData.MsgType = "markdown"
  231. // sendData.Markdown.Content = msg
  232. // syncData.SendMsgData(url, sendData)
  233. //
  234. // if len(mobile) != 0 {
  235. // var sendTextData task.SendTextMsg
  236. // sendTextData.MsgType = "text"
  237. // sendTextData.Text.MentionedMobileList = mobile
  238. // //fmt.Println(mobile)
  239. // //b ,_ := json.Marshal(sendTextData)
  240. // //global.GVA_LOG.Warn(string(b))
  241. // syncData.SendMsgData(url, sendTextData)
  242. // }
  243. // for person, personData := range personMsgData {
  244. // var sendPersonData SendMsg
  245. // sendPersonMsg := personMsg + personData
  246. // sendPersonData.MsgType = "markdown"
  247. // sendPersonData.Markdown.Content = sendPersonMsg
  248. // syncData.SendMsgData(mpsPerson[person].Url, sendPersonData)
  249. // }
  250. // return
  251. //}