sys_robot.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package system
  2. import (
  3. "encoding/json"
  4. "log-server/global"
  5. "log-server/utils"
  6. "strconv"
  7. "time"
  8. )
  9. type RobotService struct{}
  10. type SendMsg struct {
  11. MsgType string `json:"msgtype"`
  12. Markdown struct {
  13. Content string `json:"content"`
  14. } `json:"markdown"`
  15. }
  16. func (robotService *RobotService) PostRobotToEnterpriseWeChatByMarkdown(url string, content string) (result []byte, err error) {
  17. var sendMsg SendMsg
  18. sendMsg.MsgType = "markdown"
  19. sendMsg.Markdown.Content = content
  20. result, err = utils.HttpPost(url, sendMsg)
  21. return
  22. }
  23. // SyncJfDevicesMessage 定时同步机房设备信息
  24. func (robotService *RobotService) SyncJfDevicesMessage() {
  25. //机房现在就开了第15架和第16架设备
  26. //rackArr := []int{15, 16}
  27. rackArr := map[int]float64{
  28. //设备架号:该架正常率标准值
  29. 15: 0.6,
  30. 16: 0.6,
  31. }
  32. content := ">#### **机房设备预警** (" + time.Now().Format("2006-01-02 15:04:05") + "):\n"
  33. var keyWord string
  34. for rack, abnormalRate := range rackArr {
  35. result, err := robotService.RequestJfDevicesState(rack)
  36. if err != nil {
  37. global.GVA_LOG.Error("获取机房设备信息失败,设备可能断电,请注意排查!!!")
  38. keyWord = "获取机房设备信息失败,设备可能断电,请注意排查!!!,错误信息:" + err.Error()
  39. break
  40. }
  41. if string(result) != "null" {
  42. var data [][]int
  43. err := json.Unmarshal(result, &data)
  44. if err != nil {
  45. return
  46. }
  47. NumTotal := len(data)
  48. NumGood := 0
  49. for _, v := range data {
  50. if v[2] == 3 {
  51. NumGood += 1
  52. }
  53. }
  54. //global.GVA_LOG.Info(strconv.Itoa(NumTotal))
  55. //global.GVA_LOG.Info(strconv.Itoa(NumGood))numIntoGame * numStartGame / 1e6
  56. rate := float64(NumGood) / float64(NumTotal)
  57. if rate < abnormalRate {
  58. keyWord += "\n 机房第" + strconv.Itoa(rack) + "架设备正常率为:" + strconv.FormatFloat(rate, 'f', 2, 64) + ",设备正常率低,建议维护重启 \n"
  59. }
  60. //global.GVA_LOG.Info(keyWord)
  61. }
  62. }
  63. if keyWord != "" {
  64. content += keyWord
  65. url := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
  66. _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
  67. }
  68. return
  69. }
  70. // RequestJfDevicesState 获取机房设备信息
  71. func (robotService *RobotService) RequestJfDevicesState(rack int) (result []byte, err error) {
  72. jfUrl := "http://182.150.53.148:6007/v1/manage/chart"
  73. jfParams := map[string]string{
  74. "Rack": strconv.Itoa(rack),
  75. }
  76. result, err = utils.HttpGet(jfUrl, jfParams)
  77. return
  78. }