package process import ( "context" "fmt" "github.com/k0kubun/pp" "github.com/mattn/go-isatty" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "github.com/spf13/viper" "os" "time" ) // CLIEntry is the main entrypoint func CLIEntry(version string, buildarch string) int { hp := new(HistoryPoster) hp.version = version hp.buildarch = buildarch hp.startup = time.Now() c := make(chan os.Signal, 1) signal.Notify(hp.shutdownChannel, os.Interrupt) hp.configure() hp.setupLogging() hp.setupDatabase() ctx, cancel := context.WithCancel(context.Background()) go func() { sig := <-c log.Info().Msgf("signal received: %+v", sig) // FIXME this might need to be scoped to a specific signal cancel() }() return hp.runForever(ctx) } type HistoryPoster struct { version string buildarch string startup time.Time } func (hp *HistoryPoster) runForever(ctx context.Context) int { } func (hp *HistoryPoster) setupLogging() { log.Logger = log.With().Caller().Logger() tty := isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd()) if tty { out := zerolog.NewConsoleWriter( func(w *zerolog.ConsoleWriter) { // Customize time format w.TimeFormat = time.RFC3339 }, ) log.Logger = log.Output(out) } // always log in UTC zerolog.TimestampFunc = func() time.Time { return time.Now().UTC() } zerolog.SetGlobalLevel(zerolog.InfoLevel) if viper.GetBool("debug") { zerolog.SetGlobalLevel(zerolog.DebugLevel) } hp.identify() } func (hp *HistoryPoster) identify() { log.Info(). Str("version", hp.version). Str("buildarch", hp.buildarch). Msg("starting") }