feat(pprof): add pprof HTTP server (#807)
- `PPROF_ENABLED=no` - `PPROF_BLOCK_PROFILE_RATE=0` - `PPROF_MUTEX_PROFILE_RATE=0` - `PPROF_HTTP_SERVER_ADDRESS=":6060"`
This commit is contained in:
57
internal/httpserver/server.go
Normal file
57
internal/httpserver/server.go
Normal file
@@ -0,0 +1,57 @@
|
||||
// Package httpserver implements an HTTP server.
|
||||
package httpserver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
var _ Interface = (*Server)(nil)
|
||||
|
||||
// Interface is the HTTP server composite interface.
|
||||
type Interface interface {
|
||||
Runner
|
||||
AddressGetter
|
||||
}
|
||||
|
||||
// Runner is the interface for an HTTP server with a Run method.
|
||||
type Runner interface {
|
||||
Run(ctx context.Context, ready chan<- struct{}, done chan<- struct{})
|
||||
}
|
||||
|
||||
// AddressGetter obtains the address the HTTP server is listening on.
|
||||
type AddressGetter interface {
|
||||
GetAddress() (address string)
|
||||
}
|
||||
|
||||
// Server is an HTTP server implementation, which uses
|
||||
// the HTTP handler provided.
|
||||
type Server struct {
|
||||
name string
|
||||
address string
|
||||
addressSet chan struct{}
|
||||
handler http.Handler
|
||||
logger Logger
|
||||
shutdownTimeout time.Duration
|
||||
}
|
||||
|
||||
// New creates a new HTTP server with the given settings.
|
||||
// It returns an error if one of the settings is not valid.
|
||||
func New(settings Settings) (s *Server, err error) {
|
||||
settings.SetDefaults()
|
||||
|
||||
if err = settings.Validate(); err != nil {
|
||||
return nil, fmt.Errorf("http server settings validation failed: %w", err)
|
||||
}
|
||||
|
||||
return &Server{
|
||||
name: *settings.Name,
|
||||
address: settings.Address,
|
||||
addressSet: make(chan struct{}),
|
||||
handler: settings.Handler,
|
||||
logger: settings.Logger,
|
||||
shutdownTimeout: *settings.ShutdownTimeout,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user