DE-3247 | refactored code and added logs
This commit is contained in:
91
main.go
91
main.go
@@ -1,6 +1,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"com.navi.medici.janus/config"
|
||||
"com.navi.medici.janus/lib"
|
||||
producer_client "com.navi.medici.janus/producer"
|
||||
@@ -8,7 +14,6 @@ import (
|
||||
"com.navi.medici.janus/utils"
|
||||
"github.com/spf13/viper"
|
||||
"go.uber.org/zap"
|
||||
"log"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -24,13 +29,10 @@ func init() {
|
||||
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)
|
||||
logger.Info("Service started on PORT: " + port)
|
||||
logger.Info("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)
|
||||
}
|
||||
logger.Info("Producer Initialized")
|
||||
}
|
||||
|
||||
func getConfigs() config.Configurations {
|
||||
@@ -41,40 +43,67 @@ func getConfigs() config.Configurations {
|
||||
|
||||
var configuration config.Configurations
|
||||
if err := viper.ReadInConfig(); err != nil {
|
||||
log.Fatalln("Error reading config file, %s", err)
|
||||
log.Fatalf("Error reading config file: %s", err)
|
||||
}
|
||||
|
||||
err := viper.Unmarshal(&configuration)
|
||||
if err != nil {
|
||||
log.Fatalln("Unable to decode into struct, %v", err)
|
||||
log.Fatalf("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)
|
||||
// Read configurations from environment variables
|
||||
configuration.Env = viper.GetString("ENVIRONMENT")
|
||||
configuration.Kafka.Bootstrap_Servers = viper.GetString("BOOTSTRAP_SERVERS")
|
||||
configuration.Kafka.Kafka_Topic_Json = viper.GetString("KAFKA_TOPIC_JSON")
|
||||
configuration.Kafka.Kafka_Topic_Protobuf = viper.GetString("KAFKA_TOPIC_PROTOBUF")
|
||||
configuration.Kafka.Sasl_User = viper.GetString("KAFKA_SASL_USER")
|
||||
configuration.Kafka.Sasl_Password = viper.GetString("KAFKA_SASL_PASSWORD")
|
||||
cors = viper.GetString("CORS_LIST")
|
||||
|
||||
//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)
|
||||
defer logger.Sync()
|
||||
|
||||
select {}
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
configs := getConfigs()
|
||||
|
||||
// Initialize worker pool
|
||||
workerPool := lib.NewWorkerPool(configs.Server.Goroutines)
|
||||
workerPool.Start(ctx)
|
||||
|
||||
// Initialize HTTP server
|
||||
httpServer, err := server.NewServer(port, cors, workerPool, logger)
|
||||
if err != nil {
|
||||
logger.Fatal("Unable to create HTTP server", zap.Error(err))
|
||||
}
|
||||
|
||||
// Initialize metrics server
|
||||
metricsServer, err := server.MetricServer(METRICS_PORT, logger)
|
||||
if err != nil {
|
||||
logger.Fatal("Unable to create Metric server", zap.Error(err))
|
||||
}
|
||||
|
||||
// Start servers
|
||||
httpServer.StartServer()
|
||||
metricsServer.StartServer()
|
||||
|
||||
// Handle graceful shutdown
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
<-sigChan
|
||||
logger.Info("Shutting down servers...")
|
||||
|
||||
// Stop servers
|
||||
httpServer.StopServer()
|
||||
metricsServer.StopServer()
|
||||
|
||||
// Stop worker pool
|
||||
cancel()
|
||||
|
||||
logger.Info("Servers shut down gracefully")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user