package server import ( "fmt" "net" "os" "time" cnf "git.pbiernat.io/egommerce/go-api-pkg/config" ) const ( defName = "basket-svc" defDomain = "basket-svc" defCacheAddr = "egommerce.local:6379" defCachePassword = "12345678" defDbURL = "postgres://postgres:12345678@db-postgres:5432/egommerce" defEventBusURL = "amqp://guest:guest@api-eventbus:5672" defKVNmspc = "dev.egommerce/service/basket" defLoggerAddr = "api-logger:24224" defNetAddr = ":443" defMongoDbURL = "mongodb://mongodb:12345678@mongo-db:27017" defPathPrefix = "/basket" defRegistryAddr = "api-registry:8500" defEbEventsExchange = "api-events" defEbEventsQueue = "basket-svc" ) type Config struct { ID string Name string Domain string NetAddr string RegistryDomainOverIP string PathPrefix string IdleTimeout time.Duration // miliseconds ReadTimeout time.Duration // miliseconds WriteTimeout time.Duration // miliseconds LoggerAddr string `json:"logger_addr"` DbURL string `json:"db_url"` CacheAddr string `json:"cache_addr"` CachePassword string `json:"cache_password"` MongoDbUrl string `json:"mongodb_url"` EventBusURL string `json:"eventbus_url"` EventBusExchange string `json:"eventbus_exchange"` EventBusQueue string `json:"eventbus_queue"` KVNamespace string RegistryAddr string // Fields with JSON mappings are available through Consul KV storage } func NewConfig(name string) *Config { c := new(Config) c.ID, _ = os.Hostname() c.Name = name c.Domain = cnf.GetEnv("APP_DOMAIN", defDomain) c.NetAddr = cnf.GetEnv("SERVER_ADDR", defNetAddr) c.RegistryDomainOverIP = cnf.GetEnv("REGISTRY_USE_DOMAIN_OVER_IP", "false") c.PathPrefix = cnf.GetEnv("APP_PATH_PREFIX", defPathPrefix) c.CacheAddr = cnf.GetEnv("CACHE_ADDR", defCacheAddr) c.CachePassword = cnf.GetEnv("CACHE_PASSWORD", defCachePassword) c.DbURL = cnf.GetEnv("DATABASE_URL", defDbURL) c.EventBusExchange = defEbEventsExchange c.EventBusURL = cnf.GetEnv("EVENTBUS_URL", defEventBusURL) c.KVNamespace = cnf.GetEnv("APP_KV_NAMESPACE", defKVNmspc) c.LoggerAddr = cnf.GetEnv("LOGGER_ADDR", defLoggerAddr) c.RegistryAddr = cnf.GetEnv("REGISTRY_ADDR", defRegistryAddr) return c } func (c *Config) GetAppFullName() string { return fmt.Sprintf("%s_%s", c.Name, c.ID) } func (c *Config) GetIP() string { host, _ := os.Hostname() ips, _ := net.LookupIP(host) // for _, ip := range ips { // return ip.String() // } return ips[0].String() } func (c *Config) GetArray() map[string]string { // FIXME fix types etc arr := make(map[string]string) arr["id"] = c.ID arr["name"] = c.Name arr["appFullname"] = c.GetAppFullName() arr["domain"] = c.Domain arr["ip"] = c.GetIP() arr["netAddr"] = c.NetAddr arr["registryDomainOverIP"] = c.RegistryDomainOverIP arr["pathPrefix"] = c.PathPrefix arr["cacheAddr"] = c.CacheAddr arr["cachePassword"] = c.CachePassword arr["dbURL"] = c.DbURL arr["eventBusExchange"] = c.EventBusExchange arr["eventBusURL"] = c.EventBusURL arr["kvNamespace"] = c.KVNamespace arr["loggerAddr"] = c.LoggerAddr arr["registryAddr"] = c.RegistryAddr return arr }