強化 CD Gunicorn 掛載與 metrics 降噪
All checks were successful
CD Pipeline / deploy (push) Successful in 9m26s
All checks were successful
CD Pipeline / deploy (push) Successful in 9m26s
This commit is contained in:
@@ -70,23 +70,16 @@ def prometheus_metrics():
|
||||
db_status.set(0)
|
||||
app_health.set(0)
|
||||
|
||||
session = None
|
||||
try:
|
||||
db = DatabaseManager()
|
||||
session = db.get_session()
|
||||
|
||||
product_count = Gauge('momo_products_total', '商品總數', registry=registry)
|
||||
product_count.set(session.query(Product).count())
|
||||
|
||||
price_record_count = Gauge('momo_price_records_total', '價格記錄總數', registry=registry)
|
||||
price_record_count.set(session.query(PriceRecord).count())
|
||||
|
||||
from database.realtime_sales_models import RealtimeSalesMonthly
|
||||
sales_count = Gauge('momo_sales_records_total', '業績資料總數', registry=registry)
|
||||
sales_count.set(session.query(RealtimeSalesMonthly).count())
|
||||
|
||||
session.close()
|
||||
_set_database_record_counts(registry, Gauge, session)
|
||||
except Exception as e:
|
||||
sys_log.warning(f"[Metrics] 無法取得資料庫統計: {e}")
|
||||
finally:
|
||||
if session is not None:
|
||||
session.close()
|
||||
|
||||
try:
|
||||
_register_ai_automation_metrics(registry, Gauge, ai_metrics_snapshot())
|
||||
@@ -113,6 +106,20 @@ def _labels_to_dict(labels):
|
||||
return dict(labels)
|
||||
|
||||
|
||||
def _set_database_record_counts(registry, gauge_cls, session):
|
||||
"""Register DB counts without selecting drift-prone sales columns."""
|
||||
product_count = gauge_cls('momo_products_total', '商品總數', registry=registry)
|
||||
product_count.set(session.query(Product).count())
|
||||
|
||||
price_record_count = gauge_cls('momo_price_records_total', '價格記錄總數', registry=registry)
|
||||
price_record_count.set(session.query(PriceRecord).count())
|
||||
|
||||
# V-Fix: realtime_sales_monthly 線上欄位曾與 ORM 不同步,metrics 只需要總筆數。
|
||||
sales_count = gauge_cls('momo_sales_records_total', '業績資料總數', registry=registry)
|
||||
sales_total = session.execute(text("SELECT COUNT(*) FROM realtime_sales_monthly")).scalar() or 0
|
||||
sales_count.set(sales_total)
|
||||
|
||||
|
||||
def _register_ai_automation_metrics(registry, gauge_cls, metrics_snapshot):
|
||||
"""Export dependency-free AI metrics into a per-request Prometheus registry."""
|
||||
gauges = {}
|
||||
|
||||
Reference in New Issue
Block a user