51 lines
1,004 B
Go
51 lines
1,004 B
Go
|
// Package prometheus implements a standalone HTTP server for serving a
|
||
|
// Prometheus metrics endpoint.
|
||
|
package prometheus
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net/http"
|
||
|
|
||
|
log "github.com/Sirupsen/logrus"
|
||
|
"github.com/prometheus/client_golang/prometheus"
|
||
|
)
|
||
|
|
||
|
// Server represents a standalone HTTP server for serving a Prometheus metrics
|
||
|
// endpoint.
|
||
|
type Server struct {
|
||
|
srv *http.Server
|
||
|
}
|
||
|
|
||
|
// Stop shuts down the server.
|
||
|
func (s *Server) Stop() <-chan error {
|
||
|
c := make(chan error)
|
||
|
go func() {
|
||
|
if err := s.srv.Shutdown(context.Background()); err != nil {
|
||
|
c <- err
|
||
|
} else {
|
||
|
close(c)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
// NewServer creates a new instance of a Prometheus server that asynchronously
|
||
|
// serves requests.
|
||
|
func NewServer(addr string) *Server {
|
||
|
s := &Server{
|
||
|
srv: &http.Server{
|
||
|
Addr: addr,
|
||
|
Handler: prometheus.Handler(),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
go func() {
|
||
|
if err := s.srv.ListenAndServe(); err != http.ErrServerClosed {
|
||
|
log.Fatal("failed while serving prometheus: " + err.Error())
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
return s
|
||
|
}
|