func()

in cmd/intake-receiver/main.go [153:205]


func (h *requestHandler) handleRequest(r *http.Request) (int, error) {
	buf := h.bufPool.Get().(*bytes.Buffer)
	defer func() {
		buf.Reset()
		h.bufPool.Put(buf)
	}()

	var err error
	body := r.Body
	encoding := r.Header.Get("Content-Encoding")
	switch encoding {
	case "deflate":
		body, err = zlib.NewReader(r.Body)
		defer body.Close()
	case "gzip":
		body, err = gzip.NewReader(r.Body)
		defer body.Close()
	case "":
	default:
		return http.StatusBadRequest, fmt.Errorf(
			"Content-Encoding %s not supported", encoding,
		)
	}
	if err != nil {
		return http.StatusInternalServerError, fmt.Errorf(
			"unable to create compressed reader for %s: %v", encoding, err,
		)
	}

	var meta metadata
	if err := h.processBatch(body, buf, &meta); err != nil {
		return http.StatusBadRequest, fmt.Errorf("invalid request: %v", err)
	}
	if meta.IsEmpty() {
		return http.StatusBadRequest, errors.New("agent not found in metadata")
	}

	fileName := filepath.Join(h.basePath, agentFileName(meta))
	f, err := h.agentFileMap.Get(fileName)
	if err != nil {
		return http.StatusInternalServerError, fmt.Errorf(
			"couldn't retrieve storage file: %s", fileName,
		)
	}
	h.agentFileMap.Set(fileName, f)

	if _, err := io.Copy(f, buf); err != nil {
		return http.StatusInternalServerError, fmt.Errorf(
			"failed writing to file: %s: %v", fileName, err,
		)
	}
	return http.StatusAccepted, nil
}