gstreamer-graphix/main.go

74 lines
1.9 KiB
Go

package main
import (
"flag"
"net"
"os"
"time"
"github.com/ilyakaznacheev/cleanenv"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/rs/zerolog/pkgerrors"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"git.entr0py.de/garionion/gstreamer-graphix/api"
"git.entr0py.de/garionion/gstreamer-graphix/gstreamer"
)
type Config struct {
Outputs []string `yaml:"outputs"`
Address string `yaml:"address" env:"ADDRESS" env-default:"localhost:3000"`
LogFile string `yaml:"logfile" env:"LOGFILE" env-default:"./gstreamer-graphix.log"`
}
var cfg = Config{
Address: "localhost:3000",
LogFile: "./gstreamer-graphix.log",
}
func main() {
zerolog.TimeFieldFormat = time.RFC1123Z
consoleWriter := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC1123Z}
log.Logger = log.Output(consoleWriter).With().Timestamp().Caller().Logger()
if err := cleanenv.ReadConfig("config.toml", &cfg); err != nil {
log.Err(err).Msg("No configfile, continuing without")
}
fset := flag.NewFlagSet("config", flag.ContinueOnError)
fset.Usage = cleanenv.FUsage(fset.Output(), &cfg, nil, fset.Usage)
if err := fset.Parse(os.Args[1:]); err != nil {
log.Fatal().Err(err).Msg("failed to parse flags")
}
if cfg.LogFile != "" {
l, _ := os.OpenFile(cfg.LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664)
multi := zerolog.MultiLevelWriter(consoleWriter, l)
log.Logger = zerolog.New(multi).With().Timestamp().Caller().Logger()
}
if log.Logger.GetLevel() == zerolog.DebugLevel {
zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack
}
log.Debug().Msgf("config: %+v", cfg)
log.Info().Msgf("listening on %s", cfg.Address)
ln, err := net.Listen("tcp", cfg.Address)
if err != nil {
log.Fatal().Err(err)
}
gst := gstreamer.Init()
pipelineService := &api.PipelineService{Gstreamer: gst}
g := grpc.NewServer()
reflection.Register(g)
api.RegisterPipelineServiceServer(g, pipelineService)
log.Fatal().Msgf("Failed to serve: %v", g.Serve(ln))
}