environment/env.go (179 lines of code) (raw):

// Copyright (c) 2016 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. package environment import ( "fmt" "os" "strconv" ) const ( // Localhost default localhost Localhost = "127.0.0.1" // CassandraSeeds env CassandraSeeds = "CASSANDRA_SEEDS" // CassandraPort env CassandraPort = "CASSANDRA_DB_PORT" // CassandraDefaultPort Cassandra default port CassandraDefaultPort = "9042" // CassandraUsername env CassandraUsername = "CASSANDRA_DB_USERNAME" // CassandraDefaultUsername Cassandra default username CassandraDefaultUsername = "" // CassandraPassword env CassandraPassword = "CASSANDRA_DB_PASSWORD" // CassandraDefaultPassword Cassandra default password CassandraDefaultPassword = "" // CassandraAllowedAuthenticators env CassandraAllowedAuthenticators = "CASSANDRA_DB_ALLOWED_AUTHENTICATORS" // CassandraProtoVersion env CassandraProtoVersion = "CASSANDRA_PROTO_VERSION" // CassandraDefaultProtoVersion Cassandra default protocol version CassandraDefaultProtoVersion = "4" // CassandraDefaultProtoVersionInteger Cassandra default protocol version int version CassandraDefaultProtoVersionInteger = 4 // MySQLSeeds env MySQLSeeds = "MYSQL_SEEDS" // MySQLPort env MySQLPort = "MYSQL_PORT" // MySQLDefaultPort is MySQL default port MySQLDefaultPort = "3306" // MySQLUser env MySQLUser = "MYSQL_USER" // MySQLDefaultUser is default user MySQLDefaultUser = "root" // MySQLPassword env MySQLPassword = "MYSQL_PASSWORD" // MySQLDefaultPassword is default password MySQLDefaultPassword = "cadence" // MongoSeeds env MongoSeeds = "MONGO_SEEDS" // MongoPort env MongoPort = "MONGO_PORT" // MongoDefaultPort is Mongo default port MongoDefaultPort = "27017" // KafkaSeeds env KafkaSeeds = "KAFKA_SEEDS" // KafkaPort env KafkaPort = "KAFKA_PORT" // KafkaDefaultPort Kafka default port KafkaDefaultPort = "9092" // ESSeeds env ESSeeds = "ES_SEEDS" // ESPort env ESPort = "ES_PORT" // ESDefaultPort ES default port ESDefaultPort = "9200" // ESVersion is the ElasticSearch version ESVersion = "ES_VERSION" // ESDefaultVersion is the default version ESDefaultVersion = "v6" // PostgresSeeds env PostgresSeeds = "POSTGRES_SEEDS" // PostgresPort env PostgresPort = "POSTGRES_PORT" // PostgresDefaultPort Postgres default port PostgresDefaultPort = "5432" // CLITransportProtocol env CLITransportProtocol = "CADENCE_CLI_TRANSPORT_PROTOCOL" // DefaultCLITransportProtocol CLI default channel DefaultCLITransportProtocol = "tchannel" ) var envDefaults = map[string]string{ CassandraSeeds: Localhost, CassandraPort: CassandraDefaultPort, CassandraProtoVersion: CassandraDefaultProtoVersion, MySQLSeeds: Localhost, MySQLPort: MySQLDefaultPort, PostgresSeeds: Localhost, PostgresPort: PostgresDefaultPort, KafkaSeeds: Localhost, KafkaPort: KafkaDefaultPort, ESSeeds: Localhost, ESPort: ESDefaultPort, CLITransportProtocol: DefaultCLITransportProtocol, } // SetupEnv setup the necessary env func SetupEnv() error { for k, v := range envDefaults { if os.Getenv(k) == "" { if err := setEnv(k, v); err != nil { return err } } } return nil } // GetCassandraAddress return the cassandra address func GetCassandraAddress() string { if addr := os.Getenv(CassandraSeeds); addr != "" { return addr } return envDefaults[CassandraSeeds] } // GetCassandraPort return the cassandra port func GetCassandraPort() (int, error) { port := os.Getenv(CassandraPort) if port == "" { port = envDefaults[CassandraPort] } return strconv.Atoi(port) } // GetCassandraUsername return the cassandra username func GetCassandraUsername() string { user := os.Getenv(CassandraUsername) if user != "" { return user } return CassandraDefaultUsername } // GetCassandraPassword return the cassandra password func GetCassandraPassword() string { pass := os.Getenv(CassandraPassword) if pass != "" { return pass } return CassandraDefaultPassword } // GetCassandraAllowedAuthenticators return the cassandra allowed authenticators func GetCassandraAllowedAuthenticators() []string { var authenticators []string configuredAuthenticators := os.Getenv(CassandraAllowedAuthenticators) if configuredAuthenticators == "" { return authenticators } authenticators = append(authenticators, configuredAuthenticators) return authenticators } // GetCassandraProtoVersion return the cassandra protocol version func GetCassandraProtoVersion() (int, error) { protoVersion := os.Getenv(CassandraProtoVersion) if protoVersion == "" { protoVersion = envDefaults[CassandraProtoVersion] } return strconv.Atoi(protoVersion) } // GetMySQLAddress return the MySQL address func GetMySQLAddress() string { addr := os.Getenv(MySQLSeeds) if addr == "" { addr = Localhost } return addr } // GetMySQLPort return the MySQL port func GetMySQLPort() (int, error) { port := os.Getenv(MySQLPort) if port == "" { port = MySQLDefaultPort } return strconv.Atoi(port) } // GetMySQLUser return the MySQL user func GetMySQLUser() string { user := os.Getenv(MySQLUser) if user == "" { user = MySQLDefaultUser } return user } // GetMySQLPassword return the MySQL password func GetMySQLPassword() string { pw := os.Getenv(MySQLPassword) if pw == "" { pw = MySQLDefaultPassword } return pw } // GetPostgresAddress return the Postgres address func GetPostgresAddress() string { addr := os.Getenv(PostgresSeeds) if addr == "" { addr = Localhost } return addr } // GetPostgresPort return the Postgres port func GetPostgresPort() (int, error) { port := os.Getenv(PostgresPort) if port == "" { port = PostgresDefaultPort } return strconv.Atoi(port) } // GetESVersion return the ElasticSearch version func GetESVersion() string { version := os.Getenv(ESVersion) if version == "" { version = ESDefaultVersion } return version } // GetMongoAddress return the MySQL address func GetMongoAddress() string { addr := os.Getenv(MongoSeeds) if addr == "" { addr = Localhost } return addr } // GetMongoPort return the MySQL port func GetMongoPort() (int, error) { port := os.Getenv(MongoPort) if port == "" { port = MongoDefaultPort } return strconv.Atoi(port) } func setEnv(key string, val string) error { if err := os.Setenv(key, val); err != nil { return fmt.Errorf("setting env %q: %w", key, err) } return nil }