in cloudflare_exporter.go [287:322]
func (e *exporter) getZones(ctx context.Context) (map[string]string, error) {
// TODO handle >50 zones (the API maximum per page) by requesting successive
// pages. For now, we don't anticipate having >50 zones any time soon.
req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.apiBaseURL+"/zones?per_page=50", nil)
if err != nil {
return nil, err
}
req.Header.Set("X-AUTH-EMAIL", e.email)
req.Header.Set("X-AUTH-KEY", e.apiKey)
var zones map[string]string
duration, err := timeOperation(func() error {
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
if resp.StatusCode != http.StatusOK {
err = fmt.Errorf("expected status 200, got %d", resp.StatusCode)
return err
}
var zonesFilter []string
if *cfZones != "" {
zonesFilter = strings.Split(*cfZones, ",")
}
defer resp.Body.Close()
zones, err = parseZoneIDs(resp.Body, zonesFilter)
if err != nil {
return err
}
return nil
})
level.Debug(e.logger).Log("request", "list zones", "duration", duration.Seconds(), "msg", "finished request")
return zones, err
}