fix(sonar-telemetry): update observeSessionsFor function to include siteID and improve attribute handling

This commit is contained in:
Marc Schäfer
2025-10-08 08:13:35 +02:00
parent ed127a2d61
commit ae5129a7c7
3 changed files with 12 additions and 8 deletions

View File

@@ -210,7 +210,9 @@ func SetObservableCallback(cb func(context.Context, metric.Observer) error) {
reg, e := meter.RegisterCallback(cb, mSiteOnline, mSiteLastHeartbeat, mTunnelSessions) reg, e := meter.RegisterCallback(cb, mSiteOnline, mSiteLastHeartbeat, mTunnelSessions)
if e != nil { if e != nil {
otel.Handle(e) otel.Handle(e)
obsStopper = func() {} obsStopper = func() {
// no-op: registration failed; keep stopper callable
}
return return
} }
// Provide a functional stopper mirroring proxy/build-info behavior // Provide a functional stopper mirroring proxy/build-info behavior

View File

@@ -39,7 +39,7 @@ func RegisterStateView(v StateView) {
for _, siteID := range sv.ListSites() { for _, siteID := range sv.ListSites() {
observeSiteOnlineFor(o, sv, siteID) observeSiteOnlineFor(o, sv, siteID)
observeLastHeartbeatFor(o, sv, siteID) observeLastHeartbeatFor(o, sv, siteID)
observeSessionsFor(o, any) observeSessionsFor(o, siteID, sv)
} }
} }
} }
@@ -51,9 +51,11 @@ func RegisterStateView(v StateView) {
func observeSiteOnlineFor(o metric.Observer, sv StateView, siteID string) { func observeSiteOnlineFor(o metric.Observer, sv StateView, siteID string) {
if online, ok := sv.Online(siteID); ok { if online, ok := sv.Online(siteID); ok {
val := int64(0) val := int64(0)
if online { val = 1 } if online {
val = 1
}
o.ObserveInt64(mSiteOnline, val, metric.WithAttributes( o.ObserveInt64(mSiteOnline, val, metric.WithAttributes(
attribute.String("site_id", getSiteID()), attribute.String("site_id", siteID),
)) ))
} }
} }
@@ -62,16 +64,16 @@ func observeLastHeartbeatFor(o metric.Observer, sv StateView, siteID string) {
if t, ok := sv.LastHeartbeat(siteID); ok { if t, ok := sv.LastHeartbeat(siteID); ok {
secs := time.Since(t).Seconds() secs := time.Since(t).Seconds()
o.ObserveFloat64(mSiteLastHeartbeat, secs, metric.WithAttributes( o.ObserveFloat64(mSiteLastHeartbeat, secs, metric.WithAttributes(
attribute.String("site_id", getSiteID()), attribute.String("site_id", siteID),
)) ))
} }
} }
func observeSessionsFor(o metric.Observer, any interface{}) { func observeSessionsFor(o metric.Observer, siteID string, any interface{}) {
if tm, ok := any.(interface{ SessionsByTunnel() map[string]int64 }); ok { if tm, ok := any.(interface{ SessionsByTunnel() map[string]int64 }); ok {
for tid, n := range tm.SessionsByTunnel() { for tid, n := range tm.SessionsByTunnel() {
attrs := []attribute.KeyValue{ attrs := []attribute.KeyValue{
attribute.String("site_id", getSiteID()), attribute.String("site_id", siteID),
} }
if ShouldIncludeTunnelID() && tid != "" { if ShouldIncludeTunnelID() && tid != "" {
attrs = append(attrs, attribute.String("tunnel_id", tid)) attrs = append(attrs, attribute.String("tunnel_id", tid))

View File

@@ -171,7 +171,7 @@ func buildResource(ctx context.Context, cfg Config) *resource.Resource {
return res return res
} }
func setupMetricExport(ctx context.Context, cfg Config, res *resource.Resource) ([]sdkmetric.Reader, http.Handler, []func(context.Context) error, error) { func setupMetricExport(ctx context.Context, cfg Config, _ *resource.Resource) ([]sdkmetric.Reader, http.Handler, []func(context.Context) error, error) {
var readers []sdkmetric.Reader var readers []sdkmetric.Reader
var shutdowns []func(context.Context) error var shutdowns []func(context.Context) error
var promHandler http.Handler var promHandler http.Handler