feat(report): 처리량(TPS) 지표 추가

- /admin/report에 throughput(초당 버킷): 접수/완결 최대 TPS, 완결 평균 TPS(활성구간), 활성 초수
- 보고서 화면에 🚀 처리량(TPS) 섹션(지연시간 아래) + 드라이버 부하 기준 주의 문구

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
rtgs
2026-07-16 14:29:47 +09:00
parent 61ced29510
commit 5b706bfc33
2 changed files with 26 additions and 0 deletions

View File

@@ -148,6 +148,18 @@ class AdminController(
AND t.created_at >= r.received_at -- 인과 정합(접수≤순번) 행만: BMI 재사용 등 시계 역전 건 제외
""".trimIndent())
// 처리량(TPS) — 초 단위 버킷의 최대/평균. 접수(수용) vs 완결(처리) 관측치.
// active_secs = 완결이 있었던 초 개수 → settled_avg는 활성 구간 평균(유휴 제외).
val tps = jdbc.queryForMap(
"""
WITH recv AS (SELECT received_at/1000 AS s, count(*) c FROM raw_message WHERE received_at > 0 GROUP BY received_at/1000),
done AS (SELECT updated_at/1000 AS s, count(*) c FROM transfer WHERE status='ACCC' GROUP BY updated_at/1000)
SELECT COALESCE((SELECT max(c) FROM recv),0) AS received_peak,
COALESCE((SELECT max(c) FROM done),0) AS settled_peak,
COALESCE((SELECT round(avg(c)) FROM done),0) AS settled_avg,
COALESCE((SELECT count(*) FROM done),0) AS active_secs
""".trimIndent())
// 기관별 송·수신 집계(ACCC 기준) + 현재 잔액
val byInstitution = jdbc.queryForList(
"""
@@ -172,6 +184,7 @@ class AdminController(
),
"amount" to amt,
"latency" to lat,
"throughput" to tps,
"byInstitution" to byInstitution,
)
}