mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-01 20:44:06 +00:00
[HSS] First diameter metric
This commit showcases how to add diameter based metrics to an app. Follow-up commits will add further metrics for different diameter based interfaces.
This commit is contained in:
committed by
Sukchan Lee
parent
a37a2099fc
commit
9db907a56e
@@ -67,6 +67,14 @@ int ogs_diam_stats_init(int mode, const ogs_diam_config_stats_t *config);
|
||||
void ogs_diam_stats_final(void);
|
||||
|
||||
ogs_diam_stats_ctx_t* ogs_diam_stats_self(void);
|
||||
#define OGS_DIAM_STATS_ADD(field, val) ogs_diam_stats_self()->stats.field += val
|
||||
#define OGS_DIAM_STATS_INC(field) OGS_DIAM_STATS_ADD(field, 1)
|
||||
|
||||
#define OGS_DIAM_STATS_MTX(code) \
|
||||
ogs_assert(pthread_mutex_lock(&ogs_diam_stats_self()->stats_lock) == 0); \
|
||||
{ code } \
|
||||
ogs_assert(pthread_mutex_unlock(&ogs_diam_stats_self()->stats_lock) == 0);
|
||||
|
||||
|
||||
int ogs_diam_stats_start(void);
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "ogs-dbi.h"
|
||||
#include "hss-context.h"
|
||||
#include "hss-event.h"
|
||||
#include "hss-fd-path.h"
|
||||
#include "hss-s6a-path.h"
|
||||
|
||||
|
||||
@@ -144,6 +145,7 @@ static int hss_context_prepare(void)
|
||||
{
|
||||
self.diam_config->cnf_port = DIAMETER_PORT;
|
||||
self.diam_config->cnf_port_tls = DIAMETER_SECURE_PORT;
|
||||
self.diam_config->stats.priv_stats_size = sizeof(hss_diam_stats_t);
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
@@ -338,6 +340,9 @@ int hss_context_parse_config(void)
|
||||
ogs_warn("unknown key `%s`", fd_key);
|
||||
}
|
||||
}
|
||||
} else if (!strcmp(hss_key, "diameter_stats_interval")) {
|
||||
const char *v = ogs_yaml_iter_value(&hss_iter);
|
||||
if (v) self.diam_config->stats.interval_sec = atoi(v);
|
||||
} else if (!strcmp(hss_key, "sms_over_ims")) {
|
||||
self.sms_over_ims =
|
||||
ogs_yaml_iter_value(&hss_iter);
|
||||
|
||||
@@ -39,6 +39,9 @@ static int hss_ogs_diam_cx_fb_cb(struct msg **msg, struct avp *avp,
|
||||
{
|
||||
/* This CB should never be called */
|
||||
ogs_warn("Unexpected message received!");
|
||||
OGS_DIAM_STATS_MTX(
|
||||
HSS_DIAM_PRIV_STATS_INC(cx.rx_unknown);
|
||||
)
|
||||
|
||||
return ENOTSUP;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,24 @@
|
||||
#include "hss-context.h"
|
||||
#include "hss-fd-path.h"
|
||||
|
||||
static hss_diam_stats_t prev_st;
|
||||
|
||||
static void hsss_diam_stats_update_cb(const ogs_diam_stats_t *stats, const void *priv_stats)
|
||||
{
|
||||
const hss_diam_stats_t *st = (const hss_diam_stats_t *)priv_stats;
|
||||
|
||||
ogs_debug("%s(): Update HSS diameter metrics", __func__);
|
||||
|
||||
#define METRIC_ADD(metric_name, field) \
|
||||
{ \
|
||||
int diff = st->field - prev_st.field; \
|
||||
if (diff > 0) hss_metrics_inst_global_add(metric_name, diff); \
|
||||
}
|
||||
|
||||
METRIC_ADD(HSS_METR_GLOB_CTR_CX_RX_UNKNOWN, cx.rx_unknown);
|
||||
|
||||
memcpy(&prev_st, st, sizeof(*st));
|
||||
}
|
||||
int hss_fd_init(void)
|
||||
{
|
||||
int rv;
|
||||
@@ -37,6 +55,8 @@ int hss_fd_init(void)
|
||||
rv = hss_swx_init();
|
||||
ogs_assert(rv == OGS_OK);
|
||||
|
||||
ogs_diam_stats_update_cb_register(hsss_diam_stats_update_cb);
|
||||
|
||||
rv = ogs_diam_start();
|
||||
ogs_assert(rv == 0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user