From 7d4efdf72911301fa3abe3e27cf9ebc159233222 Mon Sep 17 00:00:00 2001 From: garethgeorge Date: Sun, 12 Nov 2023 01:02:16 -0800 Subject: [PATCH] chore: add colored logging output in debug mode --- cmd/resticui/resticui.go | 35 +++++++++++++++++++++++++++++++++-- go.mod | 2 ++ go.sum | 7 +++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/cmd/resticui/resticui.go b/cmd/resticui/resticui.go index 7b6fd4fe..7b3b3928 100644 --- a/cmd/resticui/resticui.go +++ b/cmd/resticui/resticui.go @@ -3,9 +3,11 @@ package main import ( "context" "errors" + "io/fs" "net/http" "os" "os/signal" + "path" "sync" "syscall" @@ -13,7 +15,9 @@ import ( "github.com/garethgeorge/resticui/internal/config" "github.com/garethgeorge/resticui/internal/orchestrator" static "github.com/garethgeorge/resticui/webui" + "github.com/mattn/go-colorable" "go.uber.org/zap" + "go.uber.org/zap/zapcore" _ "embed" ) @@ -31,7 +35,7 @@ func main() { // Configure the HTTP mux mux := http.NewServeMux() - mux.Handle("/", http.FileServer(http.FS(static.FS))) + mux.Handle("/", http.FileServer(http.FS(&SubdirFilesystem{FS: static.FS, subdir: "dist"}))) server := &http.Server{ Addr: ":9090", @@ -73,7 +77,14 @@ func main() { func init() { zap.ReplaceGlobals(zap.Must(zap.NewProduction())) if os.Getenv("DEBUG") != "" { - zap.ReplaceGlobals(zap.Must(zap.NewDevelopmentConfig().Build())) + c := zap.NewDevelopmentEncoderConfig() + c.EncodeLevel = zapcore.CapitalColorLevelEncoder + l := zap.New(zapcore.NewCore( + zapcore.NewConsoleEncoder(c), + zapcore.AddSync(colorable.NewColorableStdout()), + zapcore.DebugLevel, + )) + zap.ReplaceGlobals(l) } } @@ -82,4 +93,24 @@ func onterm(callback func()) { signal.Notify(sigchan, os.Interrupt, syscall.SIGTERM) <-sigchan callback() +} + +type SubdirFilesystem struct { + fs.FS + subdir string +} + +var _ fs.FS = &SubdirFilesystem{} +var _ fs.ReadDirFS = &SubdirFilesystem{} + +func (s *SubdirFilesystem) Open(name string) (fs.File, error) { + return s.FS.Open(path.Join(s.subdir, name)) +} + +func (s *SubdirFilesystem) ReadDir(name string) ([]fs.DirEntry, error) { + readDirFS := s.FS.(fs.ReadDirFS) + if readDirFS == nil { + return nil, &fs.PathError{Op: "readdir", Path: name, Err: errors.New("not implemented")} + } + return readDirFS.ReadDir(path.Join(s.subdir, name)) } \ No newline at end of file diff --git a/go.mod b/go.mod index be2dab0c..61c2116b 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 github.com/hashicorp/go-multierror v1.1.1 + github.com/mattn/go-colorable v0.1.13 go.uber.org/zap v1.26.0 google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 google.golang.org/grpc v1.59.0 @@ -20,6 +21,7 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/vine-io/vine v1.6.16 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/net v0.18.0 // indirect diff --git a/go.sum b/go.sum index 39002e60..58079eb8 100644 --- a/go.sum +++ b/go.sum @@ -44,6 +44,11 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/vine-io/vine v1.6.16 h1:KZ1sqxjdeCNJ+rOVKAH+hysQeXqzSJ7nrJPcMtfCKbs= @@ -92,6 +97,8 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=