Skip to content

Commit b06e2d7

Browse files
authored
Merge pull request aptible#81 from krallin/default-metrics-port
Add default Prometheus port
2 parents 9155ef0 + 31262ce commit b06e2d7

File tree

3 files changed

+91
-3
lines changed

3 files changed

+91
-3
lines changed

main.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,15 @@ func main() {
2828
quiet := flag.Bool("quiet", false, "do not log informational messages (takes precedence over debug)")
2929
json := flag.Bool("json", false, "enable JSON logging")
3030
test := flag.Bool("test", false, "test crontab (does not run jobs)")
31-
prometheusListen := flag.String("prometheus-listen-address", "", "give a valid ip:port address to expose Prometheus metrics at /metrics")
31+
prometheusListen := flag.String(
32+
"prometheus-listen-address",
33+
"",
34+
fmt.Sprintf(
35+
"give a valid ip[:port] address to expose Prometheus metrics at /metrics (port defaults to %s), "+
36+
"use 0.0.0.0 for all network interfaces.",
37+
prometheus_metrics.DefaultPort,
38+
),
39+
)
3240
splitLogs := flag.Bool("split-logs", false, "split log output into stdout/stderr")
3341
passthroughLogs := flag.Bool("passthrough-logs", false, "passthrough logs from commands, do not wrap them in Supercronic logging")
3442
sentry := flag.String("sentry-dsn", "", "enable Sentry error logging, using provided DSN")

prometheus_metrics/prommetrics.go

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package prometheus_metrics
22

33
import (
44
"context"
5+
"fmt"
56
"net"
67
"net/http"
78

@@ -11,7 +12,8 @@ import (
1112
)
1213

1314
const (
14-
namespace = "supercronic"
15+
DefaultPort = "9746"
16+
namespace = "supercronic"
1517
)
1618

1719
func genMetricName(name string) string {
@@ -99,7 +101,40 @@ func (p *PrometheusMetrics) Reset() {
99101
p.CronsExecutionTimeHistogram.Reset()
100102
}
101103

104+
func getAddr(listenAddr string) (string, error) {
105+
if listenAddr == "" {
106+
return "", fmt.Errorf("Not address provided")
107+
}
108+
109+
// If the address is fine as-is, use it
110+
_, _, err1 := net.SplitHostPort(listenAddr)
111+
if err1 == nil {
112+
return listenAddr, nil
113+
}
114+
115+
// Otherwise, try to add the port
116+
listenAddrWithPort := net.JoinHostPort(listenAddr, DefaultPort)
117+
_, _, err2 := net.SplitHostPort(listenAddrWithPort)
118+
if err2 == nil {
119+
return listenAddrWithPort, nil
120+
}
121+
122+
return "", fmt.Errorf(
123+
"%s is not a valid address (%v), and neither is %s after adding the default port (%v)",
124+
listenAddr,
125+
err1,
126+
listenAddrWithPort,
127+
err2,
128+
)
129+
130+
}
131+
102132
func InitHTTPServer(listenAddr string, shutdownContext context.Context) (func() error, error) {
133+
addr, err := getAddr(listenAddr)
134+
if err != nil {
135+
return nil, err
136+
}
137+
103138
promSrv := &http.Server{}
104139

105140
http.Handle("/metrics", promhttp.Handler())
@@ -118,7 +153,7 @@ func InitHTTPServer(listenAddr string, shutdownContext context.Context) (func()
118153
return promSrv.Shutdown(shutdownContext)
119154
}
120155

121-
listener, err := net.Listen("tcp", listenAddr)
156+
listener, err := net.Listen("tcp", addr)
122157
if err != nil {
123158
return shutdownClosure, err
124159
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package prometheus_metrics
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestGetAddr(t *testing.T) {
10+
addr, err := getAddr("127.0.0.1:123")
11+
if assert.Nil(t, err) {
12+
assert.Equal(t, "127.0.0.1:123", addr)
13+
}
14+
15+
addr, err = getAddr("127.0.0.1")
16+
if assert.Nil(t, err) {
17+
assert.Equal(t, "127.0.0.1:9746", addr)
18+
}
19+
20+
addr, err = getAddr("[127.0.0.1]")
21+
if assert.Nil(t, err) {
22+
assert.Equal(t, "[127.0.0.1]:9746", addr)
23+
}
24+
25+
addr, err = getAddr("[::]:123")
26+
if assert.Nil(t, err) {
27+
assert.Equal(t, "[::]:123", addr)
28+
}
29+
30+
addr, err = getAddr("::")
31+
if assert.Nil(t, err) {
32+
assert.Equal(t, "[::]:9746", addr)
33+
}
34+
35+
addr, err = getAddr("0.0.0.0")
36+
if assert.Nil(t, err) {
37+
assert.Equal(t, "0.0.0.0:9746", addr)
38+
}
39+
40+
_, err = getAddr("")
41+
assert.NotNil(t, err)
42+
43+
_, err = getAddr("[::]")
44+
assert.NotNil(t, err)
45+
}

0 commit comments

Comments
 (0)