84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package kv
|
|
|
|
import (
|
|
"github.com/benbjohnson/clock"
|
|
"github.com/influxdata/influxdb/v2"
|
|
"github.com/influxdata/influxdb/v2/kit/platform"
|
|
"github.com/influxdata/influxdb/v2/query/fluxlang"
|
|
"github.com/influxdata/influxdb/v2/rand"
|
|
"github.com/influxdata/influxdb/v2/resource"
|
|
"github.com/influxdata/influxdb/v2/resource/noop"
|
|
"github.com/influxdata/influxdb/v2/snowflake"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// OpPrefix is the prefix for kv errors.
|
|
const OpPrefix = "kv/"
|
|
|
|
// Service is the struct that influxdb services are implemented on.
|
|
type Service struct {
|
|
kv Store
|
|
log *zap.Logger
|
|
clock clock.Clock
|
|
Config ServiceConfig
|
|
audit resource.Logger
|
|
IDGenerator platform.IDGenerator
|
|
|
|
// FluxLanguageService is used for parsing flux.
|
|
// If this is unset, operations that require parsing flux
|
|
// will fail.
|
|
FluxLanguageService fluxlang.FluxLanguageService
|
|
|
|
TokenGenerator influxdb.TokenGenerator
|
|
// TODO(desa:ariel): this should not be embedded
|
|
influxdb.TimeGenerator
|
|
|
|
orgs influxdb.OrganizationService
|
|
|
|
variableStore *IndexStore
|
|
}
|
|
|
|
// NewService returns an instance of a Service.
|
|
func NewService(log *zap.Logger, kv Store, orgs influxdb.OrganizationService, configs ...ServiceConfig) *Service {
|
|
s := &Service{
|
|
log: log,
|
|
IDGenerator: snowflake.NewIDGenerator(),
|
|
TokenGenerator: rand.NewTokenGenerator(64),
|
|
kv: kv,
|
|
orgs: orgs,
|
|
audit: noop.ResourceLogger{},
|
|
TimeGenerator: influxdb.RealTimeGenerator{},
|
|
variableStore: newVariableStore(),
|
|
}
|
|
|
|
if len(configs) > 0 {
|
|
s.Config = configs[0]
|
|
}
|
|
|
|
s.clock = s.Config.Clock
|
|
if s.clock == nil {
|
|
s.clock = clock.New()
|
|
}
|
|
|
|
s.FluxLanguageService = s.Config.FluxLanguageService
|
|
|
|
return s
|
|
}
|
|
|
|
// ServiceConfig allows us to configure Services
|
|
type ServiceConfig struct {
|
|
Clock clock.Clock
|
|
FluxLanguageService fluxlang.FluxLanguageService
|
|
}
|
|
|
|
// WithResourceLogger sets the resource audit logger for the service.
|
|
func (s *Service) WithResourceLogger(audit resource.Logger) {
|
|
s.audit = audit
|
|
}
|
|
|
|
// WithStore sets kv store for the service.
|
|
// Should only be used in tests for mocking.
|
|
func (s *Service) WithStore(store Store) {
|
|
s.kv = store
|
|
}
|