@@ -38,19 +38,11 @@ const (
38
38
millisecondsPerSecond = 1000
39
39
)
40
40
41
- // HandlerErrorHandling defines how a Handler serving metrics will handle
42
- // errors.
43
- type HandlerErrorHandling int
41
+ // ErrorHandler is a function that handles errors
42
+ type ErrorHandler func (err error )
44
43
45
- // These constants cause handlers serving metrics to behave as described if
46
- // errors are encountered.
47
- const (
48
- // Ignore errors and try to push as many metrics to Graphite as possible.
49
- ContinueOnError HandlerErrorHandling = iota
50
-
51
- // Abort the push to Graphite upon the first error encountered.
52
- AbortOnError
53
- )
44
+ // DefaultErrorHandler skips received errors
45
+ var DefaultErrorHandler = func (err error ) {}
54
46
55
47
// Config defines the Graphite bridge config.
56
48
type Config struct {
@@ -72,13 +64,8 @@ type Config struct {
72
64
// The Gatherer to use for metrics. Defaults to prometheus.DefaultGatherer.
73
65
Gatherer prometheus.Gatherer
74
66
75
- // The logger that messages are written to. Defaults to no logging.
76
- Logger Logger
77
-
78
- // ErrorHandling defines how errors are handled. Note that errors are
79
- // logged regardless of the configured ErrorHandling provided Logger
80
- // is not nil.
81
- ErrorHandling HandlerErrorHandling
67
+ // ErrorHandler defines how errors are handled.
68
+ ErrorHandler ErrorHandler
82
69
}
83
70
84
71
// Bridge pushes metrics to the configured Graphite server.
@@ -89,19 +76,11 @@ type Bridge struct {
89
76
interval time.Duration
90
77
timeout time.Duration
91
78
92
- errorHandling HandlerErrorHandling
93
- logger Logger
79
+ errorHandler ErrorHandler
94
80
95
81
g prometheus.Gatherer
96
82
}
97
83
98
- // Logger is the minimal interface Bridge needs for logging. Note that
99
- // log.Logger from the standard library implements this interface, and it is
100
- // easy to implement by custom loggers, if they don't do so already anyway.
101
- type Logger interface {
102
- Println (v ... interface {})
103
- }
104
-
105
84
// NewBridge returns a pointer to a new Bridge struct.
106
85
func NewBridge (c * Config ) (* Bridge , error ) {
107
86
b := & Bridge {}
@@ -119,10 +98,6 @@ func NewBridge(c *Config) (*Bridge, error) {
119
98
b .g = c .Gatherer
120
99
}
121
100
122
- if c .Logger != nil {
123
- b .logger = c .Logger
124
- }
125
-
126
101
if c .Prefix != "" {
127
102
b .prefix = c .Prefix
128
103
}
@@ -140,7 +115,7 @@ func NewBridge(c *Config) (*Bridge, error) {
140
115
b .timeout = c .Timeout
141
116
}
142
117
143
- b .errorHandling = c .ErrorHandling
118
+ b .errorHandler = c .ErrorHandler
144
119
145
120
return b , nil
146
121
}
@@ -153,9 +128,7 @@ func (b *Bridge) Run(ctx context.Context) {
153
128
for {
154
129
select {
155
130
case <- ticker .C :
156
- if err := b .Push (); err != nil && b .logger != nil {
157
- b .logger .Println ("error pushing to Graphite:" , err )
158
- }
131
+ b .errorHandler (b .Push ())
159
132
case <- ctx .Done ():
160
133
return
161
134
}
@@ -165,17 +138,12 @@ func (b *Bridge) Run(ctx context.Context) {
165
138
// Push pushes Prometheus metrics to the configured Graphite server.
166
139
func (b * Bridge ) Push () error {
167
140
mfs , err := b .g .Gather ()
168
- if err != nil || len (mfs ) == 0 {
169
- switch b .errorHandling {
170
- case AbortOnError :
171
- return err
172
- case ContinueOnError :
173
- if b .logger != nil {
174
- b .logger .Println ("continue on error:" , err )
175
- }
176
- default :
177
- panic ("unrecognized error handling value" )
178
- }
141
+ if err != nil {
142
+ return err
143
+ }
144
+
145
+ if len (mfs ) == 0 {
146
+ return nil
179
147
}
180
148
181
149
conn , err := net .DialTimeout ("tcp" , b .url , b .timeout )
0 commit comments