mirror of
https://github.com/fastapi-practices/fastapi-best-architecture.git
synced 2026-10-04 17:14:26 +00:00
34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
from typing import Any
|
|
|
|
from prometheus_client import Gauge
|
|
from sqlalchemy.pool import QueuePool
|
|
|
|
from backend.core.conf import settings
|
|
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE = Gauge(
|
|
name='fba_sqlalchemy_pool_connections',
|
|
documentation='SQLAlchemy 连接池状态',
|
|
labelnames=['app_name', 'state'],
|
|
)
|
|
|
|
|
|
def observe_sqlalchemy_pool_connections(*_event_args: Any, pool: QueuePool) -> None:
|
|
"""监听 SQLAlchemy 连接池状态"""
|
|
total_size = pool.size()
|
|
checked_out_size = pool.checkedout()
|
|
overflow_size = pool.overflow()
|
|
idle_size = max(total_size + overflow_size - checked_out_size, 0)
|
|
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
|
|
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='size'
|
|
).set(total_size)
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
|
|
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='checked_out'
|
|
).set(checked_out_size)
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
|
|
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='idle'
|
|
).set(idle_size)
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(
|
|
app_name=settings.GRAFANA_PROMETHEUS_APP_NAME, state='overflow'
|
|
).set(overflow_size)
|