rushlink/metrics.go

55 lines
1.2 KiB
Go

package main
import (
"log"
"net/http"
"time"
bolt "go.etcd.io/bbolt"
"github.com/gorilla/mux"
"github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
const (
METRICS_ADDR = "127.0.0.1:58614"
)
var (
shortenUrlsTotal = promauto.NewGaugeFunc(prometheus.GaugeOpts{
Namespace: "rushlink",
Subsystem: "shorten",
Name: "urls_total",
Help: "The current amount of shortened urls in the database.",
}, func() float64 {
var metric float64
if err := db.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte("shorten"))
if bucket == nil {
return errors.New("bucket 'shorten' could not be found")
}
metric = float64(bucket.Stats().KeyN)
return nil
}); err != nil {
log.Printf("error: %v", errors.Wrap(err, "fetching shorten_urls_total metric"))
return 0
}
return metric
})
)
func startMetricsServer() {
router := mux.NewRouter()
router.Handle("/metrics", promhttp.Handler()).Methods("GET")
srv := &http.Server{
Handler: router,
Addr: METRICS_ADDR,
WriteTimeout: 15 * time.Second,
ReadTimeout: 15 * time.Second,
}
log.Fatal(srv.ListenAndServe())
}