12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from flask import Flask, request
- from prometheus_client import Counter, Gauge, Info, start_http_server
- import json
- app = Flask(__name__)
- class TelemetryInfo:
- def __init__(self, data):
- self.node_id = data['chain']['node_id']
- self.num_peers = data['chain']['num_peers']
- self.status = data['chain']['status']
- self.cpu_usage = data['system']['cpu_usage']
- self.memory_usage = data['system']['memory_usage']
- self.bandwidth_upload = data['system']['bandwidth_upload']
- self.bandwidth_download = data['system']['bandwidth_download']
- class Node:
- def __init__(self, node_id):
- def _(s): return f"{s}_{node_id}"
- self.updates = Counter(_('updates'), 'Total updates received')
- self.num_peers = Gauge(_('num_peers'), 'Number of active peers')
- self.cpu_usage = Gauge(_('cpu_usage'), "CPU usage")
- self.memory_usage = Gauge(_('memory_usage'), "Memory usage")
- self.bandwidth_upload = Gauge(
- _('bandwidth_upload'), "Bandwidth upload in bytes")
- self.bandwidth_download = Gauge(
- _('bandwidth_download'), "Bandwidth download in bytes"
- )
- self.status = Info(_('status'), "Node status")
- def submit(self, info: TelemetryInfo):
- self.updates.inc()
- self.num_peers.set(info.num_peers)
- self.cpu_usage.set(info.cpu_usage)
- self.memory_usage.set(info.memory_usage)
- self.bandwidth_upload.set(info.bandwidth_upload)
- self.bandwidth_download.set(info.bandwidth_download)
- self.status.info({'status': info.status})
- class Prometheus:
- def __init__(self):
- self.dic = {}
- def get(self, node_id):
- if not node_id in self.dic:
- self.dic[node_id] = Node(node_id)
- return self.dic[node_id]
- def submit(self, data):
- self.get(data.node_id).submit(data)
- prom = Prometheus()
- @app.route('/', methods=['POST'])
- def hello_world():
- data = json.loads(request.data.decode())
- info = TelemetryInfo(data)
- print("Received data from:", info.node_id)
- prom.submit(info)
- return ''
- if __name__ == 'main':
- print("Starting prometheus server")
- start_http_server(3389)
|