package model import "time" // MetricPoint 指标数据点(用于趋势图) type MetricPoint struct { Ts time.Time `json:"ts"` Success int `json:"success"` Error int `json:"error"` AvgFirstByteTimeSeconds *float64 `json:"avg_first_byte_time_seconds,omitempty"` // 平均首字节响应时间(秒) AvgDurationSeconds *float64 `json:"avg_duration_seconds,omitempty"` // 平均总耗时(秒) TotalCost *float64 `json:"total_cost,omitempty"` // 标准成本(美元) EffectiveCost *float64 `json:"effective_cost,omitempty"` // 倍率后成本(美元) FirstByteSampleCount int `json:"first_byte_count,omitempty"` // 首字节样本数(流式成功且有首字节时间) DurationSampleCount int `json:"duration_count,omitempty"` // 总耗时样本数(成功且有耗时) InputTokens int64 `json:"input_tokens,omitempty"` // 输入Token OutputTokens int64 `json:"output_tokens,omitempty"` // 输出Token CacheReadTokens int64 `json:"cache_read_tokens,omitempty"` // 缓存读取Token CacheCreationTokens int64 `json:"cache_creation_tokens,omitempty"` // 缓存创建Token Channels map[string]ChannelMetric `json:"channels,omitempty"` } // ChannelMetric 单个渠道的指标 type ChannelMetric struct { Success int `json:"success"` Error int `json:"error"` AvgFirstByteTimeSeconds *float64 `json:"avg_first_byte_time_seconds,omitempty"` // 平均上游首块响应体时间(秒) AvgDurationSeconds *float64 `json:"avg_duration_seconds,omitempty"` // 平均总耗时(秒) TotalCost *float64 `json:"total_cost,omitempty"` // 标准成本(美元) EffectiveCost *float64 `json:"effective_cost,omitempty"` // 倍率后成本(美元) InputTokens int64 `json:"input_tokens,omitempty"` // 输入Token OutputTokens int64 `json:"output_tokens,omitempty"` // 输出Token CacheReadTokens int64 `json:"cache_read_tokens,omitempty"` // 缓存读取Token CacheCreationTokens int64 `json:"cache_creation_tokens,omitempty"` // 缓存创建Token } // HealthPoint 健康状态数据点(用于健康状态指示器) type HealthPoint struct { Ts time.Time `json:"ts"` // 时间点 SuccessRate float64 `json:"rate"` // 成功率 (0-1), -1表示无数据 SuccessCount int `json:"success"` // 成功次数 ErrorCount int `json:"error"` // 失败次数 AvgFirstByteTime float64 `json:"avg_first_byte_time"` // 平均上游首块响应体时间(秒) AvgDuration float64 `json:"avg_duration"` // 平均耗时(秒) TotalInputTokens int64 `json:"input_tokens"` // 输入Token TotalOutputTokens int64 `json:"output_tokens"` // 输出Token TotalCacheReadTokens int64 `json:"cache_read_tokens"` // 缓存读取Token TotalCacheCreationTokens int64 `json:"cache_creation_tokens"` // 缓存创建Token TotalCost float64 `json:"cost"` // 标准成本(美元) EffectiveCost float64 `json:"effective_cost"` // 倍率后成本(美元) } // StatsEntry 统计数据条目 type StatsEntry struct { ChannelID *int `json:"channel_id,omitempty"` ChannelName string `json:"channel_name"` ChannelPriority *int `json:"channel_priority,omitempty"` // 渠道优先级(用于前端排序) ChannelType string `json:"channel_type,omitempty"` // 渠道类型(用于前端筛选/排序) CostMultiplier *float64 `json:"cost_multiplier,omitempty"` // 渠道配置倍率(默认1,前端角标仅显示该值) Model string `json:"model"` Success int `json:"success"` Error int `json:"error"` Total int `json:"total"` AvgFirstByteTimeSeconds *float64 `json:"avg_first_byte_time_seconds,omitempty"` // 流式请求平均上游首块响应体时间(秒) AvgDurationSeconds *float64 `json:"avg_duration_seconds,omitempty"` // 平均总耗时(秒) LastSuccessAt *int64 `json:"last_success_at,omitempty"` // 最近一次成功请求时间(毫秒) LastSuccessID *int64 `json:"last_success_id,omitempty"` // 最近一次成功请求日志ID LastRequestAt *int64 `json:"last_request_at,omitempty"` // 最近一次非499请求时间(毫秒) LastRequestID *int64 `json:"last_request_id,omitempty"` // 最近一次非499请求日志ID LastRequestStatus *int `json:"last_request_status,omitempty"` // 最近一次非499请求状态码 LastRequestMessage string `json:"last_request_message,omitempty"` // 最近一次非499请求日志 // RPM/QPS统计(基于分钟级数据) PeakRPM *float64 `json:"peak_rpm,omitempty"` // 峰值RPM(该渠道+模型的最大每分钟请求数) AvgRPM *float64 `json:"avg_rpm,omitempty"` // 平均RPM RecentRPM *float64 `json:"recent_rpm,omitempty"` // 最近一分钟RPM(仅本日有效) // Token统计(2025-11新增) TotalInputTokens *int64 `json:"total_input_tokens,omitempty"` // 总输入Token TotalOutputTokens *int64 `json:"total_output_tokens,omitempty"` // 总输出Token TotalCacheReadInputTokens *int64 `json:"total_cache_read_input_tokens,omitempty"` // 总缓存读取Token TotalCacheCreationInputTokens *int64 `json:"total_cache_creation_input_tokens,omitempty"` // 总缓存创建Token TotalCost *float64 `json:"total_cost,omitempty"` // 标准成本(美元) EffectiveCost *float64 `json:"effective_cost,omitempty"` // 倍率后成本(美元) // 健康状态时间线(2025-12新增) HealthTimeline []HealthPoint `json:"health_timeline,omitempty"` // 固定24个时间点的健康状态 } // RPMStats 包含RPM/QPS相关的统计数据 type RPMStats struct { PeakRPM float64 `json:"peak_rpm"` // 峰值RPM(每分钟最大请求数) PeakQPS float64 `json:"peak_qps"` // 峰值QPS(每秒最大请求数) AvgRPM float64 `json:"avg_rpm"` // 平均RPM AvgQPS float64 `json:"avg_qps"` // 平均QPS RecentRPM float64 `json:"recent_rpm"` // 最近一分钟RPM(仅本日有效) RecentQPS float64 `json:"recent_qps"` // 最近一分钟QPS(仅本日有效) } // HealthTimelineParams 健康时间线查询参数 type HealthTimelineParams struct { SinceMs int64 // 起始时间(毫秒) UntilMs int64 // 结束时间(毫秒) BucketMs int64 // 时间桶大小(毫秒) Filter *LogFilter // 复用日志筛选条件,避免 stats 页和时间线查询口径漂移 } // HealthTimelineRow 健康时间线数据行 type HealthTimelineRow struct { BucketTs int64 ChannelID int Model string Success int ErrorCount int AvgFirstByteTime float64 AvgDuration float64 InputTokens int64 OutputTokens int64 CacheReadTokens int64 CacheCreationTokens int64 TotalCost float64 EffectiveCost float64 } // ChannelNameID 渠道ID和名称(用于筛选下拉框) type ChannelNameID struct { ID int64 `json:"id"` Name string `json:"name"` }