Files
AIRouter/cmd/gateway/main.go
T
freedakgmail 93a469061d
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
CI / security-scan (push) Has been cancelled
初始提交:边缘AI算力机统一AI通讯层
2026-08-03 07:44:05 +08:00

65 lines
1.7 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"os/signal"
"syscall"
"github.com/edgeai/gateway/internal/config"
"github.com/edgeai/gateway/internal/observability"
"github.com/edgeai/gateway/internal/server"
)
func main() {
configPath := flag.String("config", config.ConfigPath(), "path to config file")
flag.Parse()
// Load configuration
cfg, err := config.Load(*configPath)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to load config from %s: %v\n", *configPath, err)
os.Exit(1)
}
// Initialize logger
observability.SetLogLevel(cfg.Observability.LogLevel)
logger := observability.GetLogger()
logger.Info("edge ai gateway starting", observability.F().
Event("startup").
Set("config_path", *configPath).
Set("server_port", cfg.Server.Port))
// Create HTTP server
srv, err := server.New(cfg, logger)
if err != nil {
logger.Error("failed to create server", observability.F().Event("startup_error").Reason(err.Error()))
os.Exit(1)
}
// Start server in background
go func() {
if err := srv.Start(); err != nil {
logger.Error("server error", observability.F().Event("server_error").Reason(err.Error()))
}
}()
logger.Info("server listening", observability.F().
Event("listening").
Set("host", cfg.Server.Host).
Set("port", cfg.Server.Port))
// Wait for shutdown signal
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigCh
logger.Info("received shutdown signal", observability.F().Event("shutdown").Set("signal", sig.String()))
// Graceful shutdown
if err := srv.Shutdown(); err != nil {
logger.Error("shutdown error", observability.F().Event("shutdown_error").Reason(err.Error()))
}
logger.Info("server stopped", observability.F().Event("stopped"))
}