Private
Public Access
1
0
Files
Kordophone/main.go

84 lines
1.8 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
2024-09-06 01:09:41 -07:00
"go.buzzert.net/kordophone-mock/v2/prompt"
"go.buzzert.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()
}
2023-12-10 19:51:18 -08:00
func setupLogging(debug bool) {
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)
2023-12-10 19:51:18 -08:00
if debug {
2023-06-23 00:32:17 -07:00
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(`
_ __ _ _
2023-08-08 21:37:51 -07:00
| |/ /___ _ _ __| |___ _ __| |_ ___ _ _ ___
| ' </ _ \ '_/ _' / _ \ '_ \ ' \/ _ \ ' \/ -_)
|_|\_\___/_| \__,_\___/ .__/_||_\___/_||_\___|
|_|
`)
2023-08-08 21:37:51 -07:00
}
func main() {
2023-12-10 19:51:18 -08:00
debugLogging := flag.Bool("debug", false, "enable debug logging")
authEnabled := flag.Bool("auth", false, "enable authentication")
flag.Parse()
setupLogging(*debugLogging)
2023-08-08 21:37:51 -07:00
printWelcomeMessage()
2023-06-23 00:32:17 -07:00
c := web.MockHTTPServerConfiguration{
2023-12-10 19:51:18 -08:00
AuthEnabled: *authEnabled,
2023-06-23 00:32:17 -07:00
}
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)
}
}