Private
Public Access
1
0
Files
Kordophone/main.go

69 lines
1.5 KiB
Go

package main
import (
"os"
"flag"
"net/http"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"code.severnaya.net/kordophone-mock/v2/web"
"code.severnaya.net/kordophone-mock/v2/prompt"
)
type LoggingHook struct{
prompt *prompt.Prompt
}
func (t *LoggingHook) Run(e *zerolog.Event, level zerolog.Level, message string) {
t.prompt.CleanAndRefreshForLogging()
}
func setupLogging() {
debug := flag.Bool("debug", false, "enable debug logging")
flag.Parse()
// Pretty logging
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
// Default level for this example is info, unless debug flag is present
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if *debug {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
}
}
func main() {
setupLogging()
c := web.MockHTTPServerConfiguration{
AuthEnabled: false,
}
addr := ":5738"
s := web.NewMockHTTPServer(c)
httpServer := &http.Server{
Addr: addr,
Handler: s,
}
// Populate with test data
s.Server.PopulateWithTestData()
log.Info().Msgf("Generated test data. %d conversations", len(s.Server.Conversations()))
log.Info().Msgf("Listening on %s", addr)
go httpServer.ListenAndServe()
rl := prompt.NewPrompt()
// Hook logging so we can refresh the prompt when something is logged.
log.Logger = log.Logger.Hook(&LoggingHook{prompt: rl})
// Read indefinitely
err := rl.StartInteractive()
if err != nil {
log.Error().Err(err)
}
}