Files
satusehat-service/cmd/worker/main.go
T
2026-04-14 01:23:34 +00:00

64 lines
1.8 KiB
Go

package main
import (
"context"
"os"
"os/signal"
"syscall"
"service/internal/infrastructure/config"
"service/internal/infrastructure/database"
satuSehatFactory "service/internal/interfaces/satusehat"
"service/internal/worker"
"service/pkg/logger"
)
func main() {
// 1. Load Configuration
cfg := config.LoadConfig()
// 2. Initialize Logger khusus untuk Worker
loggerConfig := logger.Config{
Level: cfg.Logger.Level,
Format: cfg.Logger.Format,
Output: "both",
ServiceName: "service-worker", // Penanda log khusus worker
EnableCaller: cfg.Server.Mode != "production",
Environment: cfg.Server.Mode,
}
logger.Init(loggerConfig)
logger.Default().Info("Background Worker Microservice starting...",
logger.String("environment", cfg.Server.Mode),
logger.String("log_level", cfg.Logger.Level),
)
if err := cfg.Validate(); err != nil {
logger.Default().Fatal("Config validation failed", logger.ErrorField(err))
}
// 3. Initialize Database Manager
dbService := database.New(cfg)
defer dbService.Close()
// 4. Initialize SatuSehat Client (Dibutuhkan oleh worker manager)
satusehatFact := satuSehatFactory.NewSatuSehatFactory(cfg.SatuSehat)
satusehatClient := satusehatFact.Client()
// 5. Setup Context untuk Graceful Shutdown
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// 6. Initialize dan Jalankan Worker Manager
workerManager := worker.NewManager(cfg, dbService, satusehatClient)
workerManager.Start(ctx)
// 7. Listener untuk OS Signals (Ctrl+C / SIGTERM)
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit // Block aplikasi sampai signal diterima
logger.Default().Warn("Signal received, shutting down worker service...")
cancel() // Batalkan context, trigger penghentian semua worker
}