Files
galaxy-game/authsession/cmd/authsession/main.go
T
2026-04-08 16:23:07 +02:00

73 lines
1.7 KiB
Go

package main
import (
"context"
"errors"
"fmt"
"os"
"os/signal"
"syscall"
"galaxy/authsession/internal/app"
"galaxy/authsession/internal/config"
"galaxy/authsession/internal/logging"
"galaxy/authsession/internal/telemetry"
)
func main() {
if err := run(); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "authsession: %v\n", err)
os.Exit(1)
}
}
func run() error {
cfg, err := config.LoadFromEnv()
if err != nil {
return err
}
logger, err := logging.New(cfg.Logging.Level)
if err != nil {
return fmt.Errorf("build logger: %w", err)
}
defer func() {
_ = logging.Sync(logger)
}()
rootCtx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
telemetryRuntime, err := telemetry.NewProcess(rootCtx, telemetry.ProcessConfig{
ServiceName: cfg.Telemetry.ServiceName,
TracesExporter: cfg.Telemetry.TracesExporter,
MetricsExporter: cfg.Telemetry.MetricsExporter,
TracesProtocol: cfg.Telemetry.TracesProtocol,
MetricsProtocol: cfg.Telemetry.MetricsProtocol,
StdoutTracesEnabled: cfg.Telemetry.StdoutTracesEnabled,
StdoutMetricsEnabled: cfg.Telemetry.StdoutMetricsEnabled,
}, logger)
if err != nil {
return fmt.Errorf("build telemetry runtime: %w", err)
}
defer func() {
shutdownCtx, cancel := context.WithTimeout(context.Background(), cfg.ShutdownTimeout)
defer cancel()
_ = telemetryRuntime.Shutdown(shutdownCtx)
}()
runtime, err := app.NewRuntime(rootCtx, cfg, logger, telemetryRuntime)
if err != nil {
return err
}
defer func() {
_ = runtime.Close()
}()
if err := runtime.App.Run(rootCtx); err != nil && !errors.Is(err, context.Canceled) {
return err
}
return nil
}