webprometheus

package
v0.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Overview

Package webprometheus provides Prometheus middleware and scrape handlers for web-based GoForj apps.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Handler

func Handler() web.Handler

Handler returns the package-level Prometheus scrape handler. @group Prometheus Example: registry := prometheus.NewRegistry() counter := prometheus.NewCounter(prometheus.CounterOpts{Name: "demo_total", Help: "demo counter"}) registry.MustRegister(counter) counter.Inc() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: prometheus.NewRegistry(), Gatherer: registry}) recorder := httptest.NewRecorder() ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/metrics", nil), recorder, "/metrics", nil) _ = metrics.Handler()(ctx) fmt.Println(strings.Contains(recorder.Body.String(), "demo_total"))

// true

func Middleware

func Middleware() web.Middleware

Middleware returns the package-level Prometheus middleware. @group Prometheus Example: registry := prometheus.NewRegistry() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: registry, Gatherer: registry, Namespace: "example"}) handler := metrics.Middleware()(func(c web.Context) error { return c.NoContent(http.StatusNoContent) }) ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/healthz", nil), nil, "/healthz", nil) _ = handler(ctx) out := &bytes.Buffer{} _ = webprometheus.WriteGatheredMetrics(out, registry) fmt.Println(strings.Contains(out.String(), "example_requests_total"))

// true

func RunPushGatewayGatherer

func RunPushGatewayGatherer(ctx context.Context, config PushGatewayConfig) error

RunPushGatewayGatherer starts pushing collected metrics until the context finishes. @group Prometheus Example: err := webprometheus.RunPushGatewayGatherer(context.Background(), webprometheus.PushGatewayConfig{}) fmt.Println(err != nil)

// true

func WriteGatheredMetrics

func WriteGatheredMetrics(writer io.Writer, gatherer prometheus.Gatherer) error

WriteGatheredMetrics gathers collected metrics and writes them to the given writer. @group Prometheus Example: var buf bytes.Buffer err := webprometheus.WriteGatheredMetrics(&buf, prometheus.NewRegistry()) fmt.Println(err == nil)

// true

Types

type Config

type Config struct {
	Skipper                   func(web.Context) bool
	Namespace                 string
	Subsystem                 string
	LabelFuncs                map[string]LabelValueFunc
	HistogramOptsFunc         func(prometheus.HistogramOpts) prometheus.HistogramOpts
	CounterOptsFunc           func(prometheus.CounterOpts) prometheus.CounterOpts
	Registerer                prometheus.Registerer
	Gatherer                  prometheus.Gatherer
	BeforeNext                func(web.Context)
	AfterNext                 func(web.Context, error)
	DoNotUseRequestPathFor404 bool
	DurationBuckets           []float64
	SizeBuckets               []float64
	RequestSizeBuckets        []float64
	DisableCompression        bool
	// contains filtered or unexported fields
}

Config configures Prometheus middleware and scraping behavior.

type LabelValueFunc

type LabelValueFunc func(web.Context, error) string

LabelValueFunc resolves a label value from request context and handler error.

type Metrics

type Metrics struct {
	// contains filtered or unexported fields
}

Metrics records Prometheus metrics for HTTP traffic and exposes a scrape handler.

func Default

func Default() *Metrics

Default returns the package-level Prometheus metrics instance. @group Prometheus Example: fmt.Println(webprometheus.Default() == webprometheus.Default())

// true

func MustNew

func MustNew(config Config) *Metrics

MustNew creates a Metrics instance and panics on registration errors. @group Prometheus Example: metrics := webprometheus.MustNew(webprometheus.Config{Registerer: prometheus.NewRegistry(), Gatherer: prometheus.NewRegistry()}) fmt.Println(metrics != nil)

// true

func New

func New(config Config) (*Metrics, error)

New creates a Metrics instance backed by Prometheus collectors. @group Prometheus Example: metrics, err := webprometheus.New(webprometheus.Config{Namespace: "app"}) _ = metrics fmt.Println(err == nil)

// true

func (*Metrics) Handler

func (m *Metrics) Handler() web.Handler

Handler exposes the configured Prometheus metrics as a web.Handler. @group Prometheus Example: registry := prometheus.NewRegistry() counter := prometheus.NewCounter(prometheus.CounterOpts{Name: "demo_total", Help: "demo counter"}) registry.MustRegister(counter) counter.Inc() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: prometheus.NewRegistry(), Gatherer: registry}) recorder := httptest.NewRecorder() ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/metrics", nil), recorder, "/metrics", nil) _ = metrics.Handler()(ctx) fmt.Println(strings.Contains(recorder.Body.String(), "demo_total"))

// true

func (*Metrics) Middleware

func (m *Metrics) Middleware() web.Middleware

Middleware records Prometheus metrics for each request. @group Prometheus Example: registry := prometheus.NewRegistry() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: registry, Gatherer: registry, Namespace: "example"}) handler := metrics.Middleware()(func(c web.Context) error { return c.NoContent(http.StatusNoContent) }) ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/healthz", nil), nil, "/healthz", nil) _ = handler(ctx) out := &bytes.Buffer{} _ = webprometheus.WriteGatheredMetrics(out, registry) fmt.Println(strings.Contains(out.String(), "example_requests_total"))

// true

type PushGatewayConfig

type PushGatewayConfig struct {
	PushGatewayURL  string
	PushInterval    time.Duration
	Gatherer        prometheus.Gatherer
	ErrorHandler    func(error) error
	ClientTransport http.RoundTripper
}

PushGatewayConfig contains the configuration for pushing to a Prometheus push gateway.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL