package main import ( "fmt" "github.com/gin-gonic/gin" "io" "log" "onvif-agent/config" "onvif-agent/constant" "onvif-agent/integration/zabbixagent" "onvif-agent/router" "os" "path/filepath" "runtime" "time" ) func main() { /** * Logging */ logFile := fmt.Sprintf("%s.log", time.Now().Format("2006-01-02")) var logFilePath string if runtime.GOOS == "linux" { logFilePath = fmt.Sprintf("/var/log/%s/%s", constant.AppName, logFile) } else { logFilePath = filepath.Join("log", logFile) } f, err := os.OpenFile(logFilePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("Error opening file: %v", err) } defer f.Close() writer := io.MultiWriter(os.Stdout, f) log.SetOutput(writer) log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) /** * Load config */ if err := config.LoadConfig(); err != nil { log.Fatalf("Error loading config: %v", err) } /** * Web server */ go func() { r := gin.Default() router.SetupRoutes(r) addr := fmt.Sprintf("%s:%d", config.Config.App.Host, config.Config.App.Port) if err := r.Run(addr); err != nil { fmt.Println("Failed to start server:", err) } }() /** * Zabbix agent integration */ go func() { err = zabbixagent.Launch() if err != nil { return } panic(err) }() select {} }