326 lines
13 KiB
Go
326 lines
13 KiB
Go
package v1
|
|
|
|
import (
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/os/gtime"
|
|
)
|
|
|
|
// === 仪表盘 ===
|
|
|
|
type AdminDashboardReq struct {
|
|
g.Meta `path:"/dashboard" method:"get" mime:"json" tags:"管理后台-仪表盘" summary:"仪表盘统计"`
|
|
}
|
|
|
|
type AdminDashboardRes struct {
|
|
Tenants int `json:"tenants"`
|
|
Members int `json:"members"`
|
|
ActiveChannels int `json:"active_channels"`
|
|
Today *DayStats `json:"today"`
|
|
Yesterday *DayStats `json:"yesterday"`
|
|
Month *MonthStats `json:"month"`
|
|
}
|
|
|
|
type DayStats struct {
|
|
Requests int `json:"requests"`
|
|
ActiveTenants int `json:"active_tenants"`
|
|
InputTokens int `json:"input_tokens"`
|
|
OutputTokens int `json:"output_tokens"`
|
|
TotalCost float64 `json:"total_cost"`
|
|
SuccessRate float64 `json:"success_rate"`
|
|
}
|
|
|
|
type MonthStats struct {
|
|
Requests int `json:"requests"`
|
|
InputTokens int `json:"input_tokens"`
|
|
OutputTokens int `json:"output_tokens"`
|
|
TotalCost float64 `json:"total_cost"`
|
|
Revenue float64 `json:"revenue"`
|
|
}
|
|
|
|
type AdminDashboardTrendsReq struct {
|
|
g.Meta `path:"/dashboard/trends" method:"get" mime:"json" tags:"管理后台-仪表盘" summary:"趋势数据"`
|
|
Days int `json:"days" d:"30" v:"between:1,90" dc:"天数"`
|
|
}
|
|
|
|
type AdminDashboardTrendsRes struct {
|
|
List []map[string]any `json:"list"`
|
|
}
|
|
|
|
type AdminDashboardTopTenantsReq struct {
|
|
g.Meta `path:"/dashboard/top-tenants" method:"get" mime:"json" tags:"管理后台-仪表盘" summary:"TOP租户"`
|
|
Days int `json:"days" d:"30" v:"between:1,90" dc:"天数"`
|
|
}
|
|
|
|
type AdminDashboardTopTenantsRes struct {
|
|
List []map[string]any `json:"list"`
|
|
}
|
|
|
|
type AdminDashboardModelDistributionReq struct {
|
|
g.Meta `path:"/dashboard/model-distribution" method:"get" mime:"json" tags:"管理后台-仪表盘" summary:"模型分布"`
|
|
Days int `json:"days" d:"30" v:"between:1,90" dc:"天数"`
|
|
}
|
|
|
|
type AdminDashboardModelDistributionRes struct {
|
|
List []map[string]any `json:"list"`
|
|
}
|
|
|
|
type AdminDashboardChannelHealthReq struct {
|
|
g.Meta `path:"/dashboard/channel-health" method:"get" mime:"json" tags:"管理后台-仪表盘" summary:"渠道健康概览"`
|
|
}
|
|
|
|
type ChannelHealthItem struct {
|
|
ChannelId int64 `json:"channel_id"`
|
|
ChannelName string `json:"channel_name"`
|
|
Status string `json:"status"`
|
|
HealthScore float64 `json:"health_score"`
|
|
SuccessRate float64 `json:"success_rate"`
|
|
LatencyMs int `json:"latency_ms"`
|
|
}
|
|
|
|
type AdminDashboardChannelHealthRes struct {
|
|
List []ChannelHealthItem `json:"list"`
|
|
}
|
|
|
|
type AdminDashboardRecentAlertsReq struct {
|
|
g.Meta `path:"/dashboard/recent-alerts" method:"get" mime:"json" tags:"管理后台-仪表盘" summary:"最近告警"`
|
|
}
|
|
|
|
type RecentAlertItem struct {
|
|
Id int64 `json:"id"`
|
|
RuleName string `json:"rule_name"`
|
|
Level string `json:"level"`
|
|
Status string `json:"status"`
|
|
TriggerMessage string `json:"trigger_message"`
|
|
CreatedAt string `json:"created_at"`
|
|
}
|
|
|
|
type AdminDashboardRecentAlertsRes struct {
|
|
List []RecentAlertItem `json:"list"`
|
|
}
|
|
|
|
// === 用量日志 ===
|
|
|
|
type AdminUsageLogListReq struct {
|
|
g.Meta `path:"/usage-logs" method:"get" mime:"json" tags:"管理后台-用量" summary:"用量日志列表"`
|
|
Page int `json:"page" d:"1" dc:"页码"`
|
|
PageSize int `json:"page_size" d:"20" v:"between:1,100" dc:"每页数量"`
|
|
TenantID int64 `json:"tenant_id" dc:"租户ID"`
|
|
Username string `json:"username" dc:"用户名(模糊匹配)"`
|
|
Model string `json:"model" dc:"模型名称"`
|
|
Status string `json:"status" dc:"状态"`
|
|
RequestType int `json:"request_type" dc:"请求类型: 1=同步, 2=流式, 3=异步, 4=WebSocket"`
|
|
StartDate string `json:"start_date" dc:"开始日期"`
|
|
EndDate string `json:"end_date" dc:"结束日期"`
|
|
}
|
|
|
|
type AdminUsageLogItem struct {
|
|
Id int64 `json:"id"`
|
|
TenantId int64 `json:"tenant_id"`
|
|
TenantName string `json:"tenant_name"`
|
|
UserId int64 `json:"user_id"`
|
|
Username string `json:"username"`
|
|
ProjectId int64 `json:"project_id"`
|
|
ProjectName string `json:"project_name"`
|
|
ApiKeyId int64 `json:"api_key_id"`
|
|
ApiKeyName string `json:"api_key_name"`
|
|
ChannelId int64 `json:"channel_id"`
|
|
ChannelName string `json:"channel_name"`
|
|
ChannelType int `json:"channel_type"`
|
|
ModelName string `json:"model_name"`
|
|
RequestedModel string `json:"requested_model"`
|
|
UpstreamModel string `json:"upstream_model"`
|
|
RelayMode string `json:"relay_mode"`
|
|
RequestType int `json:"request_type"`
|
|
InputTokens int `json:"input_tokens"`
|
|
OutputTokens int `json:"output_tokens"`
|
|
CacheCreationTokens int `json:"cache_creation_tokens"`
|
|
CacheReadTokens int `json:"cache_read_tokens"`
|
|
CacheCreation5mTokens int `json:"cache_creation_5m_tokens"`
|
|
CacheCreation1hTokens int `json:"cache_creation_1h_tokens"`
|
|
ReasoningTokens int `json:"reasoning_tokens"`
|
|
AudioInputTokens int `json:"audio_input_tokens"`
|
|
AudioOutputTokens int `json:"audio_output_tokens"`
|
|
ImageOutputTokens int `json:"image_output_tokens"`
|
|
InputCost float64 `json:"input_cost"`
|
|
OutputCost float64 `json:"output_cost"`
|
|
CacheCreationCost float64 `json:"cache_creation_cost"`
|
|
CacheReadCost float64 `json:"cache_read_cost"`
|
|
TotalCost float64 `json:"total_cost"`
|
|
ActualCost float64 `json:"actual_cost"`
|
|
Currency string `json:"currency"`
|
|
BillingMode string `json:"billing_mode"`
|
|
BillingSource string `json:"billing_source"`
|
|
RateMultiplier float64 `json:"rate_multiplier"`
|
|
LatencyMs int `json:"latency_ms"`
|
|
FirstTokenMs int `json:"first_token_ms"`
|
|
Status string `json:"status"`
|
|
ErrorMessage string `json:"error_message"`
|
|
RetryIndex int `json:"retry_index"`
|
|
ClientIp string `json:"client_ip"`
|
|
UserAgent string `json:"user_agent"`
|
|
ServiceTier string `json:"service_tier"`
|
|
ReasoningEffort string `json:"reasoning_effort"`
|
|
StreamEndReason string `json:"stream_end_reason"`
|
|
ImageCount int `json:"image_count"`
|
|
ImageSize string `json:"image_size"`
|
|
PreDeductAmount float64 `json:"pre_deduct_amount"`
|
|
RefundAmount float64 `json:"refund_amount"`
|
|
SupplementAmount float64 `json:"supplement_amount"`
|
|
BillingSummary string `json:"billing_summary"`
|
|
BillingSnapshot string `json:"billing_snapshot"`
|
|
InboundEndpoint string `json:"inbound_endpoint"`
|
|
RequestId string `json:"request_id"`
|
|
CreatedAt *gtime.Time `json:"created_at"`
|
|
}
|
|
|
|
type AdminUsageLogListRes struct {
|
|
List []*AdminUsageLogItem `json:"list"`
|
|
Total int `json:"total"`
|
|
Page int `json:"page"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
|
|
// === 计费记录 ===
|
|
|
|
type AdminBillingRecordListReq struct {
|
|
g.Meta `path:"/billing-records" method:"get" mime:"json" tags:"管理后台-用量" summary:"计费记录列表"`
|
|
Page int `json:"page" d:"1" dc:"页码"`
|
|
PageSize int `json:"page_size" d:"20" v:"between:1,100" dc:"每页数量"`
|
|
TenantID int64 `json:"tenant_id" dc:"租户ID"`
|
|
}
|
|
|
|
type AdminBillingRecordItem struct {
|
|
Id int64 `json:"id"`
|
|
TenantId int64 `json:"tenant_id"`
|
|
TenantName string `json:"tenant_name"`
|
|
UserId int64 `json:"user_id"`
|
|
UserName string `json:"user_name"`
|
|
ChannelId int64 `json:"channel_id"`
|
|
ChannelName string `json:"channel_name"`
|
|
ModelName string `json:"model_name"`
|
|
RelayMode string `json:"relay_mode"`
|
|
InputTokens int `json:"input_tokens"`
|
|
OutputTokens int `json:"output_tokens"`
|
|
InputPrice float64 `json:"input_price"`
|
|
OutputPrice float64 `json:"output_price"`
|
|
TotalCost float64 `json:"total_cost"`
|
|
Currency string `json:"currency"`
|
|
Status string `json:"status"`
|
|
SettledAt *gtime.Time `json:"settled_at"`
|
|
CreatedAt *gtime.Time `json:"created_at"`
|
|
}
|
|
|
|
type AdminBillingRecordListRes struct {
|
|
List []*AdminBillingRecordItem `json:"list"`
|
|
Total int `json:"total"`
|
|
Page int `json:"page"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
|
|
// === 钱包管理 ===
|
|
|
|
type AdminWalletListReq struct {
|
|
g.Meta `path:"/wallets" method:"get" mime:"json" tags:"管理后台-钱包" summary:"钱包列表"`
|
|
Page int `json:"page" d:"1" dc:"页码"`
|
|
PageSize int `json:"page_size" d:"20" v:"between:1,100" dc:"每页数量"`
|
|
}
|
|
|
|
type AdminWalletItem struct {
|
|
Id int64 `json:"id"`
|
|
TenantId int64 `json:"tenant_id"`
|
|
Balance float64 `json:"balance"`
|
|
FrozenBalance float64 `json:"frozen_balance"`
|
|
WarningThreshold float64 `json:"warning_threshold"`
|
|
Currency string `json:"currency"`
|
|
CreatedAt *gtime.Time `json:"created_at"`
|
|
UpdatedAt *gtime.Time `json:"updated_at"`
|
|
}
|
|
|
|
type AdminWalletListRes struct {
|
|
List []*AdminWalletItem `json:"list"`
|
|
Total int `json:"total"`
|
|
Page int `json:"page"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
|
|
type AdminWalletInfoReq struct {
|
|
g.Meta `path:"/wallets/{tenant_id}" method:"get" mime:"json" tags:"管理后台-钱包" summary:"钱包详情"`
|
|
TenantID int64 `json:"tenant_id" in:"path" v:"required|min:1" dc:"租户ID"`
|
|
}
|
|
|
|
type AdminWalletInfoRes struct {
|
|
Balance float64 `json:"balance"`
|
|
FrozenBalance float64 `json:"frozen_balance"`
|
|
WarningThreshold *float64 `json:"warning_threshold"`
|
|
}
|
|
|
|
type AdminWalletAdjustReq struct {
|
|
g.Meta `path:"/wallets/{tenant_id}/adjust" method:"post" mime:"json" tags:"管理后台-钱包" summary:"调整余额"`
|
|
TenantID int64 `json:"tenant_id" in:"path" v:"required|min:1" dc:"租户ID"`
|
|
Amount float64 `json:"amount" v:"required" dc:"调整金额(正数充值,负数扣减)"`
|
|
Description string `json:"description" dc:"调整说明"`
|
|
}
|
|
|
|
type AdminWalletAdjustRes struct{}
|
|
|
|
type AdminWalletTransactionListReq struct {
|
|
g.Meta `path:"/wallets/{tenant_id}/transactions" method:"get" mime:"json" tags:"管理后台-钱包" summary:"交易流水"`
|
|
TenantID int64 `json:"tenant_id" in:"path" v:"required|min:1" dc:"租户ID"`
|
|
Page int `json:"page" d:"1" dc:"页码"`
|
|
PageSize int `json:"page_size" d:"20" v:"between:1,100" dc:"每页数量"`
|
|
Type string `json:"type" dc:"交易类型"`
|
|
}
|
|
|
|
type AdminWalletTransactionItem struct {
|
|
ID int64 `json:"id"`
|
|
Type string `json:"type"`
|
|
Amount float64 `json:"amount"`
|
|
BalanceAfter float64 `json:"balance_after"`
|
|
FrozenAfter float64 `json:"frozen_after"`
|
|
Description string `json:"description"`
|
|
UserId int64 `json:"user_id"`
|
|
Username string `json:"username"`
|
|
RequestId string `json:"request_id"`
|
|
ModelName string `json:"model_name"`
|
|
CreatedAt string `json:"created_at"`
|
|
}
|
|
|
|
type AdminWalletTransactionListRes struct {
|
|
List []*AdminWalletTransactionItem `json:"list"`
|
|
Total int `json:"total"`
|
|
Page int `json:"page"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
|
|
type AdminWalletSetWarningThresholdReq struct {
|
|
g.Meta `path:"/wallets/{tenant_id}/warning-threshold" method:"put" mime:"json" tags:"管理后台-钱包" summary:"设置预警阈值"`
|
|
TenantID int64 `json:"tenant_id" in:"path" v:"required|min:1" dc:"租户ID"`
|
|
Threshold float64 `json:"threshold" v:"min:0" dc:"预警阈值"`
|
|
}
|
|
|
|
type AdminWalletSetWarningThresholdRes struct{}
|
|
|
|
// AdminUsageLogExportReq 导出用量日志请求
|
|
type AdminUsageLogExportReq struct {
|
|
g.Meta `path:"/usage-logs/export" method:"get" mime:"json" tags:"管理后台-用量" summary:"导出用量日志"`
|
|
Format string `json:"format" in:"query" d:"csv" v:"in:csv,xlsx" dc:"导出格式:csv / xlsx"`
|
|
TenantID int64 `json:"tenant_id" in:"query" dc:"租户ID"`
|
|
Username string `json:"username" in:"query" dc:"用户名(模糊匹配)"`
|
|
Model string `json:"model" in:"query" dc:"模型名称"`
|
|
Status string `json:"status" in:"query" dc:"状态"`
|
|
RequestType int `json:"request_type" in:"query" dc:"请求类型: 1=同步, 2=流式, 3=异步, 4=WebSocket"`
|
|
StartDate string `json:"start_date" in:"query" dc:"开始日期"`
|
|
EndDate string `json:"end_date" in:"query" dc:"结束日期"`
|
|
}
|
|
|
|
type AdminUsageLogExportRes struct{}
|
|
|
|
// AdminBillingRecordExportReq 导出计费记录请求
|
|
type AdminBillingRecordExportReq struct {
|
|
g.Meta `path:"/billing-records/export" method:"get" mime:"json" tags:"管理后台-用量" summary:"导出计费记录"`
|
|
Format string `json:"format" in:"query" d:"csv" v:"in:csv,xlsx" dc:"导出格式:csv / xlsx"`
|
|
TenantID int64 `json:"tenant_id" in:"query" dc:"租户ID"`
|
|
}
|
|
|
|
type AdminBillingRecordExportRes struct{}
|