#!/usr/bin/env python # # etherscan_balance_ # # Munin plugin to monitor your ethereum (ETH) balance. # Account balance is queried via etherscan.io API (https://etherscan.io/apis). # # Author: Nils Knieling - https://github.com/Cyclenerd # Licence: GPLv2 # # USAGE # etherscan_balance_ # # EXAMPLE # ln -s /usr/share/munin/plugins/etherscan_balance_ /etc/munin/plugins/etherscan_balance_0x3257bde8cf067ae6f1ddc0e4b140fe02e3c5e44f # from __future__ import print_function import os import sys import urllib2 import socket import json command = '' if len(sys.argv) > 1: command = sys.argv[1] try: eth_address = sys.argv[0].split("_")[1:] except ValueError: print("The filename of this plugin (or its symlink) should follow this pattern: " "''", file=sys.stderr) sys.exit(9) if command == 'config': print("graph_title eth {}".format(eth_address)) print("graph_title Ethereum Address {}".format(eth_address)) print("graph_info Ethereum Account Balance for Address {}".format(eth_address)) print("graph_title Ethereum Balance") print("graph_title htc") print("{}label eth".format(eth_address)) sys.exit(0) ethercan_balance_api_url = 'https://api.etherscan.io/api?module=account&action=balance&tag=latest&address=' + eth_address etherscan_req = urllib2.Request(ethercan_balance_api_url) etherscan_req.add_header('User-Agent', 'Mozilla/5.0') try: etherscan_balance_raw = urllib2.urlopen(etherscan_req, timeout=1.5 ) except IOError as exc: print("Failed to request etherscan.io API: {}".format(exc), file=sys.stderr) try: etherscan_balance = json.load(etherscan_balance_raw) except ValueError: print("Failed to parse JSON responce.", file=sys.stderr); sys.exit(9) try: float(etherscan_balance['result']) except: print("Result Error!", file=sys.stderr); sys.exit(9) eth = float(etherscan_balance['result']) / 1000000000000000000 print("{}_{}.value %.2f".format(eth_address, eth));