@@ -33,25 +33,29 @@ func main() {
3333 log .SetLevel (level )
3434
3535 log .Info ("Starting kafka minion version%v" , opts .Version )
36- startCollector (opts )
36+ kafkaCollector , err := collector .NewKafkaCollector (opts )
37+ if err != nil {
38+ log .Fatal ("Could not create kafka exporter. " , err )
39+ }
40+ prometheus .MustRegister (kafkaCollector )
41+ log .Infof ("Successfully started kafka exporter" )
3742
3843 // Start listening on /metrics endpoint
3944 http .Handle ("/metrics" , promhttp .Handler ())
45+ http .Handle ("/healthcheck" , healthcheck (kafkaCollector ))
4046 listenAddress := fmt .Sprintf (":%d" , opts .Port )
4147 log .Fatal (http .ListenAndServe (listenAddress , nil ))
4248 log .Infof ("Listening on: '%s" , listenAddress )
43-
4449}
4550
46- func startCollector (opts * options.Options ) {
47- log .Infof ("Starting kafka lag exporter v%v" , opts .Version )
48-
49- // Start kafka exporter
50- log .Infof ("Starting kafka exporter" )
51- kafkaCollector , err := collector .NewKafkaCollector (opts )
52- if err != nil {
53- log .Fatal ("Could not create kafka exporter. " , err )
54- }
55- prometheus .MustRegister (kafkaCollector )
56- log .Infof ("Successfully started kafka exporter" )
51+ func healthcheck (kafkaCollector * collector.Collector ) http.HandlerFunc {
52+ return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
53+ log .Debug ("Healthcheck has been called" )
54+ isHealthy := kafkaCollector .IsHealthy ()
55+ if isHealthy {
56+ w .Write ([]byte ("Status: Healthy" ))
57+ } else {
58+ http .Error (w , "Healthcheck failed" , http .StatusServiceUnavailable )
59+ }
60+ })
5761}
0 commit comments