Source File
auto.go
Belonging Package
github.com/prometheus/client_golang/prometheus/promauto
// Copyright 2018 The Prometheus Authors// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.// Package promauto provides alternative constructors for the fundamental// Prometheus metric types and their …Vec and …Func variants. The difference to// their counterparts in the prometheus package is that the promauto// constructors register the Collectors with a registry before returning them.// There are two sets of constructors. The constructors in the first set are// top-level functions, while the constructors in the other set are methods of// the Factory type. The top-level functions return Collectors registered with// the global registry (prometheus.DefaultRegisterer), while the methods return// Collectors registered with the registry the Factory was constructed with. All// constructors panic if the registration fails.//// The following example is a complete program to create a histogram of normally// distributed random numbers from the math/rand package://// package main//// import (// "math/rand"// "net/http"//// "github.com/prometheus/client_golang/prometheus"// "github.com/prometheus/client_golang/prometheus/promauto"// "github.com/prometheus/client_golang/prometheus/promhttp"// )//// var histogram = promauto.NewHistogram(prometheus.HistogramOpts{// Name: "random_numbers",// Help: "A histogram of normally distributed random numbers.",// Buckets: prometheus.LinearBuckets(-3, .1, 61),// })//// func Random() {// for {// histogram.Observe(rand.NormFloat64())// }// }//// func main() {// go Random()// http.Handle("/metrics", promhttp.Handler())// http.ListenAndServe(":1971", nil)// }//// Prometheus's version of a minimal hello-world program://// package main//// import (// "fmt"// "net/http"//// "github.com/prometheus/client_golang/prometheus"// "github.com/prometheus/client_golang/prometheus/promauto"// "github.com/prometheus/client_golang/prometheus/promhttp"// )//// func main() {// http.Handle("/", promhttp.InstrumentHandlerCounter(// promauto.NewCounterVec(// prometheus.CounterOpts{// Name: "hello_requests_total",// Help: "Total number of hello-world requests by HTTP code.",// },// []string{"code"},// ),// http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {// fmt.Fprint(w, "Hello, world!")// }),// ))// http.Handle("/metrics", promhttp.Handler())// http.ListenAndServe(":1971", nil)// }//// A Factory is created with the With(prometheus.Registerer) function, which// enables two usage patterns. With(prometheus.Registerer) can be called once per// line://// var (// reg = prometheus.NewRegistry()// randomNumbers = promauto.With(reg).NewHistogram(prometheus.HistogramOpts{// Name: "random_numbers",// Help: "A histogram of normally distributed random numbers.",// Buckets: prometheus.LinearBuckets(-3, .1, 61),// })// requestCount = promauto.With(reg).NewCounterVec(// prometheus.CounterOpts{// Name: "http_requests_total",// Help: "Total number of HTTP requests by status code and method.",// },// []string{"code", "method"},// )// )//// Or it can be used to create a Factory once to be used multiple times://// var (// reg = prometheus.NewRegistry()// factory = promauto.With(reg)// randomNumbers = factory.NewHistogram(prometheus.HistogramOpts{// Name: "random_numbers",// Help: "A histogram of normally distributed random numbers.",// Buckets: prometheus.LinearBuckets(-3, .1, 61),// })// requestCount = factory.NewCounterVec(// prometheus.CounterOpts{// Name: "http_requests_total",// Help: "Total number of HTTP requests by status code and method.",// },// []string{"code", "method"},// )// )//// This appears very handy. So why are these constructors locked away in a// separate package?//// The main problem is that registration may fail, e.g. if a metric inconsistent// with or equal to the newly to be registered one is already registered.// Therefore, the Register method in the prometheus.Registerer interface returns// an error, and the same is the case for the top-level prometheus.Register// function that registers with the global registry. The prometheus package also// provides MustRegister versions for both. They panic if the registration// fails, and they clearly call this out by using the Must… idiom. Panicking is// problematic in this case because it doesn't just happen on input provided by// the caller that is invalid on its own. Things are a bit more subtle here:// Metric creation and registration tend to be spread widely over the// codebase. It can easily happen that an incompatible metric is added to an// unrelated part of the code, and suddenly code that used to work perfectly// fine starts to panic (provided that the registration of the newly added// metric happens before the registration of the previously existing// metric). This may come as an even bigger surprise with the global registry,// where simply importing another package can trigger a panic (if the newly// imported package registers metrics in its init function). At least, in the// prometheus package, creation of metrics and other collectors is separate from// registration. You first create the metric, and then you decide explicitly if// you want to register it with a local or the global registry, and if you want// to handle the error or risk a panic. With the constructors in the promauto// package, registration is automatic, and if it fails, it will always// panic. Furthermore, the constructors will often be called in the var section// of a file, which means that panicking will happen as a side effect of merely// importing a package.//// A separate package allows conservative users to entirely ignore it. And// whoever wants to use it will do so explicitly, with an opportunity to read// this warning.//// Enjoy promauto responsibly!package promautoimport// NewCounter works like the function of the same name in the prometheus package// but it automatically registers the Counter with the// prometheus.DefaultRegisterer. If the registration fails, NewCounter panics.func ( prometheus.CounterOpts) prometheus.Counter {return With(prometheus.DefaultRegisterer).NewCounter()}// NewCounterVec works like the function of the same name in the prometheus// package but it automatically registers the CounterVec with the// prometheus.DefaultRegisterer. If the registration fails, NewCounterVec// panics.func ( prometheus.CounterOpts, []string) *prometheus.CounterVec {return With(prometheus.DefaultRegisterer).NewCounterVec(, )}// NewCounterFunc works like the function of the same name in the prometheus// package but it automatically registers the CounterFunc with the// prometheus.DefaultRegisterer. If the registration fails, NewCounterFunc// panics.func ( prometheus.CounterOpts, func() float64) prometheus.CounterFunc {return With(prometheus.DefaultRegisterer).NewCounterFunc(, )}// NewGauge works like the function of the same name in the prometheus package// but it automatically registers the Gauge with the// prometheus.DefaultRegisterer. If the registration fails, NewGauge panics.func ( prometheus.GaugeOpts) prometheus.Gauge {return With(prometheus.DefaultRegisterer).NewGauge()}// NewGaugeVec works like the function of the same name in the prometheus// package but it automatically registers the GaugeVec with the// prometheus.DefaultRegisterer. If the registration fails, NewGaugeVec panics.func ( prometheus.GaugeOpts, []string) *prometheus.GaugeVec {return With(prometheus.DefaultRegisterer).NewGaugeVec(, )}// NewGaugeFunc works like the function of the same name in the prometheus// package but it automatically registers the GaugeFunc with the// prometheus.DefaultRegisterer. If the registration fails, NewGaugeFunc panics.func ( prometheus.GaugeOpts, func() float64) prometheus.GaugeFunc {return With(prometheus.DefaultRegisterer).NewGaugeFunc(, )}// NewSummary works like the function of the same name in the prometheus package// but it automatically registers the Summary with the// prometheus.DefaultRegisterer. If the registration fails, NewSummary panics.func ( prometheus.SummaryOpts) prometheus.Summary {return With(prometheus.DefaultRegisterer).NewSummary()}// NewSummaryVec works like the function of the same name in the prometheus// package but it automatically registers the SummaryVec with the// prometheus.DefaultRegisterer. If the registration fails, NewSummaryVec// panics.func ( prometheus.SummaryOpts, []string) *prometheus.SummaryVec {return With(prometheus.DefaultRegisterer).NewSummaryVec(, )}// NewHistogram works like the function of the same name in the prometheus// package but it automatically registers the Histogram with the// prometheus.DefaultRegisterer. If the registration fails, NewHistogram panics.func ( prometheus.HistogramOpts) prometheus.Histogram {return With(prometheus.DefaultRegisterer).NewHistogram()}// NewHistogramVec works like the function of the same name in the prometheus// package but it automatically registers the HistogramVec with the// prometheus.DefaultRegisterer. If the registration fails, NewHistogramVec// panics.func ( prometheus.HistogramOpts, []string) *prometheus.HistogramVec {return With(prometheus.DefaultRegisterer).NewHistogramVec(, )}// NewUntypedFunc works like the function of the same name in the prometheus// package but it automatically registers the UntypedFunc with the// prometheus.DefaultRegisterer. If the registration fails, NewUntypedFunc// panics.func ( prometheus.UntypedOpts, func() float64) prometheus.UntypedFunc {return With(prometheus.DefaultRegisterer).NewUntypedFunc(, )}// Factory provides factory methods to create Collectors that are automatically// registered with a Registerer. Create a Factory with the With function,// providing a Registerer to auto-register created Collectors with. The zero// value of a Factory creates Collectors that are not registered with any// Registerer. All methods of the Factory panic if the registration fails.type Factory struct {r prometheus.Registerer}// With creates a Factory using the provided Registerer for registration of the// created Collectors. If the provided Registerer is nil, the returned Factory// creates Collectors that are not registered with any Registerer.func ( prometheus.Registerer) Factory { return Factory{} }// NewCounter works like the function of the same name in the prometheus package// but it automatically registers the Counter with the Factory's Registerer.func ( Factory) ( prometheus.CounterOpts) prometheus.Counter {:= prometheus.NewCounter()if .r != nil {.r.MustRegister()}return}// NewCounterVec works like the function of the same name in the prometheus// package but it automatically registers the CounterVec with the Factory's// Registerer.func ( Factory) ( prometheus.CounterOpts, []string) *prometheus.CounterVec {:= prometheus.NewCounterVec(, )if .r != nil {.r.MustRegister()}return}// NewCounterFunc works like the function of the same name in the prometheus// package but it automatically registers the CounterFunc with the Factory's// Registerer.func ( Factory) ( prometheus.CounterOpts, func() float64) prometheus.CounterFunc {:= prometheus.NewCounterFunc(, )if .r != nil {.r.MustRegister()}return}// NewGauge works like the function of the same name in the prometheus package// but it automatically registers the Gauge with the Factory's Registerer.func ( Factory) ( prometheus.GaugeOpts) prometheus.Gauge {:= prometheus.NewGauge()if .r != nil {.r.MustRegister()}return}// NewGaugeVec works like the function of the same name in the prometheus// package but it automatically registers the GaugeVec with the Factory's// Registerer.func ( Factory) ( prometheus.GaugeOpts, []string) *prometheus.GaugeVec {:= prometheus.NewGaugeVec(, )if .r != nil {.r.MustRegister()}return}// NewGaugeFunc works like the function of the same name in the prometheus// package but it automatically registers the GaugeFunc with the Factory's// Registerer.func ( Factory) ( prometheus.GaugeOpts, func() float64) prometheus.GaugeFunc {:= prometheus.NewGaugeFunc(, )if .r != nil {.r.MustRegister()}return}// NewSummary works like the function of the same name in the prometheus package// but it automatically registers the Summary with the Factory's Registerer.func ( Factory) ( prometheus.SummaryOpts) prometheus.Summary {:= prometheus.NewSummary()if .r != nil {.r.MustRegister()}return}// NewSummaryVec works like the function of the same name in the prometheus// package but it automatically registers the SummaryVec with the Factory's// Registerer.func ( Factory) ( prometheus.SummaryOpts, []string) *prometheus.SummaryVec {:= prometheus.NewSummaryVec(, )if .r != nil {.r.MustRegister()}return}// NewHistogram works like the function of the same name in the prometheus// package but it automatically registers the Histogram with the Factory's// Registerer.func ( Factory) ( prometheus.HistogramOpts) prometheus.Histogram {:= prometheus.NewHistogram()if .r != nil {.r.MustRegister()}return}// NewHistogramVec works like the function of the same name in the prometheus// package but it automatically registers the HistogramVec with the Factory's// Registerer.func ( Factory) ( prometheus.HistogramOpts, []string) *prometheus.HistogramVec {:= prometheus.NewHistogramVec(, )if .r != nil {.r.MustRegister()}return}// NewUntypedFunc works like the function of the same name in the prometheus// package but it automatically registers the UntypedFunc with the Factory's// Registerer.func ( Factory) ( prometheus.UntypedOpts, func() float64) prometheus.UntypedFunc {:= prometheus.NewUntypedFunc(, )if .r != nil {.r.MustRegister()}return}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |