Private
Public Access
1
0
Files
Kordophone/main.go

83 lines
1.7 KiB
Go

package main
import (
"flag"
"fmt"
"net/http"
"os"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"code.severnaya.net/kordophone-mock/v2/prompt"
"code.severnaya.net/kordophone-mock/v2/web"
)
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 printWelcomeMessage() {
// Print ascii art of "Kordophone"
fmt.Println(`
_ __ _ _
| |/ /___ _ _ __| |___ _ __| |_ ___ _ _ ___
| ' </ _ \ '_/ _' / _ \ '_ \ ' \/ _ \ ' \/ -_)
|_|\_\___/_| \__,_\___/ .__/_||_\___/_||_\___|
|_|
`)
}
func main() {
setupLogging()
printWelcomeMessage()
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(&s.Server)
// 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)
}
}