dogtamer/cmd/dogtamer.go
2021-08-21 16:15:29 +02:00

102 lines
2.1 KiB
Go

package main
import (
"context"
"fmt"
"os"
"os/signal"
"github.com/urfave/cli/v2"
"github.uio.no/torjus/dogtamer"
"github.uio.no/torjus/dogtamer/server"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
const (
ExitSuccess = 0
ExitGenericError = 1
)
func main() {
cli.VersionPrinter = func(c *cli.Context) {
fmt.Println(dogtamer.GetVersion())
}
app := &cli.App{
Name: "dogtamer",
Version: dogtamer.Version,
Authors: []*cli.Author{
{
Name: "Torjus Håkestad",
Email: "torjus@usit.uio.no",
},
},
Flags: []cli.Flag{
&cli.StringFlag{
Name: "config",
Usage: "Path to config-file",
Aliases: []string{"c"},
},
},
Commands: []*cli.Command{
{
Name: "serve",
Usage: "Start dogtamer server",
Action: ActionServe,
},
},
}
err := app.Run(os.Args)
if err != nil {
fmt.Printf("Error: %s\n", err)
os.Exit(ExitGenericError)
}
}
func ActionServe(c *cli.Context) error {
ctx, cancel := context.WithCancel(context.Background())
s := server.NewRTMPServer(ctx, ":5566")
logger := setupServerLogger()
s.Logger = logger
// Listen for SIGINT
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt)
go func() {
<-sigChan
s.Logger.Info("Got shutdown signal.")
cancel()
}()
if err := s.Listen(); err != nil {
return cli.Exit(err, ExitGenericError)
}
s.Logger.Info("Server shut down.")
return nil
}
func setupServerLogger() *zap.SugaredLogger {
logEncoderConfig := zap.NewProductionEncoderConfig()
logEncoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
logEncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
logEncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
logEncoderConfig.EncodeDuration = zapcore.StringDurationEncoder
rootLoggerConfig := &zap.Config{
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
OutputPaths: []string{"stdout"},
ErrorOutputPaths: []string{"stdout"},
Encoding: "console",
EncoderConfig: logEncoderConfig,
}
rootLogger, err := rootLoggerConfig.Build()
if err != nil {
panic(err)
}
return rootLogger.Named("RTMP").WithOptions().Sugar()
}