1 |
|
%%============================================================================== |
2 |
|
%% Copyright 2019 Erlang Solutions Ltd. |
3 |
|
%% |
4 |
|
%% Licensed under the Apache License, Version 2.0 (the "License"); |
5 |
|
%% you may not use this file except in compliance with the License. |
6 |
|
%% You may obtain a copy of the License at |
7 |
|
%% |
8 |
|
%% http://www.apache.org/licenses/LICENSE-2.0 |
9 |
|
%% |
10 |
|
%% Unless required by applicable law or agreed to in writing, software |
11 |
|
%% distributed under the License is distributed on an "AS IS" BASIS, |
12 |
|
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 |
|
%% See the License for the specific language governing permissions and |
14 |
|
%% limitations under the License. |
15 |
|
%%============================================================================== |
16 |
|
-module(mongoose_metrics_probe_queues). |
17 |
|
-behaviour(mongoose_metrics_probe). |
18 |
|
|
19 |
|
-export([sample/0, datapoints/0]). |
20 |
|
|
21 |
|
datapoints() -> |
22 |
130 |
[regular, fsm, total]. |
23 |
|
|
24 |
|
sample() -> |
25 |
169 |
{FinalNormalQueueLen, FinalFsmQueueLen} = |
26 |
|
lists:foldl( |
27 |
|
fun(Pid, {NormalQueueLen, FsmQueueLen}) -> |
28 |
127042 |
{MsgQueueLen, Dict} = |
29 |
|
case erlang:process_info(Pid, [message_queue_len, dictionary]) of |
30 |
126864 |
[{message_queue_len, Msgs}, {dictionary, D}] -> {Msgs, D}; |
31 |
178 |
_ -> {0, []} |
32 |
|
end, |
33 |
127042 |
FsmInternal = proplists:get_value('$internal_queue_len', Dict, 0), |
34 |
127042 |
{ |
35 |
|
NormalQueueLen + MsgQueueLen, |
36 |
|
FsmQueueLen + FsmInternal |
37 |
|
} |
38 |
|
end, {0, 0}, erlang:processes()), |
39 |
169 |
#{ |
40 |
|
regular => FinalNormalQueueLen, |
41 |
|
fsm => FinalFsmQueueLen, |
42 |
|
total => FinalNormalQueueLen + FinalFsmQueueLen |
43 |
|
}. |