influxdb/session/middleware_metrics.go

57 lines
1.9 KiB
Go

package session
import (
"context"
"time"
"github.com/influxdata/influxdb/v2"
"github.com/influxdata/influxdb/v2/kit/metric"
"github.com/prometheus/client_golang/prometheus"
)
// SessionMetrics is a metrics middleware system for the session service
type SessionMetrics struct {
// RED metrics
rec *metric.REDClient
sessionSvc influxdb.SessionService
}
var _ influxdb.SessionService = (*SessionMetrics)(nil)
// NewSessionMetrics creates a new session metrics middleware
func NewSessionMetrics(reg prometheus.Registerer, s influxdb.SessionService) *SessionMetrics {
return &SessionMetrics{
rec: metric.New(reg, "session"),
sessionSvc: s,
}
}
// FindSession calls the underlying session service and tracks RED metrics for the call
func (m *SessionMetrics) FindSession(ctx context.Context, key string) (session *influxdb.Session, err error) {
rec := m.rec.Record("find_session")
session, err = m.sessionSvc.FindSession(ctx, key)
return session, rec(err)
}
// ExpireSession calls the underlying session service and tracks RED metrics for the call
func (m *SessionMetrics) ExpireSession(ctx context.Context, key string) (err error) {
rec := m.rec.Record("expire_session")
err = m.sessionSvc.ExpireSession(ctx, key)
return rec(err)
}
// CreateSession calls the underlying session service and tracks RED metrics for the call
func (m *SessionMetrics) CreateSession(ctx context.Context, user string) (s *influxdb.Session, err error) {
rec := m.rec.Record("create_session")
s, err = m.sessionSvc.CreateSession(ctx, user)
return s, rec(err)
}
// RenewSession calls the underlying session service and tracks RED metrics for the call
func (m *SessionMetrics) RenewSession(ctx context.Context, session *influxdb.Session, newExpiration time.Time) (err error) {
rec := m.rec.Record("renew_session")
err = m.sessionSvc.RenewSession(ctx, session, newExpiration)
return rec(err)
}