Skip to content

Commit 63e6eca

Browse files
committed
Switch to kingpin flags
1 parent 4339844 commit 63e6eca

File tree

4 files changed

+32
-74
lines changed

4 files changed

+32
-74
lines changed

Gopkg.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Procfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web: stackdriver_exporter -web.listen-address=":$PORT"
1+
web: stackdriver_exporter --web.listen-address=":$PORT"

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ If we want to get all `CPU` (`compute.googleapis.com/instance/cpu`) and `Disk` (
102102

103103
```
104104
stackdriver_exporter \
105-
-google.project-id my-test-project \
106-
-monitoring.metrics-type-prefixes "compute.googleapis.com/instance/cpu,compute.googleapis.com/instance/disk"
105+
--google.project-id my-test-project \
106+
--monitoring.metrics-type-prefixes "compute.googleapis.com/instance/cpu,compute.googleapis.com/instance/disk"
107107
```
108108

109109
## Contributing

stackdriver_exporter.go

Lines changed: 28 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,50 @@
11
package main
22

33
import (
4-
"flag"
54
"fmt"
65
"net/http"
76
"os"
87
"strings"
9-
"time"
108

119
"github.com/prometheus/client_golang/prometheus"
1210
"github.com/prometheus/common/log"
1311
"github.com/prometheus/common/version"
1412
"golang.org/x/net/context"
1513
"golang.org/x/oauth2/google"
1614
"google.golang.org/api/monitoring/v3"
15+
"gopkg.in/alecthomas/kingpin.v2"
1716

1817
"github.com/frodenas/stackdriver_exporter/collectors"
1918
)
2019

2120
var (
22-
projectID = flag.String(
23-
"google.project-id", "",
24-
"Google Project ID ($STACKDRIVER_EXPORTER_GOOGLE_PROJECT_ID).",
25-
)
26-
27-
monitoringMetricsTypePrefixes = flag.String(
28-
"monitoring.metrics-type-prefixes", "",
29-
"Comma separated Google Stackdriver Monitoring Metric Type prefixes ($STACKDRIVER_EXPORTER_MONITORING_METRICS_TYPE_PREFIXES).",
30-
)
31-
32-
monitoringMetricsInterval = flag.Duration(
33-
"monitoring.metrics-interval", 5*time.Minute,
34-
"Interval to request the Google Stackdriver Monitoring Metrics for. Only the most recent data point is used ($STACKDRIVER_EXPORTER_MONITORING_METRICS_INTERVAL).",
35-
)
36-
37-
monitoringMetricsOffset = flag.Duration(
38-
"monitoring.metrics-offset", 0*time.Second,
39-
"Offset for the Google Stackdriver Monitoring Metrics interval into the past ($STACKDRIVER_EXPORTER_MONITORING_METRICS_OFFSET).",
40-
)
41-
42-
listenAddress = flag.String(
43-
"web.listen-address", ":9255",
44-
"Address to listen on for web interface and telemetry ($STACKDRIVER_EXPORTER_WEB_LISTEN_ADDRESS).",
45-
)
46-
47-
metricsPath = flag.String(
48-
"web.telemetry-path", "/metrics",
49-
"Path under which to expose Prometheus metrics ($STACKDRIVER_EXPORTER_WEB_TELEMETRY_PATH)).",
50-
)
51-
52-
showVersion = flag.Bool(
53-
"version", false,
54-
"Print version information.",
55-
)
56-
)
21+
projectID = kingpin.Flag(
22+
"google.project-id", "Google Project ID ($STACKDRIVER_EXPORTER_GOOGLE_PROJECT_ID).",
23+
).Envar("STACKDRIVER_EXPORTER_GOOGLE_PROJECT_ID").Required().String()
5724

58-
func init() {
59-
prometheus.MustRegister(version.NewCollector("stackdriver_exporter"))
60-
}
25+
monitoringMetricsTypePrefixes = kingpin.Flag(
26+
"monitoring.metrics-type-prefixes", "Comma separated Google Stackdriver Monitoring Metric Type prefixes ($STACKDRIVER_EXPORTER_MONITORING_METRICS_TYPE_PREFIXES).",
27+
).Envar("STACKDRIVER_EXPORTER_MONITORING_METRICS_TYPE_PREFIXES").Required().String()
6128

62-
func overrideFlagsWithEnvVars() {
63-
overrideWithEnvVar("STACKDRIVER_EXPORTER_GOOGLE_PROJECT_ID", projectID)
64-
overrideWithEnvVar("STACKDRIVER_EXPORTER_MONITORING_METRICS_TYPE_PREFIXES", monitoringMetricsTypePrefixes)
65-
overrideWithEnvDuration("STACKDRIVER_EXPORTER_MONITORING_METRICS_INTERVAL", monitoringMetricsInterval)
66-
overrideWithEnvDuration("STACKDRIVER_EXPORTER_MONITORING_METRICS_OFFSET", monitoringMetricsOffset)
67-
overrideWithEnvVar("STACKDRIVER_EXPORTER_WEB_LISTEN_ADDRESS", listenAddress)
68-
overrideWithEnvVar("STACKDRIVER_EXPORTER_WEB_TELEMETRY_PATH", metricsPath)
69-
}
29+
monitoringMetricsInterval = kingpin.Flag(
30+
"monitoring.metrics-interval", "Interval to request the Google Stackdriver Monitoring Metrics for. Only the most recent data point is used ($STACKDRIVER_EXPORTER_MONITORING_METRICS_INTERVAL).",
31+
).Envar("STACKDRIVER_EXPORTER_MONITORING_METRICS_INTERVAL").Default("5m").Duration()
7032

71-
func overrideWithEnvVar(name string, value *string) {
72-
envValue := os.Getenv(name)
73-
if envValue != "" {
74-
*value = envValue
75-
}
76-
}
33+
monitoringMetricsOffset = kingpin.Flag(
34+
"monitoring.metrics-offset", "Offset for the Google Stackdriver Monitoring Metrics interval into the past ($STACKDRIVER_EXPORTER_MONITORING_METRICS_OFFSET).",
35+
).Envar("STACKDRIVER_EXPORTER_MONITORING_METRICS_OFFSET").Default("0s").Duration()
7736

78-
func overrideWithEnvDuration(name string, value *time.Duration) {
79-
envValue := os.Getenv(name)
80-
if envValue != "" {
81-
var err error
82-
*value, err = time.ParseDuration(envValue)
83-
if err != nil {
84-
log.Fatalf("Invalid `%s`: %s", name, err)
85-
}
86-
}
37+
listenAddress = kingpin.Flag(
38+
"web.listen-address", "Address to listen on for web interface and telemetry ($STACKDRIVER_EXPORTER_WEB_LISTEN_ADDRESS).",
39+
).Envar("STACKDRIVER_EXPORTER_WEB_LISTEN_ADDRESS").Default(":9255").String()
40+
41+
metricsPath = kingpin.Flag(
42+
"web.telemetry-path", "Path under which to expose Prometheus metrics ($STACKDRIVER_EXPORTER_WEB_TELEMETRY_PATH).",
43+
).Envar("STACKDRIVER_EXPORTER_WEB_TELEMETRY_PATH").Default("/metrics").String()
44+
)
45+
46+
func init() {
47+
prometheus.MustRegister(version.NewCollector("stackdriver_exporter"))
8748
}
8849

8950
func createMonitoringService() (*monitoring.Service, error) {
@@ -103,13 +64,10 @@ func createMonitoringService() (*monitoring.Service, error) {
10364
}
10465

10566
func main() {
106-
flag.Parse()
107-
overrideFlagsWithEnvVars()
108-
109-
if *showVersion {
110-
fmt.Fprintln(os.Stdout, version.Print("stackdriver_exporter"))
111-
os.Exit(0)
112-
}
67+
log.AddFlags(kingpin.CommandLine)
68+
kingpin.Version(version.Print("stackdriver_exporter"))
69+
kingpin.HelpFlag.Short('h')
70+
kingpin.Parse()
11371

11472
if *projectID == "" {
11573
log.Error("Flag `google.project-id` is required")

0 commit comments

Comments
 (0)