-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.go
116 lines (98 loc) · 4.33 KB
/
server.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import (
log "github.com/jeanphorn/log4go"
"github.com/nikita-tomilov/gotsdb/services"
"github.com/nikita-tomilov/gotsdb/services/cluster"
"github.com/nikita-tomilov/gotsdb/services/servers"
"github.com/nikita-tomilov/gotsdb/services/storage"
"github.com/nikita-tomilov/gotsdb/services/storage/kvs"
"github.com/nikita-tomilov/gotsdb/services/storage/tss"
"github.com/nikita-tomilov/summer/summer"
"os"
)
const defaultLogSettingsFile = "./config/log4go.json"
const defaultPropertiesFile = "./config/app.properties"
const propertiesOverrideEnvironmentVariable = "GOTSDB_PROPERTY_FILE"
const logSettingsOverrideEnvironmentVariable = "GOTSDB_LOG_SETTINGS_FILE"
const kvsStorageBeanName = "KeyValueStorage"
const kvsStorageBeanType = "*kvs.KeyValueStorage"
const tssStorageBeanName = "TimeSeriesStorage"
const tssStorageBeanType = "*tss.TimeSeriesStorage"
const applicationBeanName = "Application"
const grpcUserServerBeanName = "GrpcUserServer"
const grpcClusterServerBeanName = "GrpcClusterServer"
const clusterManagerBeanName = "ClusterManager"
const storageManagerBeanName = "StorageManager"
const kvsEnginePropertyKey = "kvs.engine"
const kvsEnginePropertyFileValue = "file"
const kvsEnginePropertyInMemValue = "inmem"
const tssEnginePropertyKey = "tss.engine"
const tssEnginePropertyCSVValue = "csv"
const tssEnginePropertyBCSVValue = "bcsv"
const tssEnginePropertyInMemValue = "inmem"
const tssEnginePropertyLSMValue = "lsm"
const tssEnginePropertySQLiteValue = "sqlite"
const tssEnginePropertyQLValue = "ql"
const tssEnginePropertyBboltValue = "bbolt"
const serverModePropertyKey = "server.mode"
const serverModePropertyClusterValue = "cluster"
func setupDI() {
propertiesOverride, propertiesOverridePresent:= os.LookupEnv(propertiesOverrideEnvironmentVariable)
if propertiesOverridePresent {
summer.ParseProperties(propertiesOverride)
} else {
summer.ParseProperties(defaultPropertiesFile)
}
summer.RegisterBean(applicationBeanName, services.Application{})
summer.RegisterBean(grpcUserServerBeanName, servers.GrpcUserServer{})
mode, _ := summer.GetPropertyValue(serverModePropertyKey)
if mode == serverModePropertyClusterValue {
summer.RegisterBean(grpcClusterServerBeanName, cluster.GrpcClusterServer{})
summer.RegisterBean(clusterManagerBeanName, cluster.Manager{})
summer.RegisterBean(storageManagerBeanName, cluster.ClusteredStorageManager{})
} else {
summer.RegisterBean(storageManagerBeanName, storage.SingleNodeStorageManager{})
}
kvsEngine, _ := summer.GetPropertyValue(kvsEnginePropertyKey)
switch kvsEngine {
case kvsEnginePropertyFileValue:
summer.RegisterBeanWithTypeAlias(kvsStorageBeanName, kvs.FileKVS{}, kvsStorageBeanType)
case kvsEnginePropertyInMemValue:
summer.RegisterBeanWithTypeAlias(kvsStorageBeanName, kvs.InMemKVS{}, kvsStorageBeanType)
default:
panic("unrecognized kv storage engine '" + kvsEngine + "'; exiting")
}
tssEngine, _ := summer.GetPropertyValue(tssEnginePropertyKey)
switch tssEngine {
case tssEnginePropertyInMemValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.InMemTSS{}, tssStorageBeanType)
case tssEnginePropertyCSVValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.CSVTSS{}, tssStorageBeanType)
case tssEnginePropertyBCSVValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.BCSVTSS{}, tssStorageBeanType)
case tssEnginePropertyLSMValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.LSMTSS{}, tssStorageBeanType)
case tssEnginePropertySQLiteValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.SqliteTSS{}, tssStorageBeanType)
case tssEnginePropertyQLValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.QlBasedPersistentTSS{}, tssStorageBeanType)
case tssEnginePropertyBboltValue:
summer.RegisterBeanWithTypeAlias(tssStorageBeanName, tss.BboltTSS{}, tssStorageBeanType)
default:
panic("unrecognized ts storage engine '" + tssEngine + "'; exiting")
}
summer.PerformDependencyInjection()
summer.PrintDependencyGraphVertex()
}
func main() {
logSettingsFile := defaultLogSettingsFile
logSettingsOverride, logSettingsOverridePresent:= os.LookupEnv(logSettingsOverrideEnvironmentVariable)
if logSettingsOverridePresent {
logSettingsFile = logSettingsOverride
}
log.LoadConfiguration(logSettingsFile)
defer log.Close()
setupDI()
app := (*summer.GetBean("Application")).(*services.Application)
app.Startup()
}