代码拉取完成,页面将自动刷新
// Copyright (C) 2017 - 2024 Asynkron.se <http://www.asynkron.se>
package actor
import (
"fmt"
"log/slog"
"strings"
"gitee.com/wujianhai/protoactor-go/extensions"
"gitee.com/wujianhai/protoactor-go/metrics"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric"
)
var extensionId = extensions.NextExtensionID()
type Metrics struct {
metrics *metrics.ProtoMetrics
enabled bool
actorSystem *ActorSystem
}
var _ extensions.Extension = &Metrics{}
func (m *Metrics) Enabled() bool {
return m.enabled
}
func (m *Metrics) ExtensionID() extensions.ExtensionID {
return extensionId
}
func NewMetrics(system *ActorSystem, provider metric.MeterProvider) *Metrics {
if provider == nil {
return &Metrics{}
}
return &Metrics{
metrics: metrics.NewProtoMetrics(system.Logger()),
enabled: true,
actorSystem: system,
}
}
func (m *Metrics) PrepareMailboxLengthGauge() {
meter := otel.Meter(metrics.LibName)
gauge, err := meter.Int64ObservableGauge("protoactor_actor_mailbox_length",
metric.WithDescription("Actor's Mailbox Length"),
metric.WithUnit("1"))
if err != nil {
err = fmt.Errorf("failed to create ActorMailBoxLength instrument, %w", err)
m.actorSystem.Logger().Error(err.Error(), slog.Any("error", err))
}
m.metrics.Instruments().SetActorMailboxLengthGauge(gauge)
}
func (m *Metrics) CommonLabels(ctx Context) []attribute.KeyValue {
labels := []attribute.KeyValue{
attribute.String("address", ctx.ActorSystem().Address()),
attribute.String("actortype", strings.Replace(fmt.Sprintf("%T", ctx.Actor()), "*", "", 1)),
}
return labels
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。