func()

in log_store.go [971:1020]


func (s *LogStore) getLogsV3Internal(req *GetLogRequest) (*GetLogsV3Response, *http.Response, error) {
	reqBody, err := json.Marshal(req)
	if err != nil {
		return nil, nil, err
	}
	h := map[string]string{
		"x-log-bodyrawsize": fmt.Sprintf("%v", len(reqBody)),
		"Content-Type":      "application/json",
		"Accept-Encoding":   "lz4",
	}
	uri := fmt.Sprintf("/logstores/%s/logs", s.Name)
	r, err := request(s.project, "POST", uri, h, reqBody)
	if err != nil {
		return nil, nil, NewClientError(err)
	}
	defer r.Body.Close()

	respBody, err := ioutil.ReadAll(r.Body)
	if err != nil {
		return nil, nil, readResponseError(err)
	}
	if r.StatusCode != http.StatusOK {
		err := new(Error)
		if jErr := json.Unmarshal(respBody, err); jErr != nil {
			return nil, nil, NewBadResponseError(string(respBody), r.Header, r.StatusCode)
		}
		return nil, nil, err
	}
	if _, ok := r.Header[BodyRawSize]; ok {
		if len(r.Header[BodyRawSize]) > 0 {
			bodyRawSize, err := strconv.ParseInt(r.Header[BodyRawSize][0], 10, 64)
			if err != nil {
				return nil, nil, NewBadResponseError(string(respBody), r.Header, r.StatusCode)
			}
			out := make([]byte, bodyRawSize)
			if bodyRawSize != 0 {
				len, err := lz4.UncompressBlock(respBody, out)
				if err != nil || int64(len) != bodyRawSize {
					return nil, nil, NewBadResponseError(string(respBody), r.Header, r.StatusCode)
				}
			}
			respBody = out
		}
	}
	var result GetLogsV3Response
	if err = json.Unmarshal(respBody, &result); err != nil {
		return nil, nil, NewBadResponseError(string(respBody), r.Header, r.StatusCode)
	}
	return &result, r, nil
}