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 |
1411 |
case is_instrumented(HookName) of |
10 |
|
true -> |
11 |
961 |
EventName = event_name(HookName), |
12 |
961 |
persistent_term:put({?MODULE, HookName}, EventName), |
13 |
961 |
try |
14 |
961 |
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 |
450 |
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 |
1006 |
case is_instrumented(HookName) of |
33 |
|
true -> |
34 |
761 |
EventName = event_name(HookName), |
35 |
761 |
mongoose_instrument:tear_down(EventName, labels(Tag)), |
36 |
761 |
persistent_term:erase({?MODULE, HookName}); |
37 |
|
false -> |
38 |
245 |
ok |
39 |
|
end. |
40 |
|
|
41 |
|
-spec execute(gen_hook:hook_name(), gen_hook:hook_tag()) -> ok. |
42 |
|
execute(HookName, Tag) -> |
43 |
49531 |
case is_instrumented(HookName) of |
44 |
|
true -> |
45 |
22322 |
try persistent_term:get({?MODULE, HookName}) of |
46 |
|
EventName -> |
47 |
19318 |
mongoose_instrument:execute(EventName, labels(Tag), #{count => 1}) |
48 |
|
catch error:badarg -> |
49 |
3004 |
ok % no handlers registered for this hook |
50 |
|
end; |
51 |
|
false -> |
52 |
27209 |
ok |
53 |
|
end. |
54 |
|
|
55 |
|
-spec event_name(gen_hook:hook_name()) -> mongoose_instrument:event_name(). |
56 |
|
event_name(HookName) -> |
57 |
1722 |
list_to_atom("hook_" ++ atom_to_list(HookName)). |
58 |
|
|
59 |
|
-spec labels(gen_hook:hook_tag()) -> mongoose_instrument:labels(). |
60 |
4 |
labels(global) -> #{}; |
61 |
21036 |
labels(HostType) -> #{host_type => HostType}. |
62 |
|
|
63 |
|
-spec is_instrumented(gen_hook:hook_name()) -> boolean(). |
64 |
675 |
is_instrumented(sm_register_connection) -> false; |
65 |
675 |
is_instrumented(sm_remove_connection) -> false; |
66 |
16 |
is_instrumented(auth_failed) -> false; |
67 |
2664 |
is_instrumented(user_send_packet) -> false; |
68 |
676 |
is_instrumented(user_send_message) -> false; |
69 |
679 |
is_instrumented(user_send_presence) -> false; |
70 |
:-( |
is_instrumented(user_send_iq) -> false; |
71 |
5487 |
is_instrumented(user_receive_packet) -> false; |
72 |
2642 |
is_instrumented(user_receive_message) -> false; |
73 |
1468 |
is_instrumented(user_receive_presence) -> false; |
74 |
:-( |
is_instrumented(user_receive_iq) -> false; |
75 |
18 |
is_instrumented(xmpp_bounce_message) -> false; |
76 |
16 |
is_instrumented(xmpp_stanza_dropped) -> false; |
77 |
7635 |
is_instrumented(xmpp_send_element) -> false; |
78 |
25 |
is_instrumented(roster_get) -> false; |
79 |
:-( |
is_instrumented(roster_set) -> false; |
80 |
:-( |
is_instrumented(roster_push) -> false; |
81 |
614 |
is_instrumented(register_user) -> false; |
82 |
614 |
is_instrumented(remove_user) -> false; |
83 |
16 |
is_instrumented(privacy_iq_get) -> false; |
84 |
16 |
is_instrumented(privacy_iq_set) -> false; |
85 |
80 |
is_instrumented(privacy_check_packet) -> false; |
86 |
82 |
is_instrumented(mam_get_prefs) -> false; |
87 |
124 |
is_instrumented(mam_set_prefs) -> false; |
88 |
200 |
is_instrumented(mam_remove_archive) -> false; |
89 |
2190 |
is_instrumented(mam_archive_message) -> false; |
90 |
22 |
is_instrumented(mam_muc_get_prefs) -> false; |
91 |
64 |
is_instrumented(mam_muc_set_prefs) -> false; |
92 |
210 |
is_instrumented(mam_muc_remove_archive) -> false; |
93 |
168 |
is_instrumented(mam_muc_lookup_messages) -> false; |
94 |
828 |
is_instrumented(mam_muc_archive_message) -> false; |
95 |
24044 |
is_instrumented(_) -> true. |