From 4c7c7bcc26f576b3b10a4ce7654db3a9e394350d Mon Sep 17 00:00:00 2001 From: Steve Durrheimer Date: Sat, 14 May 2016 14:17:09 +0200 Subject: [PATCH] Use common/version package --- .promu.yml | 6 +- main.go | 25 +++++- .../prometheus/common/version/info.go | 89 +++++++++++++++++++ vendor/vendor.json | 6 ++ 4 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 vendor/github.com/prometheus/common/version/info.go diff --git a/.promu.yml b/.promu.yml index 48904d5..3c32f1e 100644 --- a/.promu.yml +++ b/.promu.yml @@ -4,7 +4,11 @@ repository: build: flags: -a -tags netgo ldflags: | - -X main.Version={{.Version}} + -X {{repoPath}}/vendor/github.com/prometheus/common/version.Version={{.Version}} + -X {{repoPath}}/vendor/github.com/prometheus/common/version.Revision={{.Revision}} + -X {{repoPath}}/vendor/github.com/prometheus/common/version.Branch={{.Branch}} + -X {{repoPath}}/vendor/github.com/prometheus/common/version.BuildUser={{user}}@{{host}} + -X {{repoPath}}/vendor/github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}} tarball: files: - blackbox.yml diff --git a/main.go b/main.go index acc8666..0ef2f11 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,7 @@ import ( "fmt" "io/ioutil" "net/http" + "os" "time" "gopkg.in/yaml.v2" @@ -25,10 +26,14 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/config" "github.com/prometheus/common/log" + "github.com/prometheus/common/version" ) -var addr = flag.String("web.listen-address", ":9115", "The address to listen on for HTTP requests.") -var configFile = flag.String("config.file", "blackbox.yml", "Blackbox exporter configuration file.") +var ( + configFile = flag.String("config.file", "blackbox.yml", "Blackbox exporter configuration file.") + listenAddress = flag.String("web.listen-address", ":9115", "The address to listen on for HTTP requests.") + showVersion = flag.Bool("version", false, "Print version information.") +) type Config struct { Modules map[string]Module `yaml:"modules"` @@ -105,9 +110,21 @@ func probeHandler(w http.ResponseWriter, r *http.Request, config *Config) { } } +func init() { + prometheus.MustRegister(version.NewCollector("blackbox_exporter")) +} + func main() { flag.Parse() + if *showVersion { + fmt.Fprintln(os.Stdout, version.Print("blackbox_exporter")) + os.Exit(0) + } + + log.Infoln("Starting blackbox_exporter", version.Info()) + log.Infoln("Build context", version.BuildContext()) + yamlFile, err := ioutil.ReadFile(*configFile) if err != nil { @@ -136,7 +153,9 @@ func main() { `)) }) - if err := http.ListenAndServe(*addr, nil); err != nil { + + log.Infoln("Listening on", *listenAddress) + if err := http.ListenAndServe(*listenAddress, nil); err != nil { log.Fatalf("Error starting HTTP server: %s", err) } } diff --git a/vendor/github.com/prometheus/common/version/info.go b/vendor/github.com/prometheus/common/version/info.go new file mode 100644 index 0000000..84489a5 --- /dev/null +++ b/vendor/github.com/prometheus/common/version/info.go @@ -0,0 +1,89 @@ +// Copyright 2016 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 version + +import ( + "bytes" + "fmt" + "runtime" + "strings" + "text/template" + + "github.com/prometheus/client_golang/prometheus" +) + +// Build information. Populated at build-time. +var ( + Version string + Revision string + Branch string + BuildUser string + BuildDate string + GoVersion = runtime.Version() +) + +// NewCollector returns a collector which exports metrics about current version information. +func NewCollector(program string) *prometheus.GaugeVec { + buildInfo := prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Namespace: program, + Name: "build_info", + Help: fmt.Sprintf( + "A metric with a constant '1' value labeled by version, revision, branch, and goversion from which %s was built.", + program, + ), + }, + []string{"version", "revision", "branch", "goversion"}, + ) + buildInfo.WithLabelValues(Version, Revision, Branch, GoVersion).Set(1) + return buildInfo +} + +// versionInfoTmpl contains the template used by Info. +var versionInfoTmpl = ` +{{.program}}, version {{.version}} (branch: {{.branch}}, revision: {{.revision}}) + build user: {{.buildUser}} + build date: {{.buildDate}} + go version: {{.goVersion}} +` + +// Print returns version information. +func Print(program string) string { + m := map[string]string{ + "program": program, + "version": Version, + "revision": Revision, + "branch": Branch, + "buildUser": BuildUser, + "buildDate": BuildDate, + "goVersion": GoVersion, + } + t := template.Must(template.New("version").Parse(versionInfoTmpl)) + + var buf bytes.Buffer + if err := t.ExecuteTemplate(&buf, "version", m); err != nil { + panic(err) + } + return strings.TrimSpace(buf.String()) +} + +// Info returns version, branch and revision information. +func Info() string { + return fmt.Sprintf("(version=%s, branch=%s, revision=%s)", Version, Branch, Revision) +} + +// BuildContext returns goVersion, buildUser and buildDate information. +func BuildContext() string { + return fmt.Sprintf("(go=%s, user=%s, date=%s)", GoVersion, BuildUser, BuildDate) +} diff --git a/vendor/vendor.json b/vendor/vendor.json index c770e9d..7707a94 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -58,6 +58,12 @@ "revision": "167b27da48d058a9b46d84b834d67f68f0243f67", "revisionTime": "2016-03-18T12:23:18Z" }, + { + "checksumSHA1": "91KYK0SpvkaMJJA2+BcxbVnyRO0=", + "path": "github.com/prometheus/common/version", + "revision": "dd586c1c5abb0be59e60f942c22af711a2008cb4", + "revisionTime": "2016-05-03T22:05:32Z" + }, { "path": "github.com/prometheus/procfs", "revision": "406e5b7bfd8201a36e2bb5f7bdae0b03380c2ce8", -- 2.25.1