mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-04 05:53:18 +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