Skip to content

Commit 2bfbe57

Browse files
authored
Merge pull request #4542 from esl/exometer-crash
Check Exometer is loaded before calling it
2 parents c33bd53 + 77d43a9 commit 2bfbe57

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/system_metrics/mongoose_system_metrics_collector.erl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
-export_type([report_struct/0]).
1212

13-
-export([collect/1]).
13+
-export([collect/2]).
1414

15-
collect(PrevReport) ->
15+
collect(PrevReport, ExometerEnabled) ->
1616
ReportResults = [ get_reports(RGetter) || RGetter <- report_getters()],
17-
StanzasCount = get_xmpp_stanzas_count(PrevReport),
17+
StanzasCount = get_xmpp_stanzas_count(PrevReport, ExometerEnabled),
1818
lists:flatten(ReportResults ++ StanzasCount).
1919

2020
-spec get_reports(fun(() -> [report_struct()])) -> [report_struct()].
@@ -180,7 +180,9 @@ get_outgoing_pools() ->
180180
[#{name => outgoing_pool,
181181
params => #{value => Type}} || #{type := Type} <- OutgoingPools].
182182

183-
get_xmpp_stanzas_count(PrevReport) ->
183+
get_xmpp_stanzas_count(_PrevReport, false = _ExometerEnabled) ->
184+
[];
185+
get_xmpp_stanzas_count(PrevReport, true) ->
184186
StanzaTypes = [xmppMessageSent, xmppMessageReceived, xmppIqSent,
185187
xmppIqReceived, xmppPresenceSent, xmppPresenceReceived],
186188
NewCount = [count_stanzas(StanzaType) || StanzaType <- StanzaTypes],

src/system_metrics/service_mongoose_system_metrics.erl

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
{report_after :: non_neg_integer(),
3737
reporter_monitor = none :: none | reference(),
3838
reporter_pid = none :: none | pid(),
39+
exometer_enabled = false :: boolean(),
3940
prev_report = [] :: [mongoose_system_metrics_collector:report_struct()],
4041
tracking_ids :: [tracking_id()]}).
4142

@@ -103,21 +104,24 @@ init(Opts) ->
103104
#{initial_report := InitialReport, periodic_report := PeriodicReport} = Opts,
104105
TrackingIds = tracking_ids(Opts),
105106
erlang:send_after(InitialReport, self(), spawn_reporter),
107+
ExometerEnabled = exometer_loaded(),
106108
{ok, #system_metrics_state{report_after = PeriodicReport,
107-
tracking_ids = TrackingIds}}
109+
tracking_ids = TrackingIds,
110+
exometer_enabled = ExometerEnabled}}
108111
end.
109112

110113
handle_info(spawn_reporter, #system_metrics_state{report_after = ReportAfter,
111114
reporter_monitor = none,
112115
reporter_pid = none,
113116
prev_report = PrevReport,
114-
tracking_ids = TrackingIds} = State) ->
117+
tracking_ids = TrackingIds,
118+
exometer_enabled = ExometerEnabled} = State) ->
115119
ServicePid = self(),
116120
case get_client_id() of
117121
{ok, ClientId} ->
118122
{Pid, Monitor} = spawn_monitor(
119123
fun() ->
120-
Reports = mongoose_system_metrics_collector:collect(PrevReport),
124+
Reports = mongoose_system_metrics_collector:collect(PrevReport, ExometerEnabled),
121125
mongoose_system_metrics_sender:send(ClientId, Reports, TrackingIds),
122126
mongoose_system_metrics_file:save(Reports),
123127
ServicePid ! {prev_report, Reports}
@@ -208,3 +212,10 @@ msg_accept_terms_and_conditions() ->
208212
" https://esl.github.io/MongooseDocs/latest/operation-and-maintenance/System-Metrics-Privacy-Policy/ \n"
209213
"- MongooseIM GitHub page - https://github.com/esl/MongooseIM \n"
210214
"The last sent report is also written to a file ~s">>.
215+
216+
-spec exometer_loaded() -> boolean().
217+
exometer_loaded() ->
218+
case mongoose_config:lookup_opt([instrumentation, exometer]) of
219+
{ok, _} -> true;
220+
_ -> false
221+
end.

0 commit comments

Comments
 (0)