Skip to content

Commit

Permalink
[receiver/datadogreceiver] Fix 202 response for series endpoints to b…
Browse files Browse the repository at this point in the history
…e on par with DD api spec (#35744)

#### Description
Changes the responses to be on par with the datadog api spec as per:
https://docs.datadoghq.com/api/latest/metrics/?code-lang=go

#### Link to tracking issue
Fixes #35743

<!--Describe what testing was performed and which tests were added.-->
#### Testing
Unit test is updated

<!--Describe the documentation added.-->
#### Documentation
Added changelog, no other docs seem to be required
  • Loading branch information
wiardvanrij authored Oct 15, 2024
1 parent 53b5dd7 commit 8b67271
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
27 changes: 27 additions & 0 deletions .chloggen/wvanrij-dd-receiver-task_35743.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: 'bug_fix'

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: 'datadogreceiver'

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: "Changes response message for `/api/v1/series` and `/api/v2/series` 202 response to be JSON and on par with Datadog API spec"

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [35743]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: []
12 changes: 10 additions & 2 deletions receiver/datadogreceiver/receiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,12 @@ func (ddr *datadogReceiver) handleV1Series(w http.ResponseWriter, req *http.Requ
return
}

w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusAccepted)
_, _ = w.Write([]byte("OK"))
response := map[string]string{
"status": "ok",
}
_ = json.NewEncoder(w).Encode(response)
}

// handleV2Series handles the v2 series endpoint https://docs.datadoghq.com/api/latest/metrics/#submit-metrics
Expand Down Expand Up @@ -312,8 +316,12 @@ func (ddr *datadogReceiver) handleV2Series(w http.ResponseWriter, req *http.Requ
return
}

w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusAccepted)
_, _ = w.Write([]byte("OK"))
response := map[string]any{
"errors": []string{},
}
_ = json.NewEncoder(w).Encode(response)
}

// handleCheckRun handles the service checks endpoint https://docs.datadoghq.com/api/latest/service-checks/
Expand Down
4 changes: 2 additions & 2 deletions receiver/datadogreceiver/receiver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ func TestDatadogMetricsV1_EndToEnd(t *testing.T) {

body, err := io.ReadAll(resp.Body)
require.NoError(t, multierr.Combine(err, resp.Body.Close()), "Must not error when reading body")
require.Equal(t, "OK", string(body), "Expected response to be 'OK', got %s", string(body))
require.JSONEq(t, `{"status": "ok"}`, string(body), "Expected JSON response to be `{\"status\": \"ok\"}`, got %s", string(body))
require.Equal(t, http.StatusAccepted, resp.StatusCode)

mds := sink.AllMetrics()
Expand Down Expand Up @@ -371,7 +371,7 @@ func TestDatadogMetricsV2_EndToEnd(t *testing.T) {

body, err := io.ReadAll(resp.Body)
require.NoError(t, multierr.Combine(err, resp.Body.Close()), "Must not error when reading body")
require.Equal(t, "OK", string(body), "Expected response to be 'OK', got %s", string(body))
require.JSONEq(t, `{"errors": []}`, string(body), "Expected JSON response to be `{\"errors\": []}`, got %s", string(body))
require.Equal(t, http.StatusAccepted, resp.StatusCode)

mds := sink.AllMetrics()
Expand Down

0 comments on commit 8b67271

Please sign in to comment.