func()

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
}