Private
Public Access
1
0
Files
Kordophone/main.go

83 lines
1.7 KiB
Go
Raw Normal View History

package main
import (
2023-06-23 00:32:17 -07:00
"flag"
2023-08-08 21:37:51 -07:00
"fmt"
2023-06-23 00:32:17 -07:00
"net/http"
"os"
2023-06-23 00:32:17 -07:00
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
2023-06-22 11:03:00 -07:00
2023-06-23 00:32:17 -07:00
"code.severnaya.net/kordophone-mock/v2/prompt"
"code.severnaya.net/kordophone-mock/v2/web"
)
2023-06-23 00:32:17 -07:00
type LoggingHook struct {
prompt *prompt.Prompt
}
func (t *LoggingHook) Run(e *zerolog.Event, level zerolog.Level, message string) {
2023-06-23 00:32:17 -07:00
t.prompt.CleanAndRefreshForLogging()
}
func setupLogging() {
2023-06-23 00:32:17 -07:00
debug := flag.Bool("debug", false, "enable debug logging")
flag.Parse()
2023-06-22 11:03:00 -07:00
2023-06-23 00:32:17 -07:00
// Pretty logging
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
2023-06-22 11:03:00 -07:00
2023-06-23 00:32:17 -07:00
// Default level for this example is info, unless debug flag is present
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if *debug {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
}
}
2023-06-22 11:03:00 -07:00
2023-08-08 21:37:51 -07:00
func printWelcomeMessage() {
// Print ascii art of "Kordophone"
fmt.Println(`
_ __ _ _
| |/ /___ _ _ __| |___ _ __| |_ ___ _ _ ___
| ' </ _ \ '_/ _' / _ \ '_ \ ' \/ _ \ ' \/ -_)
|_|\_\___/_| \__,_\___/ .__/_||_\___/_||_\___|
|_|
`)
}
func main() {
2023-06-23 00:32:17 -07:00
setupLogging()
2023-08-08 21:37:51 -07:00
printWelcomeMessage()
2023-06-23 00:32:17 -07:00
c := web.MockHTTPServerConfiguration{
AuthEnabled: false,
}
2023-06-23 00:32:17 -07:00
addr := ":5738"
s := web.NewMockHTTPServer(c)
httpServer := &http.Server{
Addr: addr,
Handler: s,
}
2023-06-23 00:32:17 -07:00
// Populate with test data
s.Server.PopulateWithTestData()
log.Info().Msgf("Generated test data. %d conversations", len(s.Server.Conversations()))
2023-06-23 00:32:17 -07:00
log.Info().Msgf("Listening on %s", addr)
go httpServer.ListenAndServe()
2023-06-23 00:32:17 -07:00
rl := prompt.NewPrompt(&s.Server)
2023-06-23 00:32:17 -07:00
// Hook logging so we can refresh the prompt when something is logged.
log.Logger = log.Logger.Hook(&LoggingHook{prompt: rl})
2023-06-23 00:32:17 -07:00
// Read indefinitely
err := rl.StartInteractive()
if err != nil {
log.Error().Err(err)
}
}