forked from apache/dubbo-go
/
config.go
109 lines (93 loc) · 2.84 KB
/
config.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
package main
import (
"fmt"
"io/ioutil"
"os"
"path"
"time"
)
import (
"github.com/AlexStocks/goext/log"
log "github.com/AlexStocks/log4go"
"github.com/dubbo/dubbo-go/registry"
jerrors "github.com/juju/errors"
yaml "gopkg.in/yaml.v2"
)
const (
APP_CONF_FILE string = "APP_CONF_FILE"
APP_LOG_CONF_FILE string = "APP_LOG_CONF_FILE"
)
var (
conf *ServerConfig
)
type (
ServerConfig struct {
// pprof
Pprof_Enabled bool `default:"false" yaml:"pprof_enabled" json:"pprof_enabled,omitempty"`
Pprof_Port int `default:"10086" yaml:"pprof_port" json:"pprof_port,omitempty"`
// transport & registry
Transport string `default:"http" yaml:"transport" json:"transport,omitempty"`
NetTimeout string `default:"100ms" yaml:"net_timeout" json:"net_timeout,omitempty"` // in ms
netTimeout time.Duration
// application
Application_Config registry.ApplicationConfig `yaml:"application_config" json:"application_config,omitempty"`
// Registry_Address string `default:"192.168.35.3:2181"`
Registry_Config registry.RegistryConfig `yaml:"registry_config" json:"registry_config,omitempty"`
Service_List []registry.ServiceConfig `yaml:"service_list" json:"service_list,omitempty"`
Server_List []registry.ServerConfig `yaml:"server_list" json:"server_list,omitempty"`
}
)
func initServerConf() *ServerConfig {
var (
err error
confFile string
)
confFile = os.Getenv(APP_CONF_FILE)
if confFile == "" {
panic(fmt.Sprintf("application configure file name is nil"))
return nil
}
if path.Ext(confFile) != ".yml" {
panic(fmt.Sprintf("application configure file name{%v} suffix must be .yml", confFile))
return nil
}
conf = &ServerConfig{}
confFileStream, err := ioutil.ReadFile(confFile)
if err != nil {
panic(fmt.Sprintf("ioutil.ReadFile(file:%s) = error:%s", confFile, jerrors.ErrorStack(err)))
return nil
}
err = yaml.Unmarshal(confFileStream, conf)
if err != nil {
panic(fmt.Sprintf("yaml.Unmarshal() = error:%s", jerrors.ErrorStack(err)))
return nil
}
if conf.netTimeout, err = time.ParseDuration(conf.NetTimeout); err != nil {
panic(fmt.Sprintf("time.ParseDuration(NetTimeout:%#v) = error:%s", conf.NetTimeout, err))
return nil
}
if conf.Registry_Config.Timeout, err = time.ParseDuration(conf.Registry_Config.TimeoutStr); err != nil {
panic(fmt.Sprintf("time.ParseDuration(Registry_Config.Timeout:%#v) = error:%s",
conf.Registry_Config.TimeoutStr, err))
return nil
}
gxlog.CInfo("config{%#v}\n", conf)
return conf
}
func configInit() error {
var (
confFile string
)
initServerConf()
confFile = os.Getenv(APP_LOG_CONF_FILE)
if confFile == "" {
panic(fmt.Sprintf("log configure file name is nil"))
return nil
}
if path.Ext(confFile) != ".xml" {
panic(fmt.Sprintf("log configure file name{%v} suffix must be .xml", confFile))
return nil
}
log.LoadConfiguration(confFile)
return nil
}