Skip to content

StatsReader

StatsReader 用于读取 AI 代码生成统计数据。

方法

GetDailyStats

获取指定日期的统计数据。

go
func (r *StatsReader) GetDailyStats(date time.Time) (*DailyStats, error)

参数:

  • date - 日期

返回值:

  • *DailyStats - 统计数据
  • error - 错误信息

示例:

go
stats, err := client.Stats().GetDailyStats(time.Now())
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Tab 建议行数: %d\n", stats.TabSuggestedLines)
fmt.Printf("Tab 接受行数: %d\n", stats.TabAcceptedLines)
fmt.Printf("接受率: %.2f%%\n", stats.TabAcceptanceRate*100)

GetStatsRange

获取日期范围内的统计数据。

go
func (r *StatsReader) GetStatsRange(start, end time.Time) ([]DailyStats, error)

参数:

  • start - 开始日期
  • end - 结束日期

返回值:

  • []DailyStats - 统计数据列表
  • error - 错误信息

示例:

go
start := time.Now().AddDate(0, 0, -7)
end := time.Now()

stats, err := client.Stats().GetStatsRange(start, end)
if err != nil {
    log.Fatal(err)
}

for _, stat := range stats {
    fmt.Printf("%s: %d 行被接受\n", 
        stat.Date.Format("2006-01-02"), 
        stat.TabAcceptedLines)
}

GetTotalStats

获取总计统计数据。

go
func (r *StatsReader) GetTotalStats() (*TotalStats, error)

返回值:

  • *TotalStats - 总计统计
  • error - 错误信息

示例:

go
total, err := client.Stats().GetTotalStats()
if err != nil {
    log.Fatal(err)
}

fmt.Printf("总天数: %d\n", total.TotalDays)
fmt.Printf("总接受率: %.2f%%\n", total.OverallAcceptanceRate*100)

CalculateAcceptanceRate

计算接受率。

go
func (r *StatsReader) CalculateAcceptanceRate(stats *DailyStats) float64

参数:

  • stats - 统计数据

返回值:

  • float64 - 接受率(0-1)

示例:

go
stats, _ := client.Stats().GetDailyStats(time.Now())
rate := client.Stats().CalculateAcceptanceRate(stats)
fmt.Printf("接受率: %.2f%%\n", rate*100)

GetRecentCommits

获取最近的提交信息。

go
func (r *StatsReader) GetRecentCommits() ([]RecentCommit, error)

返回值:

  • []RecentCommit - 提交列表
  • error - 错误信息

示例:

go
commits, err := client.Stats().GetRecentCommits()
if err != nil {
    log.Fatal(err)
}

for _, commit := range commits {
    fmt.Printf("Commit: %s - %s\n", commit.Hash, commit.Message)
}

数据结构

DailyStats

go
type DailyStats struct {
    Date                   time.Time // 日期
    TabSuggestedLines      int       // Tab 建议行数
    TabAcceptedLines       int       // Tab 接受行数
    ComposerSuggestedLines int       // Composer 建议行数
    ComposerAcceptedLines  int       // Composer 接受行数
    TabAcceptanceRate      float64   // Tab 接受率
    ComposerAcceptanceRate float64   // Composer 接受率
}

TotalStats

go
type TotalStats struct {
    TotalDays              int     // 总天数
    TotalTabSuggested      int     // Tab 总建议行数
    TotalTabAccepted       int     // Tab 总接受行数
    TotalComposerSuggested int     // Composer 总建议行数
    TotalComposerAccepted  int     // Composer 总接受行数
    OverallAcceptanceRate  float64 // 总体接受率
}

RecentCommit

go
type RecentCommit struct {
    Hash      string    // 提交哈希
    Message   string    // 提交消息
    Author    string    // 作者
    Timestamp time.Time // 时间戳
}

完整示例

go
package main

import (
    "fmt"
    "log"
    "time"
    
    cursor "github.com/vibe-coding-labs/go-cursor-sdk"
)

func main() {
    client, err := cursor.NewCursorClient(nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()
    
    // 获取今天的统计
    today, err := client.Stats().GetDailyStats(time.Now())
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Printf("今日统计:\n")
    fmt.Printf("  Tab 建议: %d\n", today.TabSuggestedLines)
    fmt.Printf("  Tab 接受: %d\n", today.TabAcceptedLines)
    fmt.Printf("  接受率: %.2f%%\n", today.TabAcceptanceRate*100)
    
    // 获取最近 7 天的统计
    start := time.Now().AddDate(0, 0, -7)
    end := time.Now()
    
    stats, err := client.Stats().GetStatsRange(start, end)
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Printf("\n最近 7 天统计:\n")
    for _, stat := range stats {
        rate := client.Stats().CalculateAcceptanceRate(&stat)
        fmt.Printf("  %s: %.2f%%\n", 
            stat.Date.Format("2006-01-02"), 
            rate*100)
    }
    
    // 获取总计统计
    total, err := client.Stats().GetTotalStats()
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Printf("\n总计统计:\n")
    fmt.Printf("  总天数: %d\n", total.TotalDays)
    fmt.Printf("  总接受率: %.2f%%\n", total.OverallAcceptanceRate*100)
}

相关文档

Released under the MIT License.