From 4c6c8e86565ac49d1bd1c64e17c1404f4517d200 Mon Sep 17 00:00:00 2001 From: sinner Date: Wed, 5 Aug 2026 01:21:17 +0000 Subject: feat: add admin usage logging and reporting commands --- internal/client/admin.go | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'internal/client') diff --git a/internal/client/admin.go b/internal/client/admin.go index c776b7c..707af7f 100644 --- a/internal/client/admin.go +++ b/internal/client/admin.go @@ -159,3 +159,74 @@ func (c *Client) GetAccountStats() (*models.AccountStatsResponse, error) { return &response, nil } + +// GetCreditUsageLogs fetches raw credit_usage_log rows. +// accountID=0 means all accounts. +func (c *Client) GetCreditUsageLogs(accountID int, limit int) (*models.CreditUsageLogsResponse, error) { + params := url.Values{} + if accountID > 0 { + params.Set("account_id", fmt.Sprintf("%d", accountID)) + } + if limit > 0 { + params.Set("limit", fmt.Sprintf("%d", limit)) + } + + data, err := c.Get("/admin/usage/logs", params) + if err != nil { + return nil, err + } + + var response models.CreditUsageLogsResponse + if err := json.Unmarshal(data, &response); err != nil { + return nil, fmt.Errorf("failed to parse usage logs response: %w", err) + } + return &response, nil +} + +// GetCreditUsageByEndpoint fetches per-endpoint aggregate stats. +func (c *Client) GetCreditUsageByEndpoint(from, to string) (*models.CreditUsageByEndpointResponse, error) { + params := url.Values{} + if from != "" { + params.Set("from", from) + } + if to != "" { + params.Set("to", to) + } + + data, err := c.Get("/admin/usage/by-endpoint", params) + if err != nil { + return nil, err + } + + var response models.CreditUsageByEndpointResponse + if err := json.Unmarshal(data, &response); err != nil { + return nil, fmt.Errorf("failed to parse usage by-endpoint response: %w", err) + } + return &response, nil +} + +// GetCreditUsageByAccount fetches per-account per-endpoint aggregate stats. +// accountID=0 means all accounts. +func (c *Client) GetCreditUsageByAccount(accountID int, from, to string) (*models.CreditUsageByAccountResponse, error) { + params := url.Values{} + if accountID > 0 { + params.Set("account_id", fmt.Sprintf("%d", accountID)) + } + if from != "" { + params.Set("from", from) + } + if to != "" { + params.Set("to", to) + } + + data, err := c.Get("/admin/usage/by-account", params) + if err != nil { + return nil, err + } + + var response models.CreditUsageByAccountResponse + if err := json.Unmarshal(data, &response); err != nil { + return nil, fmt.Errorf("failed to parse usage by-account response: %w", err) + } + return &response, nil +} -- cgit v1.2.3