-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinitialize.go
122 lines (102 loc) · 2.95 KB
/
initialize.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
117
118
119
120
121
122
package thor
import (
"log"
"os"
"time"
"github.com/go-board/x-go/metadata"
"gopkg.in/yaml.v2"
"github.com/go-board/thor/pkg/logger"
"github.com/go-board/thor/pkg/metric"
"github.com/go-board/thor/pkg/trace"
)
// Options is the thor application global configuration.
type Options struct {
Namespace string `yaml:"namespace"`
ServiceName string `yaml:"service_name"`
ServiceID string `yaml:"service_id"`
ServiceVersion string `yaml:"service_version"`
Metadata metadata.Metadata `yaml:"metadata"`
Listeners []ListenerOption `yaml:"listeners"`
Logger LoggerOption `yaml:"logger"`
Trace TraceOption `yaml:"trace"`
Registry RegistryOption `yaml:"registry"`
Resilience ResilienceOption `yaml:"resilience"`
}
type ListenerOption struct {
Type ListenerType `yaml:"listener_type"`
NetType string `yaml:"listener_net_type"`
Addr string `yaml:"listener_addr"`
}
type ListenerType int
func (l ListenerType) String() string {
switch l {
case ListenerTypeGRPC:
return "GRPC"
case ListenerTypeHTTP:
return "HTTP"
default:
return "TCP"
}
}
const (
ListenerTypeTcp ListenerType = iota
ListenerTypeGRPC
ListenerTypeHTTP
)
type RegistryOption struct {
RegistryType string `yaml:"registry_type"`
RegistryAddr string `yaml:"registry_addr"`
RegistryTTL time.Duration `yaml:"registry_ttl"`
}
type RegistryType int
func (r RegistryType) String() string {
switch r {
case RegistryTypeEtcd:
return "etcd"
case RegistryTypeConsul:
return "consul"
case RegistryTypeK8s:
return "k8s"
case RegistryMdns:
return "mdns"
}
return ""
}
const (
RegistryTypeEtcd RegistryType = iota
RegistryTypeConsul
RegistryTypeK8s
RegistryMdns
)
type ResilienceOption struct {
RetryOnIdempotent bool `yaml:"retry_on_idempotent"`
}
type LoggerOption struct {
Dir string `yaml:"log_dir"`
LevelFilter string `yaml:"log_level_filter"`
}
type TraceOption struct {
TraceSampleType string `yaml:"trace_sample_type"`
TraceSampleParam float64 `yaml:"trace_sample_param"`
}
var globalOptions = new(Options)
func OptionReader() Options { return *globalOptions }
// Initialize create the whole world of the current application.
func Initialize(options ...Option) {
f, err := os.Open("env")
if err != nil {
if !os.IsNotExist(err) {
log.Fatalf("env file exist, but open failed, %s\n", err)
}
}
err = yaml.NewDecoder(f).Decode(globalOptions)
if err != nil {
log.Fatalf("parse env file failed, %s\n", err)
}
for _, option := range options {
option(globalOptions)
}
logger.Initialize(globalOptions.Logger.Dir, globalOptions.Namespace, globalOptions.ServiceName, globalOptions.ServiceID)
trace.Initialize(globalOptions.ServiceName, globalOptions.Trace.TraceSampleType, globalOptions.Trace.TraceSampleParam)
metric.Initialize(globalOptions.Namespace, globalOptions.ServiceName, globalOptions.ServiceID, globalOptions.ServiceVersion)
}