50 lines
999 B
Go
50 lines
999 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/signal"
|
|
"runtime/debug"
|
|
"syscall"
|
|
|
|
"ac/internal/logger"
|
|
"ac/internal/version"
|
|
"ac/pkg/factory"
|
|
"ac/pkg/service"
|
|
)
|
|
|
|
func main() {
|
|
defer func() {
|
|
if p := recover(); p != nil {
|
|
// Print stack for panic to log. Fatalf() will let program exit.
|
|
logger.MainLog.Fatalf("panic: %v\n%s", p, string(debug.Stack()))
|
|
}
|
|
}()
|
|
|
|
logger.MainLog.Infoln("AC version: ", version.GetVersionAndHash())
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
|
|
|
|
go func() {
|
|
<-sigCh // Wait for interrupt signal to gracefully shutdown
|
|
cancel() // Notify each goroutine and wait them stopped
|
|
}()
|
|
|
|
cfg, err := factory.ReadConfig()
|
|
if err != nil {
|
|
logger.MainLog.Errorf("AC Run error: %v\n", err)
|
|
return
|
|
}
|
|
factory.AcConfig = cfg
|
|
|
|
ac, err := service.NewApp(ctx, cfg)
|
|
if err != nil {
|
|
logger.MainLog.Errorf("AC Run error: %v\n", err)
|
|
return
|
|
}
|
|
|
|
ac.Start()
|
|
}
|