Files
ac/src/cmd/main.go
2025-11-05 13:16:01 +08:00

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()
}