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
}