chore: ignore local artifacts and remove dead api key trend impl
This commit is contained in:
19
.gitignore
vendored
19
.gitignore
vendored
@@ -85,6 +85,11 @@ temp/
|
||||
.cache/
|
||||
.dev/
|
||||
.serena/
|
||||
.omc/
|
||||
.workbuddy/
|
||||
backend/.omc/
|
||||
frontend/.omc/
|
||||
backend/cmd/server/.omc/
|
||||
|
||||
# ===================
|
||||
# 构建产物
|
||||
@@ -134,4 +139,18 @@ docs/*
|
||||
frontend/coverage/
|
||||
aicodex
|
||||
output/
|
||||
backend/dump.rdb
|
||||
test-reports/
|
||||
config_final*.txt
|
||||
config_test_output.txt
|
||||
config_test_result*.txt
|
||||
handler_final*.txt
|
||||
handler_test*.txt
|
||||
mid_test.txt
|
||||
middleware_test.txt
|
||||
new_domain_tests.txt
|
||||
setup_test.txt
|
||||
test_build_errors.txt
|
||||
test_config_results.txt
|
||||
backend/test_*.txt
|
||||
|
||||
|
||||
@@ -2134,64 +2134,6 @@ type UserUsageTrendPoint = usagestats.UserUsageTrendPoint
|
||||
type UserSpendingRankingItem = usagestats.UserSpendingRankingItem
|
||||
type UserSpendingRankingResponse = usagestats.UserSpendingRankingResponse
|
||||
|
||||
// APIKeyUsageTrendPoint represents API key usage trend data point
|
||||
type APIKeyUsageTrendPoint = usagestats.APIKeyUsageTrendPoint
|
||||
|
||||
// GetAPIKeyUsageTrend returns usage trend data grouped by API key and date
|
||||
func (r *usageLogRepository) GetAPIKeyUsageTrend(ctx context.Context, startTime, endTime time.Time, granularity string, limit int) (results []APIKeyUsageTrendPoint, err error) {
|
||||
dateFormat := safeDateFormat(granularity)
|
||||
|
||||
query := fmt.Sprintf(`
|
||||
WITH top_keys AS (
|
||||
SELECT api_key_id
|
||||
FROM usage_logs
|
||||
WHERE created_at >= $1 AND created_at < $2
|
||||
GROUP BY api_key_id
|
||||
ORDER BY SUM(input_tokens + output_tokens + cache_creation_tokens + cache_read_tokens) DESC
|
||||
LIMIT $3
|
||||
)
|
||||
SELECT
|
||||
TO_CHAR(u.created_at, '%s') as date,
|
||||
u.api_key_id,
|
||||
COALESCE(k.name, '') as key_name,
|
||||
COUNT(*) as requests,
|
||||
COALESCE(SUM(u.input_tokens + u.output_tokens + u.cache_creation_tokens + u.cache_read_tokens), 0) as tokens
|
||||
FROM usage_logs u
|
||||
LEFT JOIN api_keys k ON u.api_key_id = k.id
|
||||
WHERE u.api_key_id IN (SELECT api_key_id FROM top_keys)
|
||||
AND u.created_at >= $4 AND u.created_at < $5
|
||||
GROUP BY date, u.api_key_id, k.name
|
||||
ORDER BY date ASC, tokens DESC
|
||||
`, dateFormat)
|
||||
|
||||
rows, err := r.sql.QueryContext(ctx, query, startTime, endTime, limit, startTime, endTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
// 保持主错误优先;仅在无错误时回传 Close 失败。
|
||||
// 同时清空返回值,避免误用不完整结果。
|
||||
if closeErr := rows.Close(); closeErr != nil && err == nil {
|
||||
err = closeErr
|
||||
results = nil
|
||||
}
|
||||
}()
|
||||
|
||||
results = make([]APIKeyUsageTrendPoint, 0)
|
||||
for rows.Next() {
|
||||
var row APIKeyUsageTrendPoint
|
||||
if err = rows.Scan(&row.Date, &row.APIKeyID, &row.KeyName, &row.Requests, &row.Tokens); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, row)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
|
||||
// GetUserUsageTrend returns usage trend data grouped by user and date
|
||||
func (r *usageLogRepository) GetUserUsageTrend(ctx context.Context, startTime, endTime time.Time, granularity string, limit int) (results []UserUsageTrendPoint, err error) {
|
||||
dateFormat := safeDateFormat(granularity)
|
||||
|
||||
Reference in New Issue
Block a user