const (
WebDisableAll string = "all"
WebDisableUI string = "ui"
)
const (
// Time allowed to write the file to the client.
writeWait = 10 * time.Second
// Time allowed to read the next pong message from the client.
pongWait = 60 * time.Second
// Send pings to client with this period. Must be less than pongWait.
pingPeriod = (pongWait * 9) / 10
)
var sampleSecretKey = []byte("5m3R7K4754p4m")
var (
upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
)
func corsMiddleware(next http.Handler) http.Handler
func generateJWT(username string) (string, error)
func reader(ws *websocket.Conn, done chan struct{})
func validateToken(r *http.Request) (err error)
func writer(ws *websocket.Conn, l log.LoggerHooker, done <-chan struct{})
CmdOpts specifies the internal web UI server command-line options
type CmdOpts struct {
WebDisable string `long:"web-disable" mapstructure:"web-disable" description:"Disable REST API and/or web UI" env:"PW_WEBDISABLE" optional:"true" optional-value:"all" choice:"all" choice:"ui"`
WebAddr string `long:"web-addr" mapstructure:"web-addr" description:"TCP address in the form 'host:port' to listen on" default:":8080" env:"PW_WEBADDR"`
WebUser string `long:"web-user" mapstructure:"web-user" description:"Admin username" env:"PW_WEBUSER"`
WebPassword string `long:"web-password" mapstructure:"web-password" description:"Admin password" env:"PW_WEBPASSWORD"`
}
type EnsureAuth struct {
handler http.HandlerFunc
}
func NewEnsureAuth(handlerToWrap http.HandlerFunc) *EnsureAuth
func (ea *EnsureAuth) ServeHTTP(w http.ResponseWriter, r *http.Request)
type ReadyChecker interface {
Ready() bool
}
type WebUIServer struct {
CmdOpts
http.Server
log.Logger
ctx context.Context
uiFS fs.FS // webui files
metricsReaderWriter metrics.ReaderWriter
sourcesReaderWriter sources.ReaderWriter
readyChecker ReadyChecker
}
func Init(ctx context.Context, opts CmdOpts, webuifs fs.FS, mrw metrics.ReaderWriter, srw sources.ReaderWriter, rc ReadyChecker) (*WebUIServer, error)
func (server *WebUIServer) CreateMetric(params []byte) error
CreateMetric creates new metrics (for REST collection endpoint) Supports both single and bulk creation from a map of metric names to metric definitions
func (server *WebUIServer) CreatePreset(params []byte) error
CreatePreset creates new presets (for REST collection endpoint) Supports both single and bulk creation
func (server *WebUIServer) CreateSource(params []byte) error
CreateSource creates a new source (for REST collection endpoint)
func (server *WebUIServer) DeleteMetric(name string) error
DeleteMetric removes the metric from the configuration
func (server *WebUIServer) DeletePreset(name string) error
DeletePreset removes the preset from the configuration
func (server *WebUIServer) DeleteSource(database string) error
DeleteSource removes the source from the list of configured sources
func (server *WebUIServer) GetMetrics() (res string, err error)
GetMetrics returns the list of metrics
func (server *WebUIServer) GetPresets() (res string, err error)
GetPresets returns the list of available presets
func (server *WebUIServer) GetSources() (res string, err error)
GetSources returns the list of sources fo find databases for monitoring
func (Server *WebUIServer) IsCorrectPassword(lr loginReq) bool
func (server *WebUIServer) UpdateMetric(name string, params []byte) error
UpdateMetric updates the stored metric information
func (server *WebUIServer) UpdatePreset(name string, params []byte) error
UpdatePreset updates the stored preset
func (server *WebUIServer) UpdateSource(params []byte) error
UpdateSource updates the configured source information
func (server *WebUIServer) deleteMetricByName(w http.ResponseWriter, name string)
deleteMetricByName deletes a metric by name
func (server *WebUIServer) deletePresetByName(w http.ResponseWriter, name string)
deletePresetByName deletes a preset by name
func (server *WebUIServer) deleteSourceByName(w http.ResponseWriter, name string)
deleteSourceByName deletes a source by name
func (server *WebUIServer) getMetricByName(w http.ResponseWriter, name string)
getMetricByName returns a specific metric by name
func (server *WebUIServer) getPresetByName(w http.ResponseWriter, name string)
getPresetByName returns a specific preset by name
func (server *WebUIServer) getSourceByName(w http.ResponseWriter, name string)
getSourceByName returns a specific source by name
func (Server *WebUIServer) handleLiveness(w http.ResponseWriter, _ *http.Request)
func (Server *WebUIServer) handleLogin(w http.ResponseWriter, r *http.Request)
func (server *WebUIServer) handleMetricItem(w http.ResponseWriter, r *http.Request)
handleMetricItem handles individual metric operations using REST-compliant HTTP methods and path parameters like /metric/{name}
func (server *WebUIServer) handleMetrics(w http.ResponseWriter, r *http.Request)
func (server *WebUIServer) handlePresetItem(w http.ResponseWriter, r *http.Request)
handlePresetItem handles individual preset operations using REST-compliant HTTP methods and path parameters like /preset/{name}
func (server *WebUIServer) handlePresets(w http.ResponseWriter, r *http.Request)
func (Server *WebUIServer) handleReadiness(w http.ResponseWriter, _ *http.Request)
func (server *WebUIServer) handleSourceItem(w http.ResponseWriter, r *http.Request)
handleSourceItem handles individual source operations using REST-compliant HTTP methods and path parameters like /source/{name}
func (server *WebUIServer) handleSources(w http.ResponseWriter, r *http.Request)
func (Server *WebUIServer) handleStatic(w http.ResponseWriter, r *http.Request)
func (Server *WebUIServer) handleTestConnect(w http.ResponseWriter, r *http.Request)
func (Server *WebUIServer) serveWsLog(w http.ResponseWriter, r *http.Request)
func (server *WebUIServer) updateMetricByName(w http.ResponseWriter, r *http.Request, name string)
updateMetricByName updates an existing metric using PUT semantics
func (server *WebUIServer) updatePresetByName(w http.ResponseWriter, r *http.Request, name string)
updatePresetByName updates an existing preset using PUT semantics
func (server *WebUIServer) updateSourceByName(w http.ResponseWriter, r *http.Request, name string)
updateSourceByName updates an existing source using PUT semantics
type loginReq struct {
Username string `json:"user"`
Password string `json:"password"`
}