63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
httpserver "backend/internal/http_server"
|
|
"backend/internal/integrations"
|
|
"backend/pkg/logger"
|
|
"context"
|
|
"log"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/segmentio/kafka-go"
|
|
)
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
config, err := LoadConfig("config.yaml")
|
|
if err != nil {
|
|
log.Fatal(err.Error())
|
|
}
|
|
|
|
logger, err := logger.New(ctx, logger.NewLoggerOpts{
|
|
Debug: true,
|
|
OutputFile: config.App.LogFile,
|
|
})
|
|
if err != nil {
|
|
logger.Fatal().Err(err)
|
|
}
|
|
|
|
emailer, err := NewEmailer(config.SMTP)
|
|
if err != nil {
|
|
logger.Fatal().Err(err)
|
|
}
|
|
|
|
metrics := integrations.NewMetrics("notifyer")
|
|
|
|
ginRouter := gin.New()
|
|
ginRouter.GET("/metrics", gin.WrapH(metrics.HttpHandler()))
|
|
ginRouter.GET("/health", func(ctx *gin.Context) {
|
|
ctx.Status(200)
|
|
})
|
|
|
|
kafkaReader := kafka.NewReader(kafka.ReaderConfig{
|
|
Brokers: config.Kafka.Brokers,
|
|
Topic: config.Kafka.Topic,
|
|
GroupID: config.Kafka.ConsumerGroupId,
|
|
})
|
|
kafkaReader.SetOffset(kafka.LastOffset)
|
|
|
|
eventHandler := NewEventHandler(config, logger, metrics, emailer)
|
|
go eventHandler.eventLoop(ctx, kafkaReader)
|
|
|
|
logger.Log().Msg("notifyer service started")
|
|
|
|
srv := httpserver.New(
|
|
httpserver.NewServerOpts{
|
|
Logger: logger,
|
|
HttpServer: ginRouter,
|
|
},
|
|
)
|
|
srv.Run(ctx, config.App.Port)
|
|
}
|