package main import ( "database/sql" "io" "os" "time" . "screenmark/screenmark/.gen/haystack/haystack/table" "github.com/charmbracelet/log" "github.com/google/uuid" "github.com/muesli/termenv" ) type DatabaseWriter struct { dbPool *sql.DB imageId uuid.UUID } func (w *DatabaseWriter) Write(p []byte) (n int, err error) { if len(p) == 0 { return 0, nil } insertLogStmt := Logs. INSERT(Logs.Log, Logs.ImageID). VALUES(string(p), w.imageId) _, err = insertLogStmt.Exec(w.dbPool) if err != nil { return 0, err } else { return len(p), nil } } func newDatabaseWriter(dbPool *sql.DB, imageId uuid.UUID) *DatabaseWriter { io.MultiWriter() return &DatabaseWriter{ dbPool: dbPool, imageId: imageId, } } func createDbStdoutWriter(dbPool *sql.DB, imageId uuid.UUID) io.Writer { dbWriter := newDatabaseWriter(dbPool, imageId) return io.MultiWriter(os.Stdout, dbWriter) } func createLogger(prefix string, writer io.Writer) *log.Logger { logger := log.NewWithOptions(writer, log.Options{ ReportTimestamp: true, TimeFormat: time.Kitchen, Prefix: prefix, Formatter: log.TextFormatter, }) logger.SetColorProfile(termenv.TrueColor) logger.SetLevel(log.DebugLevel) return logger }