1
0
Fork 0
confection/manager.go

87 lines
1.3 KiB
Go
Raw Permalink Normal View History

2015-01-18 10:50:03 +00:00
package confection
import (
"flag"
"sync"
)
type (
Manager struct {
2015-01-19 11:22:45 +00:00
mux *sync.Mutex
conf *config
file *configFile
unmarshaller func([]byte) interface{}
2015-01-18 10:50:03 +00:00
}
)
var (
configPath string
serverPort int
)
2015-01-18 10:55:18 +00:00
func SetupFlags() {
2015-01-18 10:50:03 +00:00
flag.StringVar(&configPath, "config", "config.json", "Path to config file")
flag.IntVar(&serverPort, "config-port", 5050, "Config manager http port")
}
2015-01-19 11:22:45 +00:00
func New(conf interface{}, unmarshaller func([]byte) interface{}) *Manager {
2015-01-18 10:50:03 +00:00
mgr := &Manager{
mux: &sync.Mutex{},
conf: &config{
config: conf,
},
file: &configFile{
path: configPath,
},
2015-01-19 11:22:45 +00:00
unmarshaller: unmarshaller,
2015-01-18 10:50:03 +00:00
}
2015-01-18 11:42:43 +00:00
mgr.bootstrap()
2015-01-18 10:50:03 +00:00
return mgr
}
2015-01-18 11:42:43 +00:00
func (m *Manager) Config() interface{} {
return m.conf.config
}
2015-01-18 10:50:03 +00:00
func (m *Manager) StartServer() {
srv := &server{
manager: m,
port: serverPort,
}
srv.start()
}
2015-01-18 11:42:43 +00:00
2015-01-25 13:07:51 +00:00
func (m *Manager) RequireConfig() {
}
2015-01-18 11:42:43 +00:00
func (m *Manager) bootstrap() {
if m.file.isExist() {
b, err := m.file.read()
if err != nil {
panic(err)
}
2015-01-19 11:22:45 +00:00
m.importJson(b)
2015-01-18 11:42:43 +00:00
} else {
2015-01-25 12:34:24 +00:00
m.dumpConfig()
2015-01-18 11:42:43 +00:00
}
}
2015-01-19 11:22:45 +00:00
func (m *Manager) importJson(b []byte) {
m.conf.config = m.unmarshaller(b)
2015-01-25 12:34:24 +00:00
m.dumpConfig()
}
func (m *Manager) dumpConfig() {
b, err := m.conf.dump()
if err != nil {
panic(err)
}
err = m.file.write(b)
if err != nil {
panic(err)
}
2015-01-19 11:22:45 +00:00
}