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"` }