mirror of
https://codeberg.org/git-pages/git-pages.git
synced 2026-05-28 10:01:16 +00:00
Add Honeybadger.io observability support.
It's not yet clear how useful it is, but it's at least something.
This commit is contained in:
@@ -6,6 +6,15 @@ import (
|
||||
)
|
||||
|
||||
func ServeHealth(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
fmt.Fprintln(w, "ok")
|
||||
switch r.URL.Path {
|
||||
case "/":
|
||||
w.WriteHeader(http.StatusOK)
|
||||
fmt.Fprintln(w, "ok")
|
||||
|
||||
case "/panic":
|
||||
panic("explicit panic request")
|
||||
|
||||
default:
|
||||
http.Error(w, "not found", http.StatusNotFound)
|
||||
}
|
||||
}
|
||||
|
||||
28
src/main.go
28
src/main.go
@@ -2,11 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
"github.com/KimMachineGun/automemlimit/memlimit"
|
||||
@@ -32,17 +34,37 @@ func listen(name string, listen string) net.Listener {
|
||||
return listener
|
||||
}
|
||||
|
||||
func panicHandler(handler http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("panic: %s %s %s: %s\n%s",
|
||||
r.Method, r.Host, r.URL.Path, err, string(debug.Stack()))
|
||||
http.Error(w,
|
||||
fmt.Sprintf("internal server error: %s", err),
|
||||
http.StatusInternalServerError,
|
||||
)
|
||||
}
|
||||
}()
|
||||
handler.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
func serve(listener net.Listener, serve func(http.ResponseWriter, *http.Request)) {
|
||||
if listener != nil {
|
||||
if err := http.Serve(listener, http.HandlerFunc(serve)); err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
var handler http.Handler
|
||||
handler = http.HandlerFunc(serve)
|
||||
handler = ObserveHTTPHandler(handler)
|
||||
handler = panicHandler(handler)
|
||||
log.Fatalln(http.Serve(listener, handler))
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
InitObservability()
|
||||
|
||||
configPath := flag.String("config", "config.toml", "path to configuration file")
|
||||
migrateV1Path := flag.String("migrate-v1", "", "path to v1 data directory to upload")
|
||||
flag.Parse()
|
||||
|
||||
27
src/observe.go
Normal file
27
src/observe.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
"runtime/debug"
|
||||
|
||||
"github.com/honeybadger-io/honeybadger-go"
|
||||
)
|
||||
|
||||
func hasHoneybadger() bool {
|
||||
return os.Getenv("HONEYBADGER_API_KEY") != ""
|
||||
}
|
||||
|
||||
func InitObservability() {
|
||||
if hasHoneybadger() {
|
||||
honeybadger.Configure(honeybadger.Configuration{})
|
||||
debug.SetPanicOnFault(true)
|
||||
}
|
||||
}
|
||||
|
||||
func ObserveHTTPHandler(handler http.Handler) http.Handler {
|
||||
if hasHoneybadger() {
|
||||
handler = honeybadger.Handler(handler)
|
||||
}
|
||||
return handler
|
||||
}
|
||||
Reference in New Issue
Block a user