You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by wi...@apache.org on 2023/03/13 18:57:39 UTC
[couchdb] 01/02: fix: prometheus counter metric naming
This is an automated email from the ASF dual-hosted git repository.
willholley pushed a commit to branch prometheus-help
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 8e34286436c0f96c7e98f647747a33cf7ded6c6f
Author: Will Holley <wi...@uk.ibm.com>
AuthorDate: Mon Mar 13 17:47:09 2023 +0000
fix: prometheus counter metric naming
`couch_prometheus_util:counter_metric/1` is intended to add a
`_total` suffix to the name of metrics with type `counter` if
the name does not already end with `_total`.
The implementation was previously incorrect, resulting in metrics
with names like `document_purges_total_total`.
This adds basic eunit tests for the failure / success scenarios and
fixes the implementation.
It is a breaking change for consumers of the `_node/_local/_prometheus`
endpoint, however, since the following metrics are renamed:
---
src/couch_prometheus/src/couch_prometheus_util.erl | 80 +++++++++++++++++++++-
1 file changed, 77 insertions(+), 3 deletions(-)
diff --git a/src/couch_prometheus/src/couch_prometheus_util.erl b/src/couch_prometheus/src/couch_prometheus_util.erl
index 255df6876..c9563687e 100644
--- a/src/couch_prometheus/src/couch_prometheus_util.erl
+++ b/src/couch_prometheus/src/couch_prometheus_util.erl
@@ -146,9 +146,9 @@ path_to_name(Path) ->
counter_metric(Path) ->
Name = path_to_name(Path),
- case string:find(Name, <<"_total">>, trailing) == <<"_total">> of
- true -> Name;
- false -> to_bin(io_lib:format("~s_total", [Name]))
+ case string:find(Name, <<"_total">>, trailing) of
+ nomatch -> to_bin(io_lib:format("~s_total", [Name]));
+ _ -> Name
end.
to_bin(Data) when is_list(Data) ->
@@ -167,3 +167,77 @@ val(Data) ->
val(Key, Stats) ->
{Key, Data} = lists:keyfind(Key, 1, Stats),
val(Data).
+
+
+
+-ifdef(TEST).
+-include_lib("couch/include/couch_eunit.hrl").
+
+to_prom_test_() ->
+ [
+ ?_assertEqual(
+ <<"couchdb_ddoc_cache 10">>,
+ test_to_prom_output(ddoc_cache, counter, 10)
+ ),
+ ?_assertEqual(
+ <<"couchdb_httpd_status_codes{code=\"200\"} 3">>,
+ test_to_prom_output(httpd_status_codes, counter, {[{code, 200}], 3})
+ ),
+ ?_assertEqual(
+ <<"couchdb_temperature_celsius 36">>,
+ test_to_prom_output(temperature_celsius, gauge, 36)
+ ),
+ ?_assertEqual(
+ <<"couchdb_mango_query_time_seconds{quantile=\"0.75\"} 4.5">>,
+ test_to_prom_sum_output([mango_query_time], [
+ {value, [
+ {min, 0.0},
+ {max, 0.0},
+ {arithmetic_mean, 0.0},
+ {geometric_mean, 0.0},
+ {harmonic_mean, 0.0},
+ {median, 0.0},
+ {variance, 0.0},
+ {standard_deviation, 0.0},
+ {skewness, 0.0},
+ {kurtosis, 0.0},
+ {percentile, [
+ {50, 0.0},
+ {75, 4500},
+ {90, 0.0},
+ {95, 0.0},
+ {99, 0.0},
+ {999, 0.0}
+ ]},
+ {histogram, [
+ {0, 0}
+ ]},
+ {n, 0}
+ ]},
+ {type, histogram},
+ {desc, <<"length of time processing a mango query">>}
+ ])
+ )
+ ].
+
+counter_metric_test_() ->
+ [
+ ?_assertEqual(
+ "document_purges_total",
+ counter_metric([document_purges,total])
+ ),
+ ?_assertEqual(
+ "document_purges_total",
+ counter_metric([document_purges,total])
+ )
+ ].
+
+test_to_prom_output(Metric, Type, Val) ->
+ Out = to_prom(Metric, Type, Val),
+ lists:nth(2, Out).
+
+test_to_prom_sum_output(Metric, Info) ->
+ Out = to_prom_summary(Metric, Info),
+ lists:nth(3, Out).
+
+-endif.