#! /usr/bin/python3
							 | 
						|
								# coding=utf-8
							 | 
						|
								
							 | 
						|
								import requests
							 | 
						|
								import json
							 | 
						|
								import sys
							 | 
						|
								from pyzabbix import ZabbixMetric, ZabbixSender
							 | 
						|
								import os
							 | 
						|
								import re
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class AwZabbix:
							 | 
						|
								    def __init__(self, server, url, host):
							 | 
						|
								        self.url = url
							 | 
						|
								        self.server = server
							 | 
						|
								        self.host = host
							 | 
						|
								        self.data = ''
							 | 
						|
								        self.mult_dict = {'G': 1000000000, 'M': 1000000, 'T': 1000000000000, 'K': 1000, 'N': 0, }
							 | 
						|
								        self.packet = []
							 | 
						|
								        self.lld_data = []
							 | 
						|
								
							 | 
						|
								    def get_data(self):
							 | 
						|
								        if len(self.data) == 0:
							 | 
						|
								            self.data = requests.get(self.url).json()
							 | 
						|
								
							 | 
						|
								    def hashrate_str_to_int(self, hashrate_raw):
							 | 
						|
								        if "H" in hashrate_raw:
							 | 
						|
								            m = hashrate_raw[-4:-3]
							 | 
						|
								            if m[0] == ' ':
							 | 
						|
								                hashrate_mult = 1
							 | 
						|
								            else:
							 | 
						|
								                hashrate_mult = self.mult_dict[hashrate_raw[-4:-3]]
							 | 
						|
								            hashrate_raw = "".join(hashrate_raw.split())
							 | 
						|
								            a = float(hashrate_raw[:-5].replace(',', '.')) * hashrate_mult
							 | 
						|
								        else:
							 | 
						|
								            a = 0
							 | 
						|
								        return int(a)
							 | 
						|
								
							 | 
						|
								    def make_packet(self):
							 | 
						|
								        self.get_data()
							 | 
						|
								        if len(self.packet) != 0:
							 | 
						|
								            return self.packet
							 | 
						|
								        total_hashrate_raw = self.data['totalHashrate5s']
							 | 
						|
								        if total_hashrate_raw:
							 | 
						|
								            total_hashrate = self.hashrate_str_to_int(total_hashrate_raw)
							 | 
						|
								        self.packet.append(ZabbixMetric(self.host, 'total[hashrate]', total_hashrate))
							 | 
						|
								        for group in self.data['groupList']:
							 | 
						|
								            for miner in group['minerList']:
							 | 
						|
								                hashrate_raw = miner['speedInfo']['hashrate']
							 | 
						|
								                if hashrate_raw:
							 | 
						|
								                    hashrate = self.hashrate_str_to_int(hashrate_raw)
							 | 
						|
								                else:
							 | 
						|
								                    hashrate = 0
							 | 
						|
								                hashrate_avg_raw = miner['speedInfo']['avgHashrate']
							 | 
						|
								                if hashrate_avg_raw:
							 | 
						|
								                    hashrate_avg = self.hashrate_str_to_int(hashrate_avg_raw)
							 | 
						|
								                else:
							 | 
						|
								                    hashrate_avg = 0
							 | 
						|
								                minername = str(miner['name'])
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('hashrate', minername), hashrate))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('hashrate_avg', minername), hashrate_avg))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('hashrate_avg_min', minername), int(hashrate_avg * 0.8)))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('ip', minername), miner['hostname']))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('group', minername), miner['groupId']))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('name', minername), miner['name']))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('temp', minername),
							 | 
						|
								                                                miner['temperature'][:-3]))
							 | 
						|
								                self.packet.append(ZabbixMetric(self.host, "{}[{}]".format('status', minername),
							 | 
						|
								                                                miner['statusInfo']['statusDisplay']))
							 | 
						|
								        return self.packet
							 | 
						|
								
							 | 
						|
								    def send_packet(self):
							 | 
						|
								        if len(self.packet) == 0:
							 | 
						|
								            self.make_packet()
							 | 
						|
								        return ZabbixSender(self.server).send(self.packet)
							 | 
						|
								
							 | 
						|
								    def lld(self):
							 | 
						|
								        self.get_data()
							 | 
						|
								        if len(self.lld_data) != 0:
							 | 
						|
								            return self.lld_data
							 | 
						|
								        self.lld_data = {}
							 | 
						|
								        jdat = []
							 | 
						|
								        for group in self.data['groupList']:
							 | 
						|
								            for miner in group['minerList']:
							 | 
						|
								                jdat.append({"{#MINERID}": str(miner['id']),
							 | 
						|
								                             "{#IP}": str(miner['hostname']),
							 | 
						|
								                             "{#MINERNAME}": str(miner['name'])})
							 | 
						|
								        self.lld_data = {'data': jdat}
							 | 
						|
								        return self.lld_data
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								def read_conf():
							 | 
						|
								    path = os.path.dirname(os.path.realpath(__file__))
							 | 
						|
								    conf_file = os.path.join(path, 'config.json')
							 | 
						|
								    with open(conf_file) as f:
							 | 
						|
								        conf = json.load(f)
							 | 
						|
								    return conf
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								def main():
							 | 
						|
								    conf = read_conf()
							 | 
						|
								    zabbix_server = conf["zabbix_server"]
							 | 
						|
								    aw_url = conf["aw_url"]
							 | 
						|
								    hostname = conf["hostname"]
							 | 
						|
								
							 | 
						|
								    z = AwZabbix(zabbix_server, aw_url, hostname)
							 | 
						|
								
							 | 
						|
								    if len(sys.argv) == 1:
							 | 
						|
								        print(json.dumps(z.lld(), indent=4, sort_keys=True))
							 | 
						|
								    elif len(sys.argv) == 2 and sys.argv[1] == 'send':
							 | 
						|
								        z.send_packet()
							 | 
						|
								        print(1)
							 | 
						|
								    elif len(sys.argv) == 2 and sys.argv[1] == 'send_debug':
							 | 
						|
								        print(z.send_packet())
							 | 
						|
								        for i in z.packet:
							 | 
						|
								            print(i)
							 | 
						|
								    else:
							 | 
						|
								        print('Wrong args.')
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								if __name__ == '__main__':
							 | 
						|
								    main()
							 | 
						
Powered by TurnKey Linux.