1
0
forked from baron/baron-sso

클라이언트 대시보드 통계 실지표 연동 및 백엔드 API 구현

This commit is contained in:
2026-03-03 14:06:27 +09:00
parent 8db37c377a
commit 20c97843c3
6 changed files with 530 additions and 101 deletions

View File

@@ -195,3 +195,44 @@ func (r *ClickHouseRepository) Ping(ctx context.Context) error {
}
return r.conn.Ping(ctx)
}
func (r *ClickHouseRepository) CountFailuresSince(ctx context.Context, since time.Time, tenantID string) (int64, error) {
query := `
SELECT count()
FROM audit_logs
WHERE status = 'failure' AND timestamp >= ?
`
args := []any{since}
if tenantID != "" {
query += " AND JSONExtractString(details, 'tenant_id') = ?"
args = append(args, tenantID)
}
var count int64
err := r.conn.QueryRow(ctx, query, args...).Scan(&count)
if err != nil {
return 0, fmt.Errorf("failed to count failures: %w", err)
}
return count, nil
}
func (r *ClickHouseRepository) CountActiveSessionsSince(ctx context.Context, since time.Time, tenantID string) (int64, error) {
// We use uniqExact(session_id) to count unique sessions that had success events recently.
query := `
SELECT uniqExact(session_id)
FROM audit_logs
WHERE status = 'success' AND timestamp >= ? AND session_id != ''
`
args := []any{since}
if tenantID != "" {
query += " AND JSONExtractString(details, 'tenant_id') = ?"
args = append(args, tenantID)
}
var count int64
err := r.conn.QueryRow(ctx, query, args...).Scan(&count)
if err != nil {
return 0, fmt.Errorf("failed to count active sessions: %w", err)
}
return count, nil
}