46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
|
package httphandler
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/prometheus/common/version"
|
||
|
)
|
||
|
|
||
|
type VersionHandler struct{}
|
||
|
|
||
|
// Same struct prometheus uses for their /version endpoint.
|
||
|
// Separate copy to avoid pulling all of prometheus as a dependency.
|
||
|
type prometheusVersion struct {
|
||
|
Version string `json:"version"`
|
||
|
Revision string `json:"revision"`
|
||
|
Branch string `json:"branch"`
|
||
|
BuildUser string `json:"buildUser"`
|
||
|
BuildDate string `json:"buildDate"`
|
||
|
GoVersion string `json:"goVersion"`
|
||
|
}
|
||
|
|
||
|
// Interface guard.
|
||
|
var _ http.Handler = (*VersionHandler)(nil)
|
||
|
|
||
|
func NewVersionHandler() VersionHandler {
|
||
|
return VersionHandler{}
|
||
|
}
|
||
|
|
||
|
func (h VersionHandler) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
|
||
|
// we can't use "version" directly as it is a package, and not an object that
|
||
|
// can be serialized.
|
||
|
err := json.NewEncoder(w).Encode(prometheusVersion{
|
||
|
Version: version.Version,
|
||
|
Revision: version.Revision,
|
||
|
Branch: version.Branch,
|
||
|
BuildUser: version.BuildUser,
|
||
|
BuildDate: version.BuildDate,
|
||
|
GoVersion: version.GoVersion,
|
||
|
})
|
||
|
if err != nil {
|
||
|
http.Error(w, fmt.Sprintf("error encoding JSON: %s", err), http.StatusInternalServerError)
|
||
|
}
|
||
|
}
|