forked from acouzens/open5gs
160 lines
4.6 KiB
C
160 lines
4.6 KiB
C
#include "ogs-app.h"
|
|
#include "hss-context.h"
|
|
|
|
#include "metrics.h"
|
|
|
|
typedef struct hss_metrics_spec_def_s {
|
|
unsigned int type;
|
|
const char *name;
|
|
const char *description;
|
|
int initial_val;
|
|
unsigned int num_labels;
|
|
const char **labels;
|
|
} hss_metrics_spec_def_t;
|
|
|
|
/* Helper generic functions: */
|
|
static int hss_metrics_init_inst(ogs_metrics_inst_t **inst, ogs_metrics_spec_t **specs,
|
|
unsigned int len, unsigned int num_labels, const char **labels)
|
|
{
|
|
unsigned int i;
|
|
for (i = 0; i < len; i++)
|
|
inst[i] = ogs_metrics_inst_new(specs[i], num_labels, labels);
|
|
return OGS_OK;
|
|
}
|
|
|
|
static int hss_metrics_free_inst(ogs_metrics_inst_t **inst,
|
|
unsigned int len)
|
|
{
|
|
unsigned int i;
|
|
for (i = 0; i < len; i++)
|
|
ogs_metrics_inst_free(inst[i]);
|
|
memset(inst, 0, sizeof(inst[0]) * len);
|
|
return OGS_OK;
|
|
}
|
|
|
|
static int hss_metrics_init_spec(ogs_metrics_context_t *ctx,
|
|
ogs_metrics_spec_t **dst, hss_metrics_spec_def_t *src, unsigned int len)
|
|
{
|
|
unsigned int i;
|
|
for (i = 0; i < len; i++) {
|
|
dst[i] = ogs_metrics_spec_new(ctx, src[i].type,
|
|
src[i].name, src[i].description,
|
|
src[i].initial_val, src[i].num_labels, src[i].labels,
|
|
NULL);
|
|
}
|
|
return OGS_OK;
|
|
}
|
|
|
|
/* GLOBAL */
|
|
ogs_metrics_spec_t *hss_metrics_spec_global[_HSS_METR_GLOB_MAX];
|
|
ogs_metrics_inst_t *hss_metrics_inst_global[_HSS_METR_GLOB_MAX];
|
|
hss_metrics_spec_def_t hss_metrics_spec_def_global[_HSS_METR_GLOB_MAX] = {
|
|
/* Global Counters: */
|
|
[HSS_METR_GLOB_CTR_CX_RX_UNKNOWN] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "cx_rx_unknown",
|
|
.description = "Received Cx unknown messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_CX_RX_MAR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "cx_rx_mar",
|
|
.description = "Received Cx MAR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_CX_RX_SAR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "cx_rx_sar",
|
|
.description = "Received Cx SAR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_CX_RX_UAR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "cx_rx_uar",
|
|
.description = "Received Cx UAR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_CX_RX_LIR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "cx_rx_lir",
|
|
.description = "Received Cx LIR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_RX_UNKNOWN] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_rx_unknown",
|
|
.description = "Received s6a unknown messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_RX_AIR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_rx_air",
|
|
.description = "Received s6a AIR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_RX_CLA] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_rx_cla",
|
|
.description = "Received s6a CLA messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_RX_IDA] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_rx_ida",
|
|
.description = "Received s6a IDA messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_RX_PUR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_rx_pur",
|
|
.description = "Received s6a PUR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_RX_ULR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_rx_ulr",
|
|
.description = "Received s6a ULR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_TX_CLR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_tx_clr",
|
|
.description = "Transmitted s6a CLR messages",
|
|
},
|
|
[HSS_METR_GLOB_CTR_S6A_TX_IDR] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_COUNTER,
|
|
.name = "s6a_tx_idr",
|
|
.description = "Transmitted s6a IDR messages",
|
|
},
|
|
/* Global Gauges: */
|
|
[HSS_METR_GLOB_GAUGE_IMSI] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_GAUGE,
|
|
.name = "hss_imsi",
|
|
.description = "Number of IMSIs attached to HSS",
|
|
},
|
|
[HSS_METR_GLOB_GAUGE_IMPI] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_GAUGE,
|
|
.name = "hss_impi",
|
|
.description = "Number of IMPIs attached to HSS",
|
|
},
|
|
[HSS_METR_GLOB_GAUGE_IMPU] = {
|
|
.type = OGS_METRICS_METRIC_TYPE_GAUGE,
|
|
.name = "hss_impu",
|
|
.description = "Number of IMPUs attached to HSS",
|
|
},
|
|
};
|
|
int hss_metrics_init_inst_global(void)
|
|
{
|
|
return hss_metrics_init_inst(hss_metrics_inst_global, hss_metrics_spec_global,
|
|
_HSS_METR_GLOB_MAX, 0, NULL);
|
|
}
|
|
int hss_metrics_free_inst_global(void)
|
|
{
|
|
return hss_metrics_free_inst(hss_metrics_inst_global, _HSS_METR_GLOB_MAX);
|
|
}
|
|
|
|
void hss_metrics_init(void)
|
|
{
|
|
ogs_metrics_context_t *ctx = ogs_metrics_self();
|
|
ogs_metrics_context_init();
|
|
|
|
hss_metrics_init_spec(ctx, hss_metrics_spec_global, hss_metrics_spec_def_global,
|
|
_HSS_METR_GLOB_MAX);
|
|
|
|
hss_metrics_init_inst_global();
|
|
}
|
|
|
|
void hss_metrics_final(void)
|
|
{
|
|
ogs_metrics_context_final();
|
|
}
|