chore: 清理多余的BOM头并整理依赖与telemetry代码
- 移除所有文件开头的多余UTF-8 BOM头 - 简化go.mod依赖,移除未使用的uuid包 - 重构telemetry包:将Meter改为接口并拆分默认实现
This commit is contained in:
+23
-14
@@ -2,28 +2,39 @@ package telemetry
|
||||
|
||||
import "net/http"
|
||||
|
||||
// Meter 是 telemetry 的高层入口。所有业务埋点都通过它创建指标;
|
||||
// 测试时可替换为 NoopMeter 或带缓冲的自定义实现。
|
||||
type Meter struct {
|
||||
// Meter 是 telemetry 的高层入口,提供 Counter / Gauge / Histogram 的构造方法。
|
||||
// 启动时调用 NewMeter() 得到默认实现,测试时可换成 NoopMeter。
|
||||
//
|
||||
// 设计:抽象成 interface 是为了在测试或禁用观测时能无侵入替换实现;
|
||||
// 真正的注册逻辑全部委托给内部 *Registry。
|
||||
type Meter interface {
|
||||
Handler() http.Handler
|
||||
Registry() *Registry
|
||||
NewCounter(name, help string, labelNames ...string) *Counter
|
||||
NewGauge(name, help string, labelNames ...string) *Gauge
|
||||
NewHistogram(name, help string, buckets []float64, labelNames ...string) *Histogram
|
||||
}
|
||||
|
||||
// RealMeter 是 Meter 的默认实现,内部维护一个 *Registry。
|
||||
type RealMeter struct {
|
||||
reg *Registry
|
||||
}
|
||||
|
||||
// NewMeter 创建默认实现。
|
||||
func NewMeter() *Meter {
|
||||
return &Meter{reg: newRegistry()}
|
||||
// NewMeter 构造默认 Meter 实现。
|
||||
func NewMeter() Meter {
|
||||
return &RealMeter{reg: newRegistry()}
|
||||
}
|
||||
|
||||
// Handler 返回 /metrics 端点的 http.Handler。
|
||||
func (m *Meter) Handler() http.Handler { return m.reg.Handler() }
|
||||
func (m *RealMeter) Handler() http.Handler { return m.reg.Handler() }
|
||||
|
||||
// Registry 暴露给特殊用例(如测试断言),生产代码不应使用。
|
||||
func (m *Meter) Registry() *Registry { return m.reg }
|
||||
func (m *RealMeter) Registry() *Registry { return m.reg }
|
||||
|
||||
// NewCounter 注册并返回一个 Counter。
|
||||
// - name 指标名(Prometheus 风格,如 "tts_request_total")
|
||||
// - help 帮助文本
|
||||
// - labelNames 注册时锁定的 label key 集合,运行期不可变
|
||||
func (m *Meter) NewCounter(name, help string, labelNames ...string) *Counter {
|
||||
func (m *RealMeter) NewCounter(name, help string, labelNames ...string) *Counter {
|
||||
c := newCounter(name, help, labelNames)
|
||||
if err := m.reg.register(name, c); err != nil {
|
||||
// 注册重名是启动期 bug,直接 panic 让问题在启动时暴露。
|
||||
@@ -32,8 +43,7 @@ func (m *Meter) NewCounter(name, help string, labelNames ...string) *Counter {
|
||||
return c
|
||||
}
|
||||
|
||||
// NewGauge 同 NewCounter。
|
||||
func (m *Meter) NewGauge(name, help string, labelNames ...string) *Gauge {
|
||||
func (m *RealMeter) NewGauge(name, help string, labelNames ...string) *Gauge {
|
||||
g := newGauge(name, help, labelNames)
|
||||
if err := m.reg.register(name, g); err != nil {
|
||||
panic(err)
|
||||
@@ -41,8 +51,7 @@ func (m *Meter) NewGauge(name, help string, labelNames ...string) *Gauge {
|
||||
return g
|
||||
}
|
||||
|
||||
// NewHistogram 同 NewCounter,额外接受桶上界(不含 +Inf,+Inf 由实现自动追加)。
|
||||
func (m *Meter) NewHistogram(name, help string, buckets []float64, labelNames ...string) *Histogram {
|
||||
func (m *RealMeter) NewHistogram(name, help string, buckets []float64, labelNames ...string) *Histogram {
|
||||
h := newHistogram(name, help, buckets, labelNames)
|
||||
if err := m.reg.register(name, h); err != nil {
|
||||
panic(err)
|
||||
|
||||
@@ -5,6 +5,8 @@ import "net/http"
|
||||
// NoopMeter 是一个不采集、不输出的 Meter,用于单元测试或禁用观测的场景。
|
||||
// 返回的 Counter / Gauge / Histogram 实例不会被注册到任何 Registry,
|
||||
// 它们的 Inc/Add/Observe 调用在本进程内没有可见效果(每次返回新的空实例)。
|
||||
//
|
||||
// 实现 Meter 接口。
|
||||
type NoopMeter struct{}
|
||||
|
||||
func (NoopMeter) NewCounter(string, string, ...string) *Counter {
|
||||
|
||||
Reference in New Issue
Block a user