go-tools/cmd/mercury/main.go

55 lines
1.1 KiB
Go

package main
import (
"context"
"errors"
"log"
"log/slog"
"net/http"
"os"
"os/signal"
"strconv"
"go.sour.is/pkg/env"
"go.sour.is/pkg/lg"
"go.sour.is/pkg/service"
)
var apps service.Apps
var appName, version = service.AppName()
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
go func() {
<-ctx.Done()
defer cancel() // restore interrupt function
}()
if err := run(ctx); err != nil {
log.Fatal(err)
os.Exit(1)
}
os.Exit(0)
}
func run(ctx context.Context) error {
level := slog.LevelError
if ok, _ := strconv.ParseBool(env.Default("LOG_DEBUG", "TRUE")); ok {
level = slog.LevelDebug
}
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level})))
svc := &service.Harness{}
os.Setenv("TRACE_ENDPOINT", "atombox:4318")
os.Setenv("EV_TRACE_SAMPLE", "always")
ctx, stop := lg.Init(ctx, appName+"-mercury")
svc.OnStop(stop)
svc.Add(lg.NewHTTP(ctx))
svc.Setup(ctx, apps.Apps()...)
// Run application
if err := svc.Run(ctx, appName+"-mercury", version); err != nil && !errors.Is(err, http.ErrServerClosed) {
return err
}
return nil
}