fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39666?usp=email )
Change subject: s1gw_metrics: add histograms for gen_sctp:send delay
......................................................................
s1gw_metrics: add histograms for gen_sctp:send delay
Change-Id: I7633a6e6182bda3fca4e7562e2b780b2b9f9708f
Related: SYS#7288
---
M include/s1gw_metrics.hrl
M src/s1gw_metrics.erl
M src/sctp_common.erl
M src/sctp_proxy.erl
M src/sctp_server.erl
5 files changed, 44 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/66/39666/1
diff --git a/include/s1gw_metrics.hrl b/include/s1gw_metrics.hrl
index 940529b..e6a1316 100644
--- a/include/s1gw_metrics.hrl
+++ b/include/s1gw_metrics.hrl
@@ -40,6 +40,9 @@
-define(S1GW_GAUGE_S1AP_ENB_NUM_SCTP_CONNECTIONS, [gauge, s1ap, enb,
num_sctp_connections]).
-define(S1GW_GAUGE_S1AP_PROXY_UPLINK_PACKETS_QUEUED, [gauge, s1ap, proxy,
uplink_packets_queued]).
+-define(S1GW_HIST_SCTP_ENB_SEND_TIME, [hist, sctp, enb, send_time]).
+-define(S1GW_HIST_SCTP_MME_SEND_TIME, [hist, sctp, mme, send_time]).
+
%% NOTE: Remember to add new entries to s1gw_metric:init()!
%% vim:set ts=4 sw=4 et:
diff --git a/src/s1gw_metrics.erl b/src/s1gw_metrics.erl
index dceb477..8df8efc 100644
--- a/src/s1gw_metrics.erl
+++ b/src/s1gw_metrics.erl
@@ -42,7 +42,9 @@
gauge_set/2,
gauge_inc/1,
gauge_inc/2,
- gauge_dec/1]).
+ gauge_dec/1,
+ hist_reset/1,
+ hist_add/2]).
-include_lib("kernel/include/logger.hrl").
-include("s1gw_metrics.hrl").
@@ -95,8 +97,14 @@
?S1GW_GAUGE_S1AP_PROXY_UPLINK_PACKETS_QUEUED
]).
+-define(S1GW_HISTOGRAMS, [
+ ?S1GW_HIST_SCTP_ENB_SEND_TIME,
+ ?S1GW_HIST_SCTP_MME_SEND_TIME
+]).
+
-type counter() :: [ctr | _].
-type gauge() :: [gauge | _].
+-type hist() :: [hist | _].
-spec register_all(Type, List) -> Result
@@ -121,7 +129,8 @@
init() ->
?LOG_INFO("Initiating metrics"),
[] = register_all(counter, ?S1GW_COUNTERS),
- [] = register_all(gauge, ?S1GW_GAUGES).
+ [] = register_all(gauge, ?S1GW_GAUGES),
+ [] = register_all(histogram, ?S1GW_HISTOGRAMS).
%%%%%%%%%%%%%
%% CTR APIs
@@ -166,5 +175,18 @@
gauge_dec(Name) ->
gauge_inc(Name, -1).
+%%%%%%%%%%%%
+%% HIST APIs
+%%%%%%%%%%%%
+-spec hist_reset(hist()) -> ok | {error, any()}.
+hist_reset(Name) ->
+ ?LOG_DEBUG("~p(~p)", [?FUNCTION_NAME, Name]),
+ exometer:reset(Name).
+
+-spec hist_add(hist(), integer()) -> ok | {error, any()}.
+hist_add(Name, Value) ->
+ ?LOG_DEBUG("~p(~p)", [?FUNCTION_NAME, Name]),
+ exometer:update(Name, Value).
+
%% vim:set ts=4 sw=4 et:
diff --git a/src/sctp_common.erl b/src/sctp_common.erl
index 0d28f81..428cf95 100644
--- a/src/sctp_common.erl
+++ b/src/sctp_common.erl
@@ -35,12 +35,14 @@
-module(sctp_common).
-export([send_data/2,
+ send_data_to/3,
shutdown/1]).
-include_lib("kernel/include/logger.hrl").
-include_lib("kernel/include/inet_sctp.hrl").
-include("s1ap.hrl").
+-include("s1gw_metrics.hrl").
-type sock_aid() :: {gen_sctp:sctp_socket(),
@@ -58,6 +60,18 @@
assoc_id = Aid}, Data).
+-spec send_data_to(enb | mme, sock_aid(), binary()) -> ok | {error, term()}.
+send_data_to(Peer, {Sock, Aid}, Data) ->
+ {Time, Result} = timer:tc(fun() -> send_data({Sock, Aid}, Data) end),
+ case Peer of
+ enb ->
+ s1gw_metrics:hist_add(?S1GW_HIST_SCTP_ENB_SEND_TIME, Time);
+ mme ->
+ s1gw_metrics:hist_add(?S1GW_HIST_SCTP_MME_SEND_TIME, Time)
+ end,
+ Result.
+
+
-spec shutdown(sock_aid()) -> ok | {error, term()}.
shutdown({Sock, Aid}) ->
gen_sctp:eof(Sock, #sctp_assoc_change{assoc_id = Aid}).
diff --git a/src/sctp_proxy.erl b/src/sctp_proxy.erl
index 94ff36a..a52424d 100644
--- a/src/sctp_proxy.erl
+++ b/src/sctp_proxy.erl
@@ -197,7 +197,7 @@
{forward, FwdData} ->
sctp_server:send_data(EnbAid, FwdData);
{reply, ReData} ->
- ok = sctp_common:send_data({Sock, Aid}, ReData)
+ ok = sctp_common:send_data_to(mme, {Sock, Aid}, ReData)
end,
{keep_state, S};
@@ -260,7 +260,7 @@
handler := Pid}) ->
case s1ap_proxy:process_pdu(Pid, Data) of
{forward, FwdData} ->
- ok = sctp_common:send_data({Sock, Aid}, FwdData);
+ ok = sctp_common:send_data_to(mme, {Sock, Aid}, FwdData);
{reply, ReData} ->
sctp_server:send_data(EnbAid, ReData)
end.
diff --git a/src/sctp_server.erl b/src/sctp_server.erl
index 27752d8..77a0969 100644
--- a/src/sctp_server.erl
+++ b/src/sctp_server.erl
@@ -133,7 +133,7 @@
handle_cast({send_data, Aid, Data},
#server_state{sock = Sock} = S) ->
- sctp_common:send_data({Sock, Aid}, Data),
+ sctp_common:send_data_to(enb, {Sock, Aid}, Data),
{noreply, S};
handle_cast(Info, S) ->
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39666?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: erlang/osmo-s1gw
Gerrit-Branch: master
Gerrit-Change-Id: I7633a6e6182bda3fca4e7562e2b780b2b9f9708f
Gerrit-Change-Number: 39666
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>