Skip to content

Commit 051c2c0

Browse files
committed
rabbit_prometheus_handler: Delete manual gzip handling
The Cowboy stream handler `cowboy_compress_h` is already enabled for this endpoint so there's no need to perform gzipping manually. This change deletes the custom handling of accept-encoding. We previously returned a content-encoding of "identity" for non-gzipped requests, but according to <https://www.rfc-editor.org/rfc/rfc9110.html#section-8.4>, the content-encoding response header should not be set to identity. The test case is accurate anyways: the response is text, not something compressed.
1 parent 42f59e4 commit 051c2c0

File tree

4 files changed

+19
-50
lines changed

4 files changed

+19
-50
lines changed

deps/rabbitmq_prometheus/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ endef
99
PROJECT := rabbitmq_prometheus
1010
PROJECT_DESCRIPTION = Prometheus metrics for RabbitMQ
1111
PROJECT_MOD := rabbit_prometheus_app
12-
DEPS = accept cowboy rabbit rabbitmq_management_agent prometheus rabbitmq_web_dispatch
12+
DEPS = cowboy rabbit rabbitmq_management_agent prometheus rabbitmq_web_dispatch
1313
BUILD_DEPS = amqp_client rabbit_common rabbitmq_management
1414
TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers rabbitmq_stream
1515

deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl

Lines changed: 17 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
-define(SCRAPE_DURATION, telemetry_scrape_duration_seconds).
1616
-define(SCRAPE_SIZE, telemetry_scrape_size_bytes).
17-
-define(SCRAPE_ENCODED_SIZE, telemetry_scrape_encoded_size_bytes).
1817

1918
-define(AUTH_REALM, "Basic realm=\"RabbitMQ Prometheus\"").
2019

@@ -58,14 +57,9 @@ setup_metrics(Registry) ->
5857
{help, "Scrape size, not encoded"},
5958
{labels, ["registry", "content_type"]},
6059
{registry, Registry}],
61-
ScrapeEncodedSize = [{name, ?SCRAPE_ENCODED_SIZE},
62-
{help, "Scrape size, encoded"},
63-
{labels, ["registry", "content_type", "encoding"]},
64-
{registry, Registry}],
6560

6661
prometheus_summary:declare(ScrapeDuration),
67-
prometheus_summary:declare(ScrapeSize),
68-
prometheus_summary:declare(ScrapeEncodedSize).
62+
prometheus_summary:declare(ScrapeSize).
6963

7064
%% ===================================================================
7165
%% Private functions
@@ -100,47 +94,23 @@ format_metrics(Request, Registry) ->
10094
%% Formatting registries produces large binaries. Fullsweep eagerly to
10195
%% evict the large binaries faster and make GC cheaper.
10296
process_flag(fullsweep_after, 0),
103-
AcceptEncoding = cowboy_req:header(<<"accept-encoding">>, Request, undefined),
10497
ContentType = prometheus_text_format:content_type(),
105-
Encoding = accept_encoding_header:negotiate(AcceptEncoding, [<<"identity">>,
106-
<<"gzip">>]),
107-
Headers = #{<<"content-type">> => ContentType,
108-
<<"content-encoding">> => Encoding},
109-
case Encoding of
110-
<<"gzip">> ->
111-
Scrape = prometheus_summary:observe_duration(
112-
Registry,
113-
?SCRAPE_DURATION,
114-
[Registry, ContentType],
115-
fun () -> prometheus_text_format:format(Registry) end),
116-
prometheus_summary:observe(Registry,
117-
?SCRAPE_SIZE,
118-
[Registry, ContentType],
119-
iolist_size(Scrape)),
120-
Encoded = zlib:gzip(Scrape),
121-
prometheus_summary:observe(telemetry_registry(),
122-
?SCRAPE_ENCODED_SIZE,
123-
[Registry, ContentType, Encoding],
124-
iolist_size(Encoded)),
125-
cowboy_req:reply(200, Headers, Encoded, Request);
126-
<<"identity">> ->
127-
Req = cowboy_req:stream_reply(200, Headers, Request),
128-
Fmt = fun(Data, Size) ->
129-
cowboy_req:stream_body(Data, nofin, Req),
130-
Size + iolist_size(Data)
131-
end,
132-
Size = prometheus_summary:observe_duration(
133-
Registry,
134-
?SCRAPE_DURATION,
135-
[Registry, ContentType],
136-
fun () -> prometheus_text_format:format_into(Registry, 0, Fmt) end),
137-
cowboy_req:stream_body(<<>>, fin, Req),
138-
prometheus_summary:observe(Registry,
139-
?SCRAPE_SIZE,
140-
[Registry, ContentType],
141-
Size),
142-
Req
143-
end.
98+
Req = cowboy_req:stream_reply(200, #{<<"content-type">> => ContentType}, Request),
99+
Fmt = fun(Data, Size) ->
100+
cowboy_req:stream_body(Data, nofin, Req),
101+
Size + iolist_size(Data)
102+
end,
103+
Size = prometheus_summary:observe_duration(
104+
Registry,
105+
?SCRAPE_DURATION,
106+
[Registry, ContentType],
107+
fun () -> prometheus_text_format:format_into(Registry, 0, Fmt) end),
108+
cowboy_req:stream_body(<<>>, fin, Req),
109+
prometheus_summary:observe(Registry,
110+
?SCRAPE_SIZE,
111+
[Registry, ContentType],
112+
Size),
113+
Req.
144114

145115
validate_registry(undefined, auto) ->
146116
{true, default};

deps/rabbitmq_prometheus/test/rabbit_prometheus_http_SUITE.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ content_type_test(Config) ->
373373

374374
encoding_test(Config) ->
375375
{Headers, Body} = http_get(Config, [{"accept-encoding", "deflate"}], 200),
376-
?assertMatch("identity", proplists:get_value("content-encoding", Headers)),
376+
?assertMatch(undefined, proplists:get_value("content-encoding", Headers)),
377377
?assertEqual(match, re:run(Body, "^# TYPE", [{capture, none}, multiline])).
378378

379379
gzip_encoding_test(Config) ->

rabbitmq-components.mk

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ endif
3939
# We do that in this file, which is included by all projects, to ensure
4040
# all projects use the same versions. It avoids conflicts.
4141

42-
dep_accept = hex 0.3.5
4342
dep_cowboy = hex 2.14.1
4443
dep_cowlib = hex 2.16.0
4544
dep_credentials_obfuscation = hex 3.5.0

0 commit comments

Comments
 (0)