/
main.go
57 lines (41 loc) · 1.58 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package main
import (
"flag"
"time"
"github.com/gin-gonic/contrib/static"
"github.com/gin-gonic/gin"
)
var (
gitCommit = "dev"
buildDate = "dev"
bindPort = flag.Int("port", 4242, "HTTP port to listen")
kafkaBrokers = flag.String("kafka-brokers", "localhost", "The comma separated list of the Kafka brokers")
kafkaJMXAdminPassword = flag.String("kafka-jmx-password", "", "JMX password")
metricsInterval = flag.Int("metrics-interval", 30, "Interval (in seconds) for collecting metrics")
openTSDBURL = flag.String("opentsdb-url", "", "OpenTSDB URL to store metrics, e.g. http://url.to.opentsdb.com")
openTSDBToken = flag.String("opentsdb-token", "", "OpenTSDB Token to write metrics, e.g. user:password")
)
func main() {
flag.Parse()
metricsCtr := MetricsCtr{JMXAdminPassword: *kafkaJMXAdminPassword, Brokers: *kafkaBrokers}
tick := time.Second * time.Duration(*metricsInterval)
openTSDBChan := StartOpenTSDBReporter(*openTSDBURL, *openTSDBToken)
go metricsCtr.StartMetricCollector(tick, openTSDBChan)
serveAPI("kafka-metrics-collector", router(metricsCtr))
}
func router(mCtr MetricsCtr) *gin.Engine {
gin.SetMode(gin.ReleaseMode)
router := gin.Default()
//router.Use(cORSMiddleware())
// Serve static
router.Use(static.Serve("/", static.LocalFile("views", true)))
// Base routes
router.GET("/version", version)
router.GET("/api", index)
router.GET("/favicon.ico", favicon)
// Authentication
router.GET("/list", mCtr.ListMetrics)
router.GET("/metrics/:metrics", mCtr.GetMetrics)
router.GET("/metrics/:metrics/total", mCtr.GetTotalMetrics)
return router
}