36c05fc4b9
-only run wallet server metrics for the wallet server
125 lines
5.2 KiB
Python
125 lines
5.2 KiB
Python
import os
|
|
from prometheus_client import Counter, Info, Histogram, Gauge
|
|
from lbry import __version__ as version
|
|
from lbry.build_info import BUILD, COMMIT_HASH, DOCKER_TAG
|
|
from lbry.wallet.server import util
|
|
import lbry.wallet.server.version as wallet_server_version
|
|
|
|
|
|
class PrometheusMetrics:
|
|
VERSION_INFO: Info
|
|
SESSIONS_COUNT: Gauge
|
|
REQUESTS_COUNT: Counter
|
|
RESPONSE_TIMES: Histogram
|
|
NOTIFICATION_COUNT: Counter
|
|
REQUEST_ERRORS_COUNT: Counter
|
|
SQLITE_INTERRUPT_COUNT: Counter
|
|
SQLITE_OPERATIONAL_ERROR_COUNT: Counter
|
|
SQLITE_INTERNAL_ERROR_COUNT: Counter
|
|
SQLITE_EXECUTOR_TIMES: Histogram
|
|
SQLITE_PENDING_COUNT: Gauge
|
|
LBRYCRD_REQUEST_TIMES: Histogram
|
|
LBRYCRD_PENDING_COUNT: Gauge
|
|
CLIENT_VERSIONS: Counter
|
|
BLOCK_COUNT: Gauge
|
|
BLOCK_UPDATE_TIMES: Histogram
|
|
REORG_COUNT: Gauge
|
|
RESET_CONNECTIONS: Counter
|
|
|
|
__slots__ = [
|
|
'VERSION_INFO',
|
|
'SESSIONS_COUNT',
|
|
'REQUESTS_COUNT',
|
|
'RESPONSE_TIMES',
|
|
'NOTIFICATION_COUNT',
|
|
'REQUEST_ERRORS_COUNT',
|
|
'SQLITE_INTERRUPT_COUNT',
|
|
'SQLITE_OPERATIONAL_ERROR_COUNT',
|
|
'SQLITE_INTERNAL_ERROR_COUNT',
|
|
'SQLITE_EXECUTOR_TIMES',
|
|
'SQLITE_PENDING_COUNT',
|
|
'LBRYCRD_REQUEST_TIMES',
|
|
'LBRYCRD_PENDING_COUNT',
|
|
'CLIENT_VERSIONS',
|
|
'BLOCK_COUNT',
|
|
'BLOCK_UPDATE_TIMES',
|
|
'REORG_COUNT',
|
|
'RESET_CONNECTIONS',
|
|
'_installed',
|
|
'namespace',
|
|
'cpu_count'
|
|
]
|
|
|
|
def __init__(self):
|
|
self._installed = False
|
|
self.namespace = "wallet_server"
|
|
self.cpu_count = f"{os.cpu_count()}"
|
|
|
|
def uninstall(self):
|
|
self._installed = False
|
|
for item in self.__slots__:
|
|
if not item.startswith('_') and item not in ('namespace', 'cpu_count'):
|
|
current = getattr(self, item, None)
|
|
if current:
|
|
setattr(self, item, None)
|
|
del current
|
|
|
|
def install(self):
|
|
if self._installed:
|
|
return
|
|
self._installed = True
|
|
self.VERSION_INFO = Info('build', 'Wallet server build info (e.g. version, commit hash)', namespace=self.namespace)
|
|
self.VERSION_INFO.info({
|
|
'build': BUILD,
|
|
"commit": COMMIT_HASH,
|
|
"docker_tag": DOCKER_TAG,
|
|
'version': version,
|
|
"min_version": util.version_string(wallet_server_version.PROTOCOL_MIN),
|
|
"cpu_count": self.cpu_count
|
|
})
|
|
self.SESSIONS_COUNT = Gauge("session_count", "Number of connected client sessions", namespace=self.namespace,
|
|
labelnames=("version",))
|
|
self.REQUESTS_COUNT = Counter("requests_count", "Number of requests received", namespace=self.namespace,
|
|
labelnames=("method", "version"))
|
|
self.RESPONSE_TIMES = Histogram("response_time", "Response times", namespace=self.namespace,
|
|
labelnames=("method", "version"))
|
|
self.NOTIFICATION_COUNT = Counter("notification", "Number of notifications sent (for subscriptions)",
|
|
namespace=self.namespace, labelnames=("method", "version"))
|
|
self.REQUEST_ERRORS_COUNT = Counter("request_error", "Number of requests that returned errors", namespace=self.namespace,
|
|
labelnames=("method", "version"))
|
|
self.SQLITE_INTERRUPT_COUNT = Counter("interrupt", "Number of interrupted queries", namespace=self.namespace)
|
|
self.SQLITE_OPERATIONAL_ERROR_COUNT = Counter(
|
|
"operational_error", "Number of queries that raised operational errors", namespace=self.namespace
|
|
)
|
|
self.SQLITE_INTERNAL_ERROR_COUNT = Counter(
|
|
"internal_error", "Number of queries raising unexpected errors", namespace=self.namespace
|
|
)
|
|
self.SQLITE_EXECUTOR_TIMES = Histogram("executor_time", "SQLite executor times", namespace=self.namespace)
|
|
self.SQLITE_PENDING_COUNT = Gauge(
|
|
"pending_queries_count", "Number of pending and running sqlite queries", namespace=self.namespace
|
|
)
|
|
self.LBRYCRD_REQUEST_TIMES = Histogram(
|
|
"lbrycrd_request", "lbrycrd requests count", namespace=self.namespace, labelnames=("method",)
|
|
)
|
|
self.LBRYCRD_PENDING_COUNT = Gauge(
|
|
"lbrycrd_pending_count", "Number of lbrycrd rpcs that are in flight", namespace=self.namespace,
|
|
labelnames=("method",)
|
|
)
|
|
self.CLIENT_VERSIONS = Counter(
|
|
"clients", "Number of connections received per client version",
|
|
namespace=self.namespace, labelnames=("version",)
|
|
)
|
|
self.BLOCK_COUNT = Gauge(
|
|
"block_count", "Number of processed blocks", namespace=self.namespace
|
|
)
|
|
self.BLOCK_UPDATE_TIMES = Histogram("block_time", "Block update times", namespace=self.namespace)
|
|
self.REORG_COUNT = Gauge(
|
|
"reorg_count", "Number of reorgs", namespace=self.namespace
|
|
)
|
|
self.RESET_CONNECTIONS = Counter(
|
|
"reset_clients", "Number of reset connections by client version",
|
|
namespace=self.namespace, labelnames=("version",)
|
|
)
|
|
|
|
|
|
METRICS = PrometheusMetrics()
|