57 lines
1.9 KiB
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)
|
|
}
|