Documentation
¶
Overview ¶
Package callbacks 提供非侵入的执行切面:在某个执行单元的开始/结束/出错时机 触发回调,用于统一注入可观测性(trace、metrics、日志)而不改动业务代码。
业务侧只需在入口/出口埋三个调用:
func (s *svc) Do(ctx context.Context, in Input) (Output, error) {
info := &callbacks.RunInfo{Name: "Do", Component: "svc"}
ctx = callbacks.OnStart(ctx, info, in)
out, err := s.do(ctx, in)
if err != nil {
callbacks.OnError(ctx, info, err)
return out, err
}
callbacks.OnEnd(ctx, info, out)
return out, nil
}
观测侧注册 Handler(全局或随 ctx 局部),无需感知业务:
h := callbacks.NewHandlerBuilder().
OnStart(func(ctx context.Context, info *callbacks.RunInfo, input any) context.Context {
return context.WithValue(ctx, startKey{}, time.Now())
}).
OnEnd(func(ctx context.Context, info *callbacks.RunInfo, output any) context.Context {
cost := time.Since(ctx.Value(startKey{}).(time.Time))
metrics.Observe(info.Name, cost)
return ctx
}).
Build()
callbacks.AppendGlobalHandlers(h)
Index ¶
- func AppendGlobalHandlers(hs ...Handler)
- func OnEnd(ctx context.Context, info *RunInfo, output any) context.Context
- func OnError(ctx context.Context, info *RunInfo, err error) context.Context
- func OnStart(ctx context.Context, info *RunInfo, input any) context.Context
- func WithHandlers(ctx context.Context, hs ...Handler) context.Context
- type EndFn
- type ErrorFn
- type Handler
- type HandlerBuilder
- type RunInfo
- type StartFn
- type Timing
- type TimingChecker
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AppendGlobalHandlers ¶
func AppendGlobalHandlers(hs ...Handler)
AppendGlobalHandlers 注册全局 handler(观测所有埋点)。通常在程序启动时调用一次。
Types ¶
type Handler ¶
type Handler interface {
OnStart(ctx context.Context, info *RunInfo, input any) context.Context
OnEnd(ctx context.Context, info *RunInfo, output any) context.Context
OnError(ctx context.Context, info *RunInfo, err error) context.Context
}
Handler 是切面回调处理器。每个方法返回(可能被修改的)ctx, 供同一 handler 在后续时机间传递状态(如开始时间)。
type HandlerBuilder ¶
type HandlerBuilder struct {
// contains filtered or unexported fields
}
HandlerBuilder 用函数快速构建 Handler。只设置需要的时机即可; 构建出的 Handler 会实现 TimingChecker,自动跳过未设置的时机(零开销)。
func NewHandlerBuilder ¶
func NewHandlerBuilder() *HandlerBuilder
NewHandlerBuilder 创建一个 HandlerBuilder。
func (*HandlerBuilder) OnEnd ¶
func (b *HandlerBuilder) OnEnd(fn EndFn) *HandlerBuilder
OnEnd 设置结束时机回调。
func (*HandlerBuilder) OnError ¶
func (b *HandlerBuilder) OnError(fn ErrorFn) *HandlerBuilder
OnError 设置出错时机回调。
func (*HandlerBuilder) OnStart ¶
func (b *HandlerBuilder) OnStart(fn StartFn) *HandlerBuilder
OnStart 设置开始时机回调。
type RunInfo ¶
type RunInfo struct {
Name string // 实例/方法名
Type string // 类型名
Component string // 组件类别(如 "http" / "grpc" / "svc")
}
RunInfo 描述被观测的执行单元。
Click to show internal directories.
Click to hide internal directories.