package metrics
import (
"context"
"net"
"net/http"
)
const openMetricsContentType = "application/openmetrics-text; version=1.0.0; charset=utf-8"
func Handler (r *Registry ) http .Handler {
mux := http .NewServeMux ()
mux .HandleFunc ("/metrics" , func (w http .ResponseWriter , req *http .Request ) {
if req .Method != http .MethodGet && req .Method != http .MethodHead {
w .Header ().Set ("Allow" , "GET, HEAD" )
http .Error (w , "method not allowed" , http .StatusMethodNotAllowed )
return
}
w .Header ().Set ("Content-Type" , openMetricsContentType )
if req .Method == http .MethodHead {
return
}
if err := r .WriteOpenMetrics (w ); err != nil {
http .Error (w , err .Error(), http .StatusInternalServerError )
}
})
return mux
}
type Server struct {
server *http .Server
}
func NewServer (addr string , r *Registry ) *Server {
return &Server {
server : &http .Server {
Addr : addr ,
Handler : Handler (r ),
},
}
}
func (s *Server ) ListenAndServe () error {
if s == nil || s .server == nil {
return http .ErrServerClosed
}
return s .server .ListenAndServe ()
}
func (s *Server ) Serve (l net .Listener ) error {
if s == nil || s .server == nil {
return http .ErrServerClosed
}
return s .server .Serve (l )
}
func (s *Server ) Shutdown (ctx context .Context ) error {
if s == nil || s .server == nil {
return nil
}
return s .server .Shutdown (ctx )
}
The pages are generated with Golds v0.8.4 . (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 .