Skip to content

Commit 5c2c1ba

Browse files
authored
Merge pull request #133 from breakroom/telemetry-request-response-bytes
Add request + response body bytes to telemetry measurements
2 parents 46ed0a2 + bbd1d4e commit 5c2c1ba

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

.tool-versions

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
elixir 1.17.1-otp-27
2-
erlang 27.0
1+
elixir 1.17.3-otp-27
2+
erlang 27.1.2

lib/snap/request.ex

+15-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ defmodule Snap.Request do
3030

3131
body = encode_body(body, json_library)
3232
headers = set_default_headers(headers)
33+
request_body_bytes = count_bytes(body)
3334

3435
start_time = System.monotonic_time()
3536

@@ -40,6 +41,7 @@ defmodule Snap.Request do
4041

4142
result = parse_response(response, json_library)
4243
status = parse_status(response)
44+
response_body_bytes = count_response_bytes(response)
4345

4446
decode_time = System.monotonic_time() - response_time - start_time
4547
total_time = response_time + decode_time
@@ -60,7 +62,9 @@ defmodule Snap.Request do
6062
measurements = %{
6163
response_time: response_time,
6264
decode_time: decode_time,
63-
total_time: total_time
65+
total_time: total_time,
66+
request_body_bytes: request_body_bytes,
67+
response_body_bytes: response_body_bytes
6468
}
6569

6670
uri = URI.parse(url)
@@ -99,6 +103,16 @@ defmodule Snap.Request do
99103
defp parse_status({:ok, %HTTPClient.Response{status: status}}), do: status
100104
defp parse_status({:error, _}), do: nil
101105

106+
defp count_response_bytes({:ok, %HTTPClient.Response{body: body}}) do
107+
count_bytes(body)
108+
end
109+
110+
defp count_response_bytes({:error, _}), do: 0
111+
112+
defp count_bytes(nil), do: 0
113+
defp count_bytes(binary) when is_binary(binary), do: byte_size(binary)
114+
defp count_bytes(list) when is_list(list), do: IO.iodata_length(list)
115+
102116
defp telemetry_prefix(cluster) do
103117
config = cluster.config()
104118

test/telemetry_test.exs

+3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ defmodule Snap.TelemetryTest do
2222
assert measurements.total_time ==
2323
measurements.response_time + measurements.decode_time
2424

25+
assert measurements.request_body_bytes == 0
26+
assert measurements.response_body_bytes > 0
27+
2528
send(self(), :logged)
2629
end
2730

0 commit comments

Comments
 (0)