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 |
27981 |
case is_instrumented(HookName) of |
10 |
|
true -> |
11 |
18690 |
EventName = event_name(HookName), |
12 |
18690 |
persistent_term:put({?MODULE, HookName}, EventName), |
13 |
18690 |
try |
14 |
18690 |
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 |
9291 |
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 |
16877 |
case is_instrumented(HookName) of |
33 |
|
true -> |
34 |
14076 |
EventName = event_name(HookName), |
35 |
14076 |
mongoose_instrument:tear_down(EventName, labels(Tag)), |
36 |
14076 |
persistent_term:erase({?MODULE, HookName}); |
37 |
|
false -> |
38 |
2801 |
ok |
39 |
|
end. |
40 |
|
|
41 |
|
-spec execute(gen_hook:hook_name(), gen_hook:hook_tag()) -> ok. |
42 |
|
execute(HookName, Tag) -> |
43 |
185402 |
case is_instrumented(HookName) of |
44 |
|
true -> |
45 |
86906 |
try persistent_term:get({?MODULE, HookName}) of |
46 |
|
EventName -> |
47 |
55557 |
mongoose_instrument:execute(EventName, labels(Tag), #{count => 1}) |
48 |
|
catch error:badarg -> |
49 |
31349 |
ok % no handlers registered for this hook |
50 |
|
end; |
51 |
|
false -> |
52 |
98496 |
ok |
53 |
|
end. |
54 |
|
|
55 |
|
-spec event_name(gen_hook:hook_name()) -> mongoose_instrument:event_name(). |
56 |
|
event_name(HookName) -> |
57 |
32766 |
list_to_atom("hook_" ++ atom_to_list(HookName)). |
58 |
|
|
59 |
|
-spec labels(gen_hook:hook_tag()) -> mongoose_instrument:labels(). |
60 |
1308 |
labels(global) -> #{}; |
61 |
87015 |
labels(HostType) -> #{host_type => HostType}. |
62 |
|
|
63 |
|
-spec is_instrumented(gen_hook:hook_name()) -> boolean(). |
64 |
4212 |
is_instrumented(sm_register_connection) -> false; |
65 |
3863 |
is_instrumented(sm_remove_connection) -> false; |
66 |
602 |
is_instrumented(auth_failed) -> false; |
67 |
11625 |
is_instrumented(user_send_packet) -> false; |
68 |
2577 |
is_instrumented(user_send_message) -> false; |
69 |
4839 |
is_instrumented(user_send_presence) -> false; |
70 |
3848 |
is_instrumented(user_send_iq) -> false; |
71 |
18077 |
is_instrumented(user_receive_packet) -> false; |
72 |
3381 |
is_instrumented(user_receive_message) -> false; |
73 |
9196 |
is_instrumented(user_receive_presence) -> false; |
74 |
5148 |
is_instrumented(user_receive_iq) -> false; |
75 |
574 |
is_instrumented(xmpp_bounce_message) -> false; |
76 |
584 |
is_instrumented(xmpp_stanza_dropped) -> false; |
77 |
28829 |
is_instrumented(xmpp_send_element) -> false; |
78 |
991 |
is_instrumented(roster_get) -> false; |
79 |
:-( |
is_instrumented(roster_set) -> false; |
80 |
:-( |
is_instrumented(roster_push) -> false; |
81 |
3582 |
is_instrumented(register_user) -> false; |
82 |
3577 |
is_instrumented(remove_user) -> false; |
83 |
602 |
is_instrumented(privacy_iq_get) -> false; |
84 |
679 |
is_instrumented(privacy_iq_set) -> false; |
85 |
3802 |
is_instrumented(privacy_check_packet) -> false; |
86 |
:-( |
is_instrumented(mam_get_prefs) -> false; |
87 |
:-( |
is_instrumented(mam_set_prefs) -> false; |
88 |
:-( |
is_instrumented(mam_remove_archive) -> false; |
89 |
:-( |
is_instrumented(mam_archive_message) -> false; |
90 |
:-( |
is_instrumented(mam_muc_get_prefs) -> false; |
91 |
:-( |
is_instrumented(mam_muc_set_prefs) -> false; |
92 |
:-( |
is_instrumented(mam_muc_remove_archive) -> false; |
93 |
:-( |
is_instrumented(mam_muc_lookup_messages) -> false; |
94 |
:-( |
is_instrumented(mam_muc_archive_message) -> false; |
95 |
119672 |
is_instrumented(_) -> true. |