forked from niuniu/llm-intelligence
130 lines
3.0 KiB
Go
130 lines
3.0 KiB
Go
// internal/collectors/collector.go
|
||
// Collector 接口定义:所有数据源采集器的统一抽象
|
||
package collectors
|
||
|
||
import (
|
||
"context"
|
||
"time"
|
||
)
|
||
|
||
// Result 采集结果
|
||
type Result struct {
|
||
Models []ModelInfo
|
||
Meta CollectionMeta
|
||
}
|
||
|
||
// CollectionMeta 采集元信息
|
||
type CollectionMeta struct {
|
||
Source string
|
||
Count int
|
||
Duration time.Duration
|
||
Timestamp time.Time
|
||
BatchID string
|
||
CollectorVersion string
|
||
}
|
||
|
||
// ModelInfo 标准模型信息(与 fetch_openrouter.go 兼容)
|
||
type ModelInfo struct {
|
||
ID string
|
||
Name string
|
||
Provider string
|
||
ProviderID string
|
||
Version string
|
||
Modality string
|
||
ContextLength int
|
||
Capabilities []string
|
||
Pricing ModelPricing
|
||
Description string
|
||
IsFree bool
|
||
SourceURL string
|
||
}
|
||
|
||
// ModelPricing 标准定价信息
|
||
type ModelPricing struct {
|
||
Input float64
|
||
Output float64
|
||
}
|
||
|
||
// Collector 采集器接口
|
||
type Collector interface {
|
||
// Name 返回采集器名称
|
||
Name() string
|
||
|
||
// Collect 执行采集,返回标准模型列表
|
||
Collect(ctx context.Context) (Result, error)
|
||
|
||
// Schedule 返回推荐调度周期(如 "0 8 * * *")
|
||
Schedule() string
|
||
|
||
// Timeout 返回单次采集超时时间
|
||
Timeout() time.Duration
|
||
|
||
// RetryCount 返回最大重试次数
|
||
RetryCount() int
|
||
}
|
||
|
||
// BaseCollector 提供默认实现的嵌入类型
|
||
type BaseCollector struct {
|
||
name string
|
||
schedule string
|
||
timeout time.Duration
|
||
retryCount int
|
||
version string
|
||
}
|
||
|
||
func (b *BaseCollector) Name() string { return b.name }
|
||
func (b *BaseCollector) Schedule() string { return b.schedule }
|
||
func (b *BaseCollector) Timeout() time.Duration { return b.timeout }
|
||
func (b *BaseCollector) RetryCount() int { return b.retryCount }
|
||
func (b *BaseCollector) Version() string { return b.version }
|
||
|
||
// NewBaseCollector 创建基础采集器配置
|
||
func NewBaseCollector(name, schedule string, timeout time.Duration, retry int, version string) BaseCollector {
|
||
return BaseCollector{
|
||
name: name,
|
||
schedule: schedule,
|
||
timeout: timeout,
|
||
retryCount: retry,
|
||
version: version,
|
||
}
|
||
}
|
||
|
||
// CollectorRegistry 采集器注册表
|
||
type CollectorRegistry struct {
|
||
collectors map[string]Collector
|
||
}
|
||
|
||
// NewRegistry 创建采集器注册表
|
||
func NewRegistry() *CollectorRegistry {
|
||
return &CollectorRegistry{collectors: make(map[string]Collector)}
|
||
}
|
||
|
||
// Register 注册采集器
|
||
func (r *CollectorRegistry) Register(c Collector) {
|
||
r.collectors[c.Name()] = c
|
||
}
|
||
|
||
// Get 获取采集器
|
||
func (r *CollectorRegistry) Get(name string) (Collector, bool) {
|
||
c, ok := r.collectors[name]
|
||
return c, ok
|
||
}
|
||
|
||
// All 返回所有已注册采集器
|
||
func (r *CollectorRegistry) All() []Collector {
|
||
cs := make([]Collector, 0, len(r.collectors))
|
||
for _, c := range r.collectors {
|
||
cs = append(cs, c)
|
||
}
|
||
return cs
|
||
}
|
||
|
||
// Names 返回所有已注册采集器名称
|
||
func (r *CollectorRegistry) Names() []string {
|
||
names := make([]string, 0, len(r.collectors))
|
||
for n := range r.collectors {
|
||
names = append(names, n)
|
||
}
|
||
return names
|
||
}
|