func main()

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)
	}
}