Files
aitbc/apps/blockchain-node/src/aitbc_chain/metrics.py
oib 15427c96c0 chore: update file permissions to executable across repository
- Change file mode from 644 to 755 for all project files
- Add chain_id parameter to get_balance RPC endpoint with default "ait-devnet"
- Rename Miner.extra_meta_data to extra_metadata for consistency
2026-03-06 22:17:54 +01:00

57 lines
1.8 KiB
Python
Executable File

from __future__ import annotations
from dataclasses import dataclass
from threading import Lock
from typing import Dict
@dataclass
class MetricValue:
name: str
value: float
class MetricsRegistry:
def __init__(self) -> None:
self._counters: Dict[str, float] = {}
self._gauges: Dict[str, float] = {}
self._summaries: Dict[str, tuple[float, float]] = {}
self._lock = Lock()
def increment(self, name: str, amount: float = 1.0) -> None:
with self._lock:
self._counters[name] = self._counters.get(name, 0.0) + amount
def set_gauge(self, name: str, value: float) -> None:
with self._lock:
self._gauges[name] = value
def observe(self, name: str, value: float) -> None:
with self._lock:
count, total = self._summaries.get(name, (0.0, 0.0))
self._summaries[name] = (count + 1.0, total + value)
def reset(self) -> None:
with self._lock:
self._counters.clear()
self._gauges.clear()
self._summaries.clear()
def render_prometheus(self) -> str:
with self._lock:
lines: list[str] = []
for name, value in sorted(self._counters.items()):
lines.append(f"# TYPE {name} counter")
lines.append(f"{name} {value}")
for name, value in sorted(self._gauges.items()):
lines.append(f"# TYPE {name} gauge")
lines.append(f"{name} {value}")
for name, (count, total) in sorted(self._summaries.items()):
lines.append(f"# TYPE {name} summary")
lines.append(f"{name}_count {count}")
lines.append(f"{name}_sum {total}")
return "\n".join(lines) + "\n"
metrics_registry = MetricsRegistry()