in cloudflare_exporter.go [54:119]
func main() {
kingpin.Version(version.Print("cloudflare_exporter"))
kingpin.Parse()
logger := newPromLogger(*logLevel)
level.Info(logger).Log("msg", "starting cloudflare_exporter")
cfExporter := &exporter{
email: *cfEmail, apiKey: *cfAPIKey, apiBaseURL: *cfAPIBaseURL,
graphqlClient: graphql.NewClient(*cfAnalyticsAPIBaseURL),
scrapeTimeout: time.Duration(*scrapeTimeoutSeconds) * time.Second,
scrapeInterval: time.Duration(*cfScrapeIntervalSeconds) * time.Second,
logger: logger,
scrapeLock: &sync.Mutex{},
scrapeBucket: newTimeBucket(
time.Now(),
time.Duration(*cfScrapeIntervalSeconds)*time.Second,
time.Duration(*cfScrapeDataDelay)*time.Minute,
),
extractors: map[string]extractFunc{
"graphql:zones:trafficCached": extractZoneHTTPCached,
"graphql:zones:trafficCountry": extractZoneHTTPCountry,
"graphql:zones:trafficColo": extractZoneHTTPColo,
"graphql:zones:trafficDetails": extractZoneHTTPDetailed,
"graphql:zones:networkErrorLogs": extractZoneNetworkErrorLogs,
"graphql:zones:firewallEventsAdaptiveGroups": extractZoneFirewallEvents,
"graphql:zones:reputation": extractZoneIPReputation,
"graphql:zones:healthCheckEventsGroups": extractZoneHealthCheckEvents,
},
}
prometheus.MustRegister(version.NewCollector("cloudflare_exporter"))
registerMetrics(nil)
router := http.NewServeMux()
router.Handle("/metrics", promhttp.Handler())
runGroup := run.Group{}
level.Info(logger).Log("msg", "listening", "addr", *listenAddress)
serverSocket, err := net.Listen("tcp", *listenAddress)
if err != nil {
level.Error(logger).Log("error", err)
os.Exit(1)
}
runGroup.Add(func() error {
return http.Serve(serverSocket, router)
}, func(error) {
level.Info(logger).Log("msg", "closing server socket")
serverSocket.Close()
})
cfScrapeCtx, cancelCfScrape := context.WithCancel(context.Background())
runGroup.Add(func() error {
level.Info(logger).Log("msg", "starting Cloudflare scrape loop")
return cfExporter.scrapeCloudflare(cfScrapeCtx)
}, func(error) {
level.Info(logger).Log("msg", "ending Cloudflare scrape loop")
cancelCfScrape()
})
if err := runGroup.Run(); err != nil {
level.Error(logger).Log("error", err)
os.Exit(1)
}
}