Sybren A. Stüvel ed71042073 Add MQTT Server for debugging purposes
Add an MQTT server (aka 'broker') that logs all published messages. This
is purely for debugging Flamenco Manager's events. Although it should
work fine as MQTT broker, it's not meant for production use.

Run the server with `go run ./cmd/mqtt-server`
2025-09-02 09:41:42 +02:00

85 lines
1.9 KiB
Go

package main
import (
"context"
"flag"
"log/slog"
"os"
"os/signal"
"runtime"
"syscall"
"time"
"github.com/mattn/go-colorable"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
slogzerolog "github.com/samber/slog-zerolog/v2"
"projects.blender.org/studio/flamenco/internal/appinfo"
"projects.blender.org/studio/flamenco/pkg/sysinfo"
)
func main() {
output := zerolog.ConsoleWriter{Out: colorable.NewColorableStdout(), TimeFormat: time.RFC3339}
log.Logger = log.Output(output)
osDetail, err := sysinfo.Description()
if err != nil {
osDetail = err.Error()
}
log.Info().
Str("os", runtime.GOOS).
Str("osDetail", osDetail).
Str("arch", runtime.GOARCH).
Msgf("starting %v MQTT Server", appinfo.ApplicationName)
parseCliArgs()
mainCtx, mainCtxCancel := context.WithCancel(context.Background())
defer mainCtxCancel()
// Create signals channel to run server until interrupted
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
mainCtxCancel()
}()
run_mqtt_server(mainCtx)
}
func parseCliArgs() {
var quiet, debug, trace bool
flag.BoolVar(&quiet, "quiet", false, "Only log warning-level and worse.")
flag.BoolVar(&debug, "debug", false, "Enable debug-level logging.")
flag.BoolVar(&trace, "trace", false, "Enable trace-level logging.")
flag.Parse()
var logLevel zerolog.Level
var slogLevel slog.Level
switch {
case trace:
logLevel = zerolog.TraceLevel
slogLevel = slog.LevelDebug
case debug:
logLevel = zerolog.DebugLevel
slogLevel = slog.LevelDebug
case quiet:
logLevel = zerolog.WarnLevel
slogLevel = slog.LevelWarn
default:
logLevel = zerolog.InfoLevel
slogLevel = slog.LevelInfo
}
zerolog.SetGlobalLevel(logLevel)
// Hook up slog to zerolog.
slogLogger := slog.New(slogzerolog.Option{
Level: slogLevel,
Logger: &log.Logger}.NewZerologHandler())
slog.SetDefault(slogLogger)
}