diff options
Diffstat (limited to '')
-rw-r--r-- | forged/internal/git2c/perror.go | 48 | ||||
-rw-r--r-- | forged/internal/unsorted/config.go | 4 | ||||
-rw-r--r-- | forged/internal/unsorted/server.go | 18 |
3 files changed, 70 insertions, 0 deletions
diff --git a/forged/internal/git2c/perror.go b/forged/internal/git2c/perror.go new file mode 100644 index 0000000..96bffd5 --- /dev/null +++ b/forged/internal/git2c/perror.go @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> + +// TODO: Make the C part report detailed error messages too + +package git2c + +import "errors" + +var ( + Success error + ErrUnknown = errors.New("git2c: unknown error") + ErrPath = errors.New("git2c: get tree entry by path failed") + ErrRevparse = errors.New("git2c: revparse failed") + ErrReadme = errors.New("git2c: no readme") + ErrBlobExpected = errors.New("git2c: blob expected") + ErrEntryToObject = errors.New("git2c: tree entry to object conversion failed") + ErrBlobRawContent = errors.New("git2c: get blob raw content failed") + ErrRevwalk = errors.New("git2c: revwalk failed") + ErrRevwalkPushHead = errors.New("git2c: revwalk push head failed") + ErrBareProto = errors.New("git2c: bare protocol error") +) + +func Perror(errno uint) error { + switch errno { + case 0: + return Success + case 3: + return ErrPath + case 4: + return ErrRevparse + case 5: + return ErrReadme + case 6: + return ErrBlobExpected + case 7: + return ErrEntryToObject + case 8: + return ErrBlobRawContent + case 9: + return ErrRevwalk + case 10: + return ErrRevwalkPushHead + case 11: + return ErrBareProto + } + return ErrUnknown +} diff --git a/forged/internal/unsorted/config.go b/forged/internal/unsorted/config.go index 9eae13b..9f07480 100644 --- a/forged/internal/unsorted/config.go +++ b/forged/internal/unsorted/config.go @@ -55,6 +55,10 @@ type Config struct { Type string `scfg:"type"` Conn string `scfg:"conn"` } `scfg:"db"` + Pprof struct { + Net string `scfg:"net"` + Addr string `scfg:"addr"` + } `scfg:"pprof"` } // LoadConfig loads a configuration file from the specified path and unmarshals diff --git a/forged/internal/unsorted/server.go b/forged/internal/unsorted/server.go index 2eb77d3..84379b0 100644 --- a/forged/internal/unsorted/server.go +++ b/forged/internal/unsorted/server.go @@ -11,6 +11,7 @@ import ( "log/slog" "net" "net/http" + _ "net/http/pprof" "os" "os/exec" "path/filepath" @@ -210,6 +211,23 @@ func (s *Server) Run() error { }() } + // Pprof listener + { + pprofListener, err := net.Listen(s.config.Pprof.Net, s.config.Pprof.Addr) + if err != nil { + slog.Error("listening pprof", "error", err) + os.Exit(1) + } + + slog.Info("listening pprof on", "net", s.config.Pprof.Net, "addr", s.config.Pprof.Addr) + go func() { + if err := http.Serve(pprofListener, nil); err != nil { + slog.Error("serving pprof", "error", err) + os.Exit(1) + } + }() + } + s.ircBot = irc.NewBot(&s.config.IRC) // IRC bot go s.ircBot.ConnectLoop() |