1 |
|
-module(mongoose_instrument_hooks). |
2 |
|
|
3 |
|
-export([set_up/2, tear_down/2, execute/2]). |
4 |
|
|
5 |
|
-include("mongoose.hrl"). |
6 |
|
|
7 |
|
-spec set_up(gen_hook:hook_name(), gen_hook:hook_tag()) -> ok. |
8 |
|
set_up(HookName, Tag) -> |
9 |
27109 |
case is_instrumented(HookName) of |
10 |
|
true -> |
11 |
17978 |
EventName = event_name(HookName), |
12 |
17978 |
persistent_term:put({?MODULE, HookName}, EventName), |
13 |
17978 |
try |
14 |
17978 |
mongoose_instrument:set_up(EventName, labels(Tag), #{metrics => #{count => spiral}}) |
15 |
|
catch |
16 |
|
error:#{what := inconsistent_labels} -> |
17 |
:-( |
log_tag_error(HookName, Tag) |
18 |
|
end; |
19 |
|
false -> |
20 |
9131 |
ok |
21 |
|
end. |
22 |
|
|
23 |
|
-spec log_tag_error(gen_hook:hook_name(), gen_hook:hook_tag()) -> ok. |
24 |
|
log_tag_error(HookName, Tag) -> |
25 |
:-( |
?LOG_ERROR(#{what => inconsistent_hook_handler_tags, |
26 |
|
text => <<"A single hook should not have both global and host-type handlers. " |
27 |
|
"Instrumentation is not set up.">>, |
28 |
:-( |
hook_name => HookName, tag => Tag}). |
29 |
|
|
30 |
|
-spec tear_down(gen_hook:hook_name(), gen_hook:hook_tag()) -> ok. |
31 |
|
tear_down(HookName, Tag) -> |
32 |
16667 |
case is_instrumented(HookName) of |
33 |
|
true -> |
34 |
13640 |
EventName = event_name(HookName), |
35 |
13640 |
mongoose_instrument:tear_down(EventName, labels(Tag)), |
36 |
13640 |
persistent_term:erase({?MODULE, HookName}); |
37 |
|
false -> |
38 |
3027 |
ok |
39 |
|
end. |
40 |
|
|
41 |
|
-spec execute(gen_hook:hook_name(), gen_hook:hook_tag()) -> ok. |
42 |
|
execute(HookName, Tag) -> |
43 |
390857 |
case is_instrumented(HookName) of |
44 |
|
true -> |
45 |
178796 |
try persistent_term:get({?MODULE, HookName}) of |
46 |
|
EventName -> |
47 |
148169 |
mongoose_instrument:execute(EventName, labels(Tag), #{count => 1}) |
48 |
|
catch error:badarg -> |
49 |
30627 |
ok % no handlers registered for this hook |
50 |
|
end; |
51 |
|
false -> |
52 |
212061 |
ok |
53 |
|
end. |
54 |
|
|
55 |
|
-spec event_name(gen_hook:hook_name()) -> mongoose_instrument:event_name(). |
56 |
|
event_name(HookName) -> |
57 |
31618 |
list_to_atom("hook_" ++ atom_to_list(HookName)). |
58 |
|
|
59 |
|
-spec labels(gen_hook:hook_tag()) -> mongoose_instrument:labels(). |
60 |
102 |
labels(global) -> #{}; |
61 |
179685 |
labels(HostType) -> #{host_type => HostType}. |
62 |
|
|
63 |
|
-spec is_instrumented(gen_hook:hook_name()) -> boolean(). |
64 |
6883 |
is_instrumented(sm_register_connection) -> false; |
65 |
6534 |
is_instrumented(sm_remove_connection) -> false; |
66 |
573 |
is_instrumented(auth_failed) -> false; |
67 |
22211 |
is_instrumented(user_send_packet) -> false; |
68 |
5065 |
is_instrumented(user_send_message) -> false; |
69 |
7471 |
is_instrumented(user_send_presence) -> false; |
70 |
2402 |
is_instrumented(user_send_iq) -> false; |
71 |
40844 |
is_instrumented(user_receive_packet) -> false; |
72 |
14773 |
is_instrumented(user_receive_message) -> false; |
73 |
15422 |
is_instrumented(user_receive_presence) -> false; |
74 |
8733 |
is_instrumented(user_receive_iq) -> false; |
75 |
541 |
is_instrumented(xmpp_bounce_message) -> false; |
76 |
581 |
is_instrumented(xmpp_stanza_dropped) -> false; |
77 |
59980 |
is_instrumented(xmpp_send_element) -> false; |
78 |
932 |
is_instrumented(roster_get) -> false; |
79 |
:-( |
is_instrumented(roster_set) -> false; |
80 |
:-( |
is_instrumented(roster_push) -> false; |
81 |
6099 |
is_instrumented(register_user) -> false; |
82 |
6073 |
is_instrumented(remove_user) -> false; |
83 |
570 |
is_instrumented(privacy_iq_get) -> false; |
84 |
647 |
is_instrumented(privacy_iq_set) -> false; |
85 |
3963 |
is_instrumented(privacy_check_packet) -> false; |
86 |
287 |
is_instrumented(mam_get_prefs) -> false; |
87 |
434 |
is_instrumented(mam_set_prefs) -> false; |
88 |
632 |
is_instrumented(mam_remove_archive) -> false; |
89 |
7913 |
is_instrumented(mam_archive_message) -> false; |
90 |
70 |
is_instrumented(mam_muc_get_prefs) -> false; |
91 |
217 |
is_instrumented(mam_muc_set_prefs) -> false; |
92 |
760 |
is_instrumented(mam_muc_remove_archive) -> false; |
93 |
623 |
is_instrumented(mam_muc_lookup_messages) -> false; |
94 |
2986 |
is_instrumented(mam_muc_archive_message) -> false; |
95 |
210414 |
is_instrumented(_) -> true. |