From ea6253d7680c96f75bbb4ebd6e427505cd627c1e Mon Sep 17 00:00:00 2001 From: Namdak Tonpa Date: Thu, 18 Apr 2019 14:45:54 +0300 Subject: [PATCH] roster_msg_latency marker for prometheus --- apps/roster/src/api/prometheus_api.erl | 4 ++++ apps/roster/src/protocol/roster_message.erl | 8 +++++++- apps/roster/src/roster.erl | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/roster/src/api/prometheus_api.erl b/apps/roster/src/api/prometheus_api.erl index fb4a5f9d5..864b0ecaf 100644 --- a/apps/roster/src/api/prometheus_api.erl +++ b/apps/roster/src/api/prometheus_api.erl @@ -19,4 +19,8 @@ init() -> prometheus_gauge:declare([{name, Name}, {help, Desc}, {labels, Label}]), roster:info(?MODULE, "InitMetric:~p", [Name]) end || {Name, Desc, Label} <- GaugeMetrics], + prometheus_histogram:declare([{name, roster_msg_latency}, + {labels, [mile]}, + {buckets, [50, 100, 200, 400, 1000]}, + {help, "Message Latency"}]), ok. diff --git a/apps/roster/src/protocol/roster_message.erl b/apps/roster/src/protocol/roster_message.erl index 715483bd9..ce20676f8 100644 --- a/apps/roster/src/protocol/roster_message.erl +++ b/apps/roster/src/protocol/roster_message.erl @@ -31,6 +31,7 @@ info(#'Message'{feed_id = #muc{name = To}, to = []} = RequestData, Req, State) w info(#'Message'{status = [], id = [], feed_id = F, from=From0, to = To, created = [], type = Type, files = [#'Desc'{payload = Payload} | _] = Descs} = Msg, Req, #cx{client_pid = C, params = ClientId, state=ack} = State) -> + MSG_LTNCY = os:system_time(), From = case hd(binary:split(ClientId, <<"_">>)) of <<"sys">> -> From0; <<"emqttd">> -> roster:phone_id(ClientId) @@ -103,12 +104,14 @@ info(#'Message'{status = [], id = [], feed_id = F, from=From0, to = To, created <<>> end end, + prometheus_histogram:observe(roster_msg_latency, [new], roster:osd(MSG_LTNCY)), {reply, {bert, IO}, Req, State}; info(#'Message'{status = edit, id = Id, msg_id = ClMID, feed_id = Feed, from = From, to = To, mentioned = Mentioned, files = [#'Desc'{payload = Payload} | _] = Descs}, Req, #cx{params = ClientId, client_pid = C, state=ack} = State) -> - PhoneId = roster:phone_id(ClientId, From), + MSG_LTNCY = os:system_time(), + PhoneId = roster:phone_id(ClientId, From), roster:info(?MODULE, "~p:~p:Message/edit:~P", [PhoneId, To, Payload, 100]), DV = length([D || D = #'Desc'{id = ID} <- Descs, is_binary(ID), ID /= <<>>]) == length(Descs), @@ -149,6 +152,7 @@ info(#'Message'{status = edit, id = Id, msg_id = ClMID, feed_id = Feed, from = F roster:send_feed(C, Feed, Internal), <<>>; E -> E end, + prometheus_histogram:observe(roster_msg_latency, [edit], roster:osd(MSG_LTNCY)), {reply, {bert, IO}, Req, State}; @@ -244,6 +248,7 @@ info(#'Message'{id = Id, msg_id = ClMID, feed_id = Feed, from = From0, seenby = info(#'Message'{status = update, id = Id, feed_id = Feed, from = From, to = To, files = [#'Desc'{id = ID, payload = Payload, data = Data, mime = DMime} = ND | _] = Files}, Req, #cx{params = ClientId, client_pid = C, state=ack} = State) when is_integer(Id) -> + MSG_LTNCY = os:system_time(), PhoneId = case ClientId of <<"sys_bpe">> -> From; <<"emqttd_", _/binary>> -> roster:phone_id(ClientId) end, roster:info(?MODULE, "~p:~p:Message/update:~P", [PhoneId, To, Payload, 100]), Lang = roster:get_data_val(?LANG_KEY, Data), @@ -289,6 +294,7 @@ info(#'Message'{status = update, id = Id, feed_id = Feed, from = From, to = To, _ -> #io{code = #error{code = invalid_data}} end; _ -> #io{code = #error{code = message_not_found}} end, + prometheus_histogram:observe(roster_msg_latency, [update], roster:osd(MSG_LTNCY)), {reply, {bert, IO}, Req, State}; info(#'Message'{from = From, to = To} = ReqData, Req, State) -> diff --git a/apps/roster/src/roster.erl b/apps/roster/src/roster.erl index befc391ea..16762f74c 100644 --- a/apps/roster/src/roster.erl +++ b/apps/roster/src/roster.erl @@ -76,6 +76,8 @@ start(_, _) -> atoms(), catch load([]), [] end, X. +osd(A) -> round((os:system_time() - A)/1000). + stop(_) -> unload(), emqttd_access_control:unregister_mod(auth, n2o_auth), emqttd_access_control:unregister_mod(auth, roster_auth), -- GitLab