summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.devcontainer/devcontainer.json2
-rw-r--r--src/couch_prometheus/src/couch_prometheus_server.erl15
-rw-r--r--src/couch_prometheus/src/couch_prometheus_util.erl8
3 files changed, 16 insertions, 9 deletions
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index a14b7b1e6..5e577d96d 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -26,4 +26,4 @@
"postCreateCommand": "./configure && make",
"extensions": ["erlang-ls.erlang-ls"]
-}
+} \ No newline at end of file
diff --git a/src/couch_prometheus/src/couch_prometheus_server.erl b/src/couch_prometheus/src/couch_prometheus_server.erl
index 70c4790ab..939ce00cf 100644
--- a/src/couch_prometheus/src/couch_prometheus_server.erl
+++ b/src/couch_prometheus/src/couch_prometheus_server.erl
@@ -177,24 +177,27 @@ get_io_stats() ->
].
get_message_queue_stats() ->
- QLenFun = fun(Name) -> message_queue_len(whereis(Name)) end,
- Queues = lists:map(QLenFun, registered()),
+ QFun = fun(Name) -> {Name, message_queue_len(whereis(Name))} end,
+ Queues = lists:map(QFun, registered()),
+ QueueLens = lists:map(fun({_, Len}) -> Len end, Queues),
+ QueueLenByLabel = lists:map(fun({Name, Len}) -> {[{queue_name, Name}], Len} end, Queues),
[
to_prom(
- erlang_message_queues, gauge, "total size of all message queues", lists:sum(Queues)
+ erlang_message_queues, gauge, "total size of all message queues", lists:sum(QueueLens)
),
to_prom(
erlang_message_queue_min,
gauge,
"minimum size across all message queues",
- lists:min(Queues)
+ lists:min(QueueLens)
),
to_prom(
erlang_message_queue_max,
gauge,
"maximum size across all message queues",
- lists:max(Queues)
- )
+ lists:max(QueueLens)
+ ),
+ to_prom(erlang_message_queue_size, gauge, "size of message queue", QueueLenByLabel)
].
message_queue_len(undefined) ->
diff --git a/src/couch_prometheus/src/couch_prometheus_util.erl b/src/couch_prometheus/src/couch_prometheus_util.erl
index 9e4a74e49..16886f4a7 100644
--- a/src/couch_prometheus/src/couch_prometheus_util.erl
+++ b/src/couch_prometheus/src/couch_prometheus_util.erl
@@ -109,9 +109,13 @@ type_def(Metric, Type, Desc) ->
to_bin(io_lib:format("# TYPE ~s ~s", [Name, Type]))
].
-to_prom(Metric, Type, Desc, Data) ->
+% support creating a metric series with multiple label/values.
+% Instances is of the form [{[{LabelName, LabelValue}], Value}, ...]
+to_prom(Metric, Type, Desc, Instances) when is_list(Instances) ->
TypeStr = type_def(Metric, Type, Desc),
- [TypeStr] ++ to_prom(Metric, Data).
+ [TypeStr] ++ lists:flatmap(fun(Inst) -> to_prom(Metric, Inst) end, Instances);
+to_prom(Metric, Type, Desc, Data) ->
+ to_prom(Metric, Type, Desc, [Data]).
to_prom(Metric, Instances) when is_list(Instances) ->
lists:flatmap(fun(Inst) -> to_prom(Metric, Inst) end, Instances);