mirror of
https://github.com/fastapi-practices/fastapi-best-architecture.git
synced 2026-09-22 05:22:56 +00:00
* Add database and queue observability * Update prometheus * Delete the wrong changes
30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
from typing import Any
|
|
|
|
from prometheus_client import Gauge
|
|
from sqlalchemy.pool import QueuePool
|
|
|
|
from backend.common.observability.prometheus.config import PROMETHEUS_APP_NAME
|
|
|
|
_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=PROMETHEUS_APP_NAME, state='size').set(total_size)
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='checked_out').set(
|
|
checked_out_size
|
|
)
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='idle').set(idle_size)
|
|
_PROMETHEUS_SQLALCHEMY_POOL_CONNECTIONS_GAUGE.labels(app_name=PROMETHEUS_APP_NAME, state='overflow').set(
|
|
overflow_size
|
|
)
|