func()

in internal/agentcfg/elasticsearch.go [300:347]


func (f *ElasticsearchFetcher) singlePageRefresh(ctx context.Context, scrollID string) (cacheResult, error) {
	var result cacheResult
	var req *http.Request
	var err error
	var resp *http.Response

	switch scrollID {
	case "":
		req, err = http.NewRequestWithContext(ctx, http.MethodPost, "/"+ElasticsearchIndexName+"/_search", nil)
		if err != nil {
			return result, err
		}
		q := req.URL.Query()
		q.Set("scroll", strconv.FormatInt(f.cacheDuration.Milliseconds(), 10)+"ms")
		q.Set("size", strconv.FormatInt(int64(f.searchSize), 10))
		req.URL.RawQuery = q.Encode()

		resp, err = f.client.Perform(req)
	default:
		req, err = http.NewRequestWithContext(ctx, http.MethodPost, "/_search/scroll", nil)
		if err != nil {
			return result, err
		}
		q := req.URL.Query()
		q.Set("scroll", strconv.FormatInt(f.cacheDuration.Milliseconds(), 10)+"ms")
		q.Set("scroll_id", scrollID)
		req.URL.RawQuery = q.Encode()

		resp, err = f.client.Perform(req)
	}
	if err != nil {
		return result, err
	}
	defer resp.Body.Close()

	if resp.StatusCode >= http.StatusBadRequest {
		// Elasticsearch returns 401 on unauthorized requests and 403 on insufficient permission
		if resp.StatusCode == http.StatusUnauthorized || resp.StatusCode == http.StatusForbidden {
			f.invalidESCfg.Store(true)
		}
		bodyBytes, err := io.ReadAll(resp.Body)
		if err == nil {
			f.logger.Debugf("refresh cache elasticsearch returned status %d: %s", resp.StatusCode, string(bodyBytes))
		}
		return result, fmt.Errorf("refresh cache elasticsearch returned status %d", resp.StatusCode)
	}
	return result, json.NewDecoder(resp.Body).Decode(&result)
}