Add pprof HTTP server
This enables production debugging of the bouncer. Closes: https://todo.sr.ht/~emersion/soju/155
This commit is contained in:
parent
ea98ac042e
commit
d722f56000
@ -9,6 +9,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
_ "net/http/pprof"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
@ -286,6 +287,26 @@ func main() {
|
|||||||
log.Fatalf("serving %q: %v", listen, err)
|
log.Fatalf("serving %q: %v", listen, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
case "http+pprof":
|
||||||
|
// Only allow localhost as listening host for security reasons.
|
||||||
|
// Users can always explicitly setup reverse proxies if desirable.
|
||||||
|
hostname, _, err := net.SplitHostPort(u.Host)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("invalid host in URI %q: %v", listen, err)
|
||||||
|
} else if hostname != "localhost" {
|
||||||
|
log.Fatalf("pprof listening host must be localhost")
|
||||||
|
}
|
||||||
|
|
||||||
|
// net/http/pprof registers its handlers in http.DefaultServeMux
|
||||||
|
httpSrv := http.Server{
|
||||||
|
Addr: u.Host,
|
||||||
|
Handler: http.DefaultServeMux,
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
if err := httpSrv.ListenAndServe(); err != nil {
|
||||||
|
log.Fatalf("serving %q: %v", listen, err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
default:
|
default:
|
||||||
log.Fatalf("failed to listen on %q: unsupported scheme", listen)
|
log.Fatalf("failed to listen on %q: unsupported scheme", listen)
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,9 @@ The following directives are supported:
|
|||||||
port: 113)
|
port: 113)
|
||||||
- _http+prometheus://localhost:<port>_ listens for plain-text HTTP
|
- _http+prometheus://localhost:<port>_ listens for plain-text HTTP
|
||||||
connections and serves Prometheus metrics (host must be "localhost")
|
connections and serves Prometheus metrics (host must be "localhost")
|
||||||
|
- _http+pprof://localhost:<port>_ listens for plain-text HTTP connections
|
||||||
|
and serves pprof runtime profiling data (host must be "localhost"). For
|
||||||
|
more information, see: <https://pkg.go.dev/net/http/pprof>.
|
||||||
|
|
||||||
If the scheme is omitted, "ircs" is assumed. If multiple *listen*
|
If the scheme is omitted, "ircs" is assumed. If multiple *listen*
|
||||||
directives are specified, soju will listen on each of them.
|
directives are specified, soju will listen on each of them.
|
||||||
|
Loading…
Reference in New Issue
Block a user