mirror of https://git.jolheiser.com/ugit.git
feat: multiple log levels and json logging
Signed-off-by: jolheiser <git@jolheiser.com>tui
parent
fce5e40086
commit
f21d7a8b69
|
@ -5,17 +5,18 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/charmbracelet/log"
|
||||
"github.com/peterbourgon/ff/v3"
|
||||
"github.com/peterbourgon/ff/v3/ffyaml"
|
||||
)
|
||||
|
||||
type cliArgs struct {
|
||||
Debug bool
|
||||
RepoDir string
|
||||
SSH sshArgs
|
||||
HTTP httpArgs
|
||||
Meta metaArgs
|
||||
Profile profileArgs
|
||||
Log logArgs
|
||||
}
|
||||
|
||||
type sshArgs struct {
|
||||
|
@ -46,6 +47,11 @@ type profileLink struct {
|
|||
URL string
|
||||
}
|
||||
|
||||
type logArgs struct {
|
||||
Level log.Level
|
||||
JSON bool
|
||||
}
|
||||
|
||||
func parseArgs(args []string) (c cliArgs, e error) {
|
||||
fs := flag.NewFlagSet("ugitd", flag.ContinueOnError)
|
||||
fs.String("config", "ugit.yaml", "Path to config file")
|
||||
|
@ -66,9 +72,20 @@ func parseArgs(args []string) (c cliArgs, e error) {
|
|||
Title: "ugit",
|
||||
Description: "Minimal git server",
|
||||
},
|
||||
Log: logArgs{
|
||||
Level: log.InfoLevel,
|
||||
},
|
||||
}
|
||||
|
||||
fs.BoolVar(&c.Debug, "debug", c.Debug, "Debug logging")
|
||||
fs.Func("log.level", "Logging level", func(s string) error {
|
||||
lvl, err := log.ParseLevel(s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.Log.Level = lvl
|
||||
return nil
|
||||
})
|
||||
fs.BoolVar(&c.Log.JSON, "log.json", c.Log.JSON, "Print logs in JSON(L) format")
|
||||
fs.StringVar(&c.RepoDir, "repo-dir", c.RepoDir, "Path to directory containing repositories")
|
||||
fs.StringVar(&c.SSH.AuthorizedKeys, "ssh.authorized-keys", c.SSH.AuthorizedKeys, "Path to authorized_keys")
|
||||
fs.StringVar(&c.SSH.CloneURL, "ssh.clone-url", c.SSH.CloneURL, "SSH clone URL base")
|
||||
|
|
|
@ -4,21 +4,21 @@ import (
|
|||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/go-git/go-git/v5/plumbing/protocol/packp"
|
||||
"go.jolheiser.com/ugit/internal/git"
|
||||
|
||||
"go.jolheiser.com/ugit/internal/http"
|
||||
"go.jolheiser.com/ugit/internal/ssh"
|
||||
|
||||
"github.com/charmbracelet/log"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/httplog/v2"
|
||||
"github.com/go-git/go-git/v5/plumbing/protocol/packp"
|
||||
"github.com/go-git/go-git/v5/utils/trace"
|
||||
"go.jolheiser.com/ugit/internal/git"
|
||||
"go.jolheiser.com/ugit/internal/http"
|
||||
"go.jolheiser.com/ugit/internal/ssh"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
@ -39,14 +39,24 @@ func main() {
|
|||
panic(err)
|
||||
}
|
||||
|
||||
if args.Debug {
|
||||
log.SetLevel(args.Log.Level)
|
||||
middleware.DefaultLogger = httplog.RequestLogger(httplog.NewLogger("ugit", httplog.Options{
|
||||
JSON: args.Log.JSON,
|
||||
LogLevel: slog.Level(args.Log.Level),
|
||||
Concise: args.Log.Level != log.DebugLevel,
|
||||
}))
|
||||
|
||||
if args.Log.Level == log.DebugLevel {
|
||||
trace.SetTarget(trace.Packet)
|
||||
log.SetLevel(log.DebugLevel)
|
||||
} else {
|
||||
middleware.DefaultLogger = http.NoopLogger
|
||||
ssh.DefaultLogger = ssh.NoopLogger
|
||||
}
|
||||
|
||||
if args.Log.JSON {
|
||||
log.SetFormatter(log.JSONFormatter)
|
||||
}
|
||||
|
||||
if err := requiredFS(args.RepoDir); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -63,7 +73,7 @@ func main() {
|
|||
panic(err)
|
||||
}
|
||||
go func() {
|
||||
fmt.Printf("SSH listening on ssh://localhost:%d\n", sshSettings.Port)
|
||||
log.Debugf("SSH listening on ssh://localhost:%d\n", sshSettings.Port)
|
||||
if err := sshSrv.ListenAndServe(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -88,7 +98,7 @@ func main() {
|
|||
}
|
||||
httpSrv := http.New(httpSettings)
|
||||
go func() {
|
||||
fmt.Printf("HTTP listening on http://localhost:%d\n", httpSettings.Port)
|
||||
log.Debugf("HTTP listening on http://localhost:%d\n", httpSettings.Port)
|
||||
if err := httpSrv.ListenAndServe(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
@ -128,11 +128,6 @@
|
|||
description = "Group account under which ugit runs";
|
||||
};
|
||||
|
||||
debug = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
openFirewall = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
|
@ -160,7 +155,7 @@
|
|||
if (builtins.length cfg.authorizedKeys) > 0
|
||||
then authorizedKeysFile
|
||||
else cfg.authorizedKeysFile;
|
||||
args = ["--config=${configFile}" "--repo-dir=${cfg.repoDir}" "--ssh.authorized-keys=${authorizedKeysPath}" "--ssh.host-key=${cfg.hostKeyFile}"] ++ lib.optionals cfg.debug ["--debug"];
|
||||
args = ["--config=${configFile}" "--repo-dir=${cfg.repoDir}" "--ssh.authorized-keys=${authorizedKeysPath}" "--ssh.host-key=${cfg.hostKeyFile}"];
|
||||
in "${cfg.package}/bin/ugitd ${builtins.concatStringsSep " " args}";
|
||||
wantedBy = ["multi-user.target"];
|
||||
after = ["network.target"];
|
||||
|
|
1
go.mod
1
go.mod
|
@ -12,6 +12,7 @@ require (
|
|||
github.com/charmbracelet/wish v1.3.0
|
||||
github.com/dustin/go-humanize v1.0.1
|
||||
github.com/go-chi/chi/v5 v5.0.11
|
||||
github.com/go-chi/httplog/v2 v2.1.1
|
||||
github.com/go-git/go-billy/v5 v5.5.0
|
||||
github.com/go-git/go-git/v5 v5.11.0
|
||||
github.com/peterbourgon/ff/v3 v3.4.0
|
||||
|
|
|
@ -1 +1 @@
|
|||
sha256-8kI94hcJupAUye6cEAmIlN+CrtYSXlgoAlmpyXArfF8=
|
||||
sha256-m3s1SYLLrADRQc4a2njyu/xpvsHKcX/KGGzAay7DoIU=
|
2
go.sum
2
go.sum
|
@ -64,6 +64,8 @@ github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
|
|||
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
|
||||
github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA=
|
||||
github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/go-chi/httplog/v2 v2.1.1 h1:ojojiu4PIaoeJ/qAO4GWUxJqvYUTobeo7zmuHQJAxRk=
|
||||
github.com/go-chi/httplog/v2 v2.1.1/go.mod h1:/XXdxicJsp4BA5fapgIC3VuTD+z0Z/VzukoB3VDc1YE=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
|
||||
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
|
||||
|
|
|
@ -70,6 +70,9 @@ schema = 3
|
|||
[mod."github.com/go-chi/chi/v5"]
|
||||
version = "v5.0.11"
|
||||
hash = "sha256-95LKg/OVzhik2HUz6cirHH3eAT4qbHSg52bSvkc+XOY="
|
||||
[mod."github.com/go-chi/httplog/v2"]
|
||||
version = "v2.1.1"
|
||||
hash = "sha256-bMpoHUSNk3Uds9NfrStwhDsdCONR4pJso9sVUhqfidk="
|
||||
[mod."github.com/go-git/gcfg"]
|
||||
version = "v1.5.1-0.20230307220236-3a3c6141e376"
|
||||
hash = "sha256-f4k0gSYuo0/q3WOoTxl2eFaj7WZpdz29ih6CKc8Ude8="
|
||||
|
|
Loading…
Reference in New Issue