62 lines
2.4 KiB
YAML
62 lines
2.4 KiB
YAML
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: xmrig-exporter-script
|
|
namespace: miner
|
|
data:
|
|
exporter.py: |
|
|
import json
|
|
import urllib.request
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
|
|
TARGETS = {
|
|
"xmrig-monero": "http://xmrig-monero-api.miner.svc.cluster.local:16000/2/summary",
|
|
"xmrig-monero-solo": "http://xmrig-monero-solo-api.miner.svc.cluster.local:16000/2/summary",
|
|
}
|
|
|
|
def fetch_metrics():
|
|
lines = [
|
|
"# HELP xmrig_hashrate_10s Current hashrate over 10s window",
|
|
"# TYPE xmrig_hashrate_10s gauge",
|
|
"# HELP xmrig_shares_good Accepted shares",
|
|
"# TYPE xmrig_shares_good counter",
|
|
"# HELP xmrig_shares_total Total shares submitted",
|
|
"# TYPE xmrig_shares_total counter",
|
|
"# HELP xmrig_up Whether the xmrig HTTP API was reachable",
|
|
"# TYPE xmrig_up gauge",
|
|
]
|
|
for name, url in TARGETS.items():
|
|
try:
|
|
with urllib.request.urlopen(url, timeout=5) as resp:
|
|
data = json.loads(resp.read())
|
|
hashrate = data.get("hashrate", {}).get("total", [0]) or [0]
|
|
hashrate_10s = hashrate[0] or 0
|
|
good = data.get("results", {}).get("shares_good", 0)
|
|
total = data.get("results", {}).get("shares_total", 0)
|
|
lines.append(f'xmrig_hashrate_10s{{miner="{name}"}} {hashrate_10s}')
|
|
lines.append(f'xmrig_shares_good{{miner="{name}"}} {good}')
|
|
lines.append(f'xmrig_shares_total{{miner="{name}"}} {total}')
|
|
lines.append(f'xmrig_up{{miner="{name}"}} 1')
|
|
except Exception:
|
|
lines.append(f'xmrig_up{{miner="{name}"}} 0')
|
|
return "\n".join(lines) + "\n"
|
|
|
|
class Handler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
if self.path == "/metrics":
|
|
body = fetch_metrics().encode()
|
|
self.send_response(200)
|
|
self.send_header("Content-Type", "text/plain; version=0.0.4")
|
|
self.send_header("Content-Length", str(len(body)))
|
|
self.end_headers()
|
|
self.wfile.write(body)
|
|
else:
|
|
self.send_response(404)
|
|
self.end_headers()
|
|
|
|
def log_message(self, format, *args):
|
|
pass
|
|
|
|
if __name__ == "__main__":
|
|
HTTPServer(("0.0.0.0", 9200), Handler).serve_forever()
|