package main import ( "com.navi.medici.janus/config" "com.navi.medici.janus/lib" producer_client "com.navi.medici.janus/producer" "com.navi.medici.janus/server" "com.navi.medici.janus/utils" "github.com/spf13/viper" "go.uber.org/zap" "log" ) var ( port string cors string logger *zap.Logger ) const METRICS_PORT = "4000" func init() { configs := getConfigs() utils.InitializeLogger(configs.Env) logger = utils.GetLogger() port = configs.Server.Port logger.Debug("Service started on PORT: " + port) logger.Debug("Kafka Bootstrap Servers: " + configs.Kafka.Bootstrap_Servers) producer_client.InitializeProducers(configs.Kafka, configs.Env) logger.Info("Producer Initialized, starting goroutines for event processing") for i := 0; i < configs.Server.Goroutines; i++ { go lib.ProcessJsonRequestChannel(configs.Kafka.Kafka_Topic_Json) } } func getConfigs() config.Configurations { viper.SetConfigName("config") viper.AddConfigPath("./config") viper.SetConfigType("yml") viper.AutomaticEnv() var configuration config.Configurations if err := viper.ReadInConfig(); err != nil { log.Fatalln("Error reading config file, %s", err) } err := viper.Unmarshal(&configuration) if err != nil { log.Fatalln("Unable to decode into struct, %v", err) } // Following coinfigurations read from environment variables configuration.Env = viper.GetString(configuration.Env) configuration.Kafka.Bootstrap_Servers = viper.GetString(configuration.Kafka.Bootstrap_Servers) configuration.Kafka.Kafka_Topic_Json = viper.GetString(configuration.Kafka.Kafka_Topic_Json) configuration.Kafka.Kafka_Topic_Protobuf = viper.GetString(configuration.Kafka.Kafka_Topic_Protobuf) //if configuration.Env == "PROD" { configuration.Kafka.Sasl_User = viper.GetString(configuration.Kafka.Sasl_User) configuration.Kafka.Sasl_Password = viper.GetString(configuration.Kafka.Sasl_Password) //} cors = viper.GetString(configuration.Server.Cors) return configuration } func main() { logger.Debug("Serving on http://0.0.0.0:" + port) httpServer, err1 := server.NewServer(port, cors) metricsServer, err2 := server.MetricServer(METRICS_PORT) if err1 != nil { logger.Fatal("Unable to start server, %v", zap.Error(err1)) } if err2 != nil { logger.Fatal("Unable to start Metric server, %v", zap.Error(err2)) } go httpServer.HttpServer.Serve(httpServer.Listener) go metricsServer.HttpServer.Serve(metricsServer.Listener) select {} }