You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.6 KiB

7 years ago
  1. #! /usr/bin/python3
  2. # coding=utf-8
  3. import requests
  4. import json
  5. import sys
  6. from pyzabbix import ZabbixMetric, ZabbixSender
  7. hostname = 'hostname1'
  8. zabbix_server = '10.3.2.5'
  9. aw_url = 'http://10.5.0.1:17790/api/miners'
  10. class AwZabbix:
  11. def __init__(self, server, url, host):
  12. self.url = url
  13. self.server = server
  14. self.host = host
  15. self.data = ''
  16. self.mult_dict = {'G': 1000000000, 'M': 1000000, 'T': 1000000000000, 'K': 1000, 'N': 0, }
  17. self.packet = []
  18. self.lld_data = []
  19. def get_data(self):
  20. if len(self.data) == 0:
  21. self.data = requests.get(self.url).json()
  22. def make_packet(self):
  23. self.get_data()
  24. if len(self.packet) != 0:
  25. return self.packet
  26. total_hashrate_raw = self.data['totalHashrate5s']
  27. if total_hashrate_raw:
  28. hashrate_mult = self.mult_dict[total_hashrate_raw[-4:-3]]
  29. total_hashrate = float(total_hashrate_raw[:-5].replace(',', '.')) * hashrate_mult
  30. total_hashrate = int(total_hashrate)
  31. self.packet.append(ZabbixMetric(self.host, 'total[hashrate]', total_hashrate))
  32. for group in self.data['groupList']:
  33. for miner in group['minerList']:
  34. hashrate_raw = miner['speedInfo']['hashrate']
  35. if hashrate_raw:
  36. hashrate_mult = self.mult_dict[hashrate_raw[-4:-3]]
  37. hashrate = float(hashrate_raw[:-5].replace(',', '.')) * hashrate_mult
  38. hashrate = int(hashrate)
  39. else:
  40. hashrate = 0
  41. minername = str(miner['name'])
  42. self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('hashrate', minername), hashrate))
  43. self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('ip', minername), miner['hostname']))
  44. self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('group', minername), miner['groupId']))
  45. self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('name', minername), miner['name']))
  46. self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('temp', minername),
  47. miner['temperature'][:-3]))
  48. self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('status', minername),
  49. miner['statusInfo']['statusDisplay']))
  50. return self.packet
  51. def send_packet(self):
  52. if len(self.packet) == 0:
  53. self.make_packet()
  54. return ZabbixSender(self.server).send(self.packet)
  55. def lld(self):
  56. self.get_data()
  57. if len(self.lld_data) != 0:
  58. return self.lld_data
  59. self.lld_data = {}
  60. jdat = []
  61. for group in self.data['groupList']:
  62. for miner in group['minerList']:
  63. jdat.append({"{#MINERID}": str(miner['id']),
  64. "{#IP}": str(miner['hostname']),
  65. "{#MINERNAME}": str(miner['name'])})
  66. self.lld_data = {'data': jdat}
  67. return self.lld_data
  68. def read_conf():
  69. with open('config.json') as f:
  70. conf = json.load(f)
  71. return conf
  72. def main():
  73. conf = read_conf()
  74. z = AwZabbix(zabbix_server, aw_url, hostname)
  75. if len(sys.argv) == 1:
  76. print(json.dumps(z.lld(), indent=4, sort_keys=True))
  77. elif len(sys.argv) == 2 and sys.argv[1] == 'send':
  78. z.send_packet()
  79. print(1)
  80. elif len(sys.argv) == 2 and sys.argv[1] == 'send_debug':
  81. print(z.send_packet())
  82. for i in z.packet:
  83. print(i)
  84. else:
  85. print('Wrong args.')
  86. if __name__ == '__main__':
  87. main()

Powered by TurnKey Linux.