forked from influxdata/influxdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.go
73 lines (59 loc) · 1.46 KB
/
service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package storage
import (
"time"
"github.com/influxdata/influxdb/services/meta"
"github.com/influxdata/influxdb/tsdb"
"github.com/uber-go/zap"
)
// Service manages the listener and handler for an HTTP endpoint.
type Service struct {
addr string
yarpc *yarpcServer
loggingEnabled bool
logger zap.Logger
Store *Store
TSDBStore *tsdb.Store
MetaClient interface {
Database(name string) *meta.DatabaseInfo
ShardGroupsByTimeRange(database, policy string, min, max time.Time) (a []meta.ShardGroupInfo, err error)
}
}
// NewService returns a new instance of Service.
func NewService(c Config) *Service {
s := &Service{
addr: c.BindAddress,
loggingEnabled: c.LogEnabled,
logger: zap.New(zap.NullEncoder()),
}
return s
}
// WithLogger sets the logger for the service.
func (s *Service) WithLogger(log zap.Logger) {
s.logger = log.With(zap.String("service", "storage"))
}
// Open starts the service.
func (s *Service) Open() error {
s.logger.Info("Starting storage service")
store := NewStore()
store.TSDBStore = s.TSDBStore
store.MetaClient = s.MetaClient
store.Logger = s.logger
yarpc := &yarpcServer{
addr: s.addr,
loggingEnabled: s.loggingEnabled,
logger: s.logger,
store: store,
}
if err := yarpc.Open(); err != nil {
return err
}
s.yarpc = yarpc
return nil
}
func (s *Service) Close() error {
if s.yarpc != nil {
s.yarpc.Close()
s.yarpc = nil
}
return nil
}