Files

66 lines
2.2 KiB
Go
Raw Permalink Normal View History

package bridge
import (
"context"
"cursor/internal/appdata"
serverconfig "cursor/internal/backend/server/config"
"cursor/internal/historymetrics"
)
// HomeMetricsSummary 定义首页展示的历史统计摘要。
type HomeMetricsSummary struct {
ProviderCallsTotal int `json:"providerCallsTotal"`
TurnsTotal int `json:"turnsTotal"`
ValidTurnsTotal int `json:"validTurnsTotal"`
InvalidTurnsTotal int `json:"invalidTurnsTotal"`
RequestTokensTotal int64 `json:"requestTokensTotal"`
PromptTokensTotal int64 `json:"promptTokensTotal"`
CacheReadTokens int64 `json:"cacheReadTokens"`
CacheWriteTokens int64 `json:"cacheWriteTokens"`
CacheHitRate *float64 `json:"cacheHitRate"`
}
// MetricsService 定义首页统计相关的 Wails service。
type MetricsService struct {
configStore *serverconfig.Store
}
// NewMetricsService 创建首页统计 service。
func NewMetricsService() *MetricsService {
return &MetricsService{
configStore: serverconfig.NewStore(appdata.ConfigFilePath(), ""),
}
}
// GetHomeMetricsSummary 返回首页展示的全量历史统计摘要。
// 命中率口径(是否计入缓存写入)由后端按用户配置统一计算。
func (service *MetricsService) GetHomeMetricsSummary() (HomeMetricsSummary, error) {
if err := appdata.EnsureAssistantHome(); err != nil {
return HomeMetricsSummary{}, err
}
includeCacheWriteInHitRate := false
if service != nil && service.configStore != nil {
if cfg, err := service.configStore.Load(context.Background()); err == nil {
includeCacheWriteInHitRate = cfg.HomeMetrics.IncludeCacheWriteInHitRate
}
}
summary, err := historymetrics.LoadUsageSummary(appdata.UsageFilePath(), includeCacheWriteInHitRate)
if err != nil {
return HomeMetricsSummary{}, err
}
return HomeMetricsSummary{
ProviderCallsTotal: summary.ProviderCallsTotal,
TurnsTotal: summary.TurnsTotal,
ValidTurnsTotal: summary.ValidTurnsTotal,
InvalidTurnsTotal: summary.InvalidTurnsTotal,
RequestTokensTotal: summary.RequestTokensTotal,
PromptTokensTotal: summary.PromptTokensTotal,
CacheReadTokens: summary.CacheReadTokens,
CacheWriteTokens: summary.CacheWriteTokens,
CacheHitRate: summary.CacheHitRate,
}, nil
}