forked from baron/baron-sso
클라이언트 대시보드 통계 실지표 연동 및 백엔드 API 구현
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user