1
0
Fork 0
confection/manager.go

76 lines
1.0 KiB
Go
Raw Normal View History

2015-01-18 10:50:03 +00:00
package confection
import (
"flag"
"sync"
)
type (
Manager struct {
mux *sync.Mutex
conf *config
file *configFile
}
)
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")
}
func New(conf interface{}) *Manager {
mgr := &Manager{
mux: &sync.Mutex{},
conf: &config{
config: conf,
},
file: &configFile{
path: configPath,
},
}
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
func (m *Manager) bootstrap() {
if m.file.isExist() {
b, err := m.file.read()
if err != nil {
panic(err)
}
err = m.conf.load(b)
if err != nil {
panic(err)
}
} else {
b, err := m.conf.dump()
if err != nil {
panic(err)
}
err = m.file.write(b)
if err != nil {
panic(err)
}
}
}