influxdb/session/controller.go

60 lines
1.8 KiB
Go

package session
import (
"context"
"time"
"github.com/influxdata/influxdb/v2"
"github.com/influxdata/influxdb/v2/kit/feature"
)
var _ influxdb.SessionService = (*ServiceController)(nil)
// ServiceController is a temporary switching mechanism to allow
// a safe rollout of the new session service
type ServiceController struct {
flagger feature.Flagger
oldSessionService influxdb.SessionService
newSessionService influxdb.SessionService
}
func NewServiceController(flagger feature.Flagger, oldSessionService influxdb.SessionService, newSessionService influxdb.SessionService) *ServiceController {
return &ServiceController{
flagger: flagger,
oldSessionService: oldSessionService,
newSessionService: newSessionService,
}
}
func (s *ServiceController) useNew(ctx context.Context) bool {
return feature.SessionService().Enabled(ctx, s.flagger)
}
func (s *ServiceController) FindSession(ctx context.Context, key string) (*influxdb.Session, error) {
if s.useNew(ctx) {
return s.newSessionService.FindSession(ctx, key)
}
return s.oldSessionService.FindSession(ctx, key)
}
func (s *ServiceController) ExpireSession(ctx context.Context, key string) error {
if s.useNew(ctx) {
return s.newSessionService.ExpireSession(ctx, key)
}
return s.oldSessionService.ExpireSession(ctx, key)
}
func (s *ServiceController) CreateSession(ctx context.Context, user string) (*influxdb.Session, error) {
if s.useNew(ctx) {
return s.newSessionService.CreateSession(ctx, user)
}
return s.oldSessionService.CreateSession(ctx, user)
}
func (s *ServiceController) RenewSession(ctx context.Context, session *influxdb.Session, newExpiration time.Time) error {
if s.useNew(ctx) {
return s.newSessionService.RenewSession(ctx, session, newExpiration)
}
return s.oldSessionService.RenewSession(ctx, session, newExpiration)
}