summaryrefslogtreecommitdiffstats
path: root/internal/client
diff options
context:
space:
mode:
authorsinner <[email protected]>2026-08-05 01:21:17 +0000
committersinner <[email protected]>2026-08-05 01:21:17 +0000
commit4c6c8e86565ac49d1bd1c64e17c1404f4517d200 (patch)
tree9f079e106a3f01f5d227c407e3d984a38bb2a8e9 /internal/client
parent2875e578f5e22ae0971d057819f1ab4362b4d115 (diff)
downloaddborg-4c6c8e86565ac49d1bd1c64e17c1404f4517d200.tar.gz
dborg-4c6c8e86565ac49d1bd1c64e17c1404f4517d200.zip
feat: add admin usage logging and reporting commandsHEADmaster
Diffstat (limited to 'internal/client')
-rw-r--r--internal/client/admin.go71
1 files changed, 71 insertions, 0 deletions
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
+}