Files
doormanserver/shared/params.go
T

101 lines
2.0 KiB
Go

package shared
import (
"io/ioutil"
"log"
"strings"
goyaml "gopkg.in/yaml.v2"
)
var PARAM_FILE string = "params.yml"
var params *Params
type MongoParams struct {
Url string `yaml:"url,omitempty"`
DatabaseName string `yaml:"database_name,omitempty"`
DoormanDefinitionCollection string `yaml:"doorman_definition_collection,omitempty"`
}
type NSQParams struct {
NSQLookupdUrl string `yaml:"nsq_lookupd_url,omitempty"`
}
type NanoMsgParams struct {
NanoMsgUrl string `yaml:"nanomsg_url,omitempty"`
}
type Params struct {
Port int `yaml:"port,omitempty"`
Host string `yaml:"host,omitempty"`
Mongo *MongoParams `yaml:"mongo,omitempty"`
NSQ *NSQParams `yaml:"nsq,omitempty"`
NanoMsg *NanoMsgParams `yaml:"nanomsg,omitempty"`
Database string `yaml:"database,omitempty"`
MessageQueue string `yaml:"message_queue,omitempty"`
}
func (p *Params) UseMongoDb() bool {
db := strings.ToLower(p.Database)
return db == "mongo" || db == "mongodb"
}
func (p *Params) UseNSQ() bool {
m := strings.ToLower(p.MessageQueue)
return m == "nsq"
}
func (p *Params) UseNanomsg() bool {
m := strings.ToLower(p.MessageQueue)
return m == "nanomsg"
}
func (p *Params) InsertDefaultValues() *Params {
if p.Host == "" {
p.Host = "localhost"
}
if p.Port == 0 {
p.Port = 1999
}
if p.Mongo == nil {
p.Mongo = new(MongoParams)
}
if p.NSQ == nil {
p.NSQ = new(NSQParams)
}
return p
}
func LoadFromYamlFile(fileName string) (*Params, error) {
if !exists(fileName) {
return new(Params).InsertDefaultValues(), nil
}
data, err := ioutil.ReadFile(fileName)
if err != nil {
return nil, err
}
return LoadFromYamlData(data)
}
func LoadFromYamlData(data []byte) (*Params, error) {
var err error
p := new(Params)
if err = goyaml.Unmarshal(data, p); err != nil {
return nil, err
}
return p.InsertDefaultValues(), nil
}
func GetParams() *Params {
return params
}
func init() {
var err error
if params, err = LoadFromYamlFile(PARAM_FILE); err != nil {
log.Panic(err)
}
}