open5gs/src/pcf/metrics.h

54 lines
1.5 KiB
C
Raw Normal View History

[PCF] Add metrics support Expose metrics with labels according to ETSI TS 128 552 V16.13.0 in PCF by using hash. The metrics are named respecting the rule: <generation>_<measurement_object_class>_<measurement_family_name>_<metric_name_as_in_TS_128_552> Since slice itself is not unique, the plmnid label is exposed in addition to snssai. AM policy: fivegs_pcffunction_pa_policyamassoreq and fivegs_pcffunction_pa_policyamassosucc do not expose snssai label since it is not available at the time of exposure. plmnid is defined during AM policy processing, so not to lose the difference to ...succ, the basic metric fivegs_pcffunction_pa_policyamassoreq is preserved. SM policy: snssai is defined during SM policy processing, so not to lose the difference to ...succ, the basic metric fivegs_pcffunction_pa_policysmassoreq is preserved. Those 2 basic metrics retain their position but are exposed with empty labels. Metrics with labels are called later, when the label values are known. Exposed metrics example: -standard counters: fivegs_pcffunction_pa_policyamassoreq{plmnid=""} 3 fivegs_pcffunction_pa_policyamassoreq{plmnid="99970"} 3 fivegs_pcffunction_pa_policyamassosucc{plmnid="99970"} 3 fivegs_pcffunction_pa_policysmassoreq{plmnid="",snssai=""} 3 fivegs_pcffunction_pa_policysmassoreq{plmnid="99970",snssai="1000009"} 3 fivegs_pcffunction_pa_policysmassosucc{plmnid="99970",snssai="1000009"} 3 -nonstandard gauge (added for controlling purposes - same metric as existing metric on AMF and SMF): fivegs_pcffunction_pa_sessionnbr{plmnid="99970",snssai="1000009"} 0
2022-08-18 10:20:26 +00:00
#ifndef PCF_METRICS_H
#define PCF_METRICS_H
#include "ogs-metrics.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef enum pcf_metric_type_global_s {
_PCF_METR_GLOB_MAX,
} pcf_metric_type_global_t;
extern ogs_metrics_inst_t *pcf_metrics_inst_global[_PCF_METR_GLOB_MAX];
static inline void pcf_metrics_inst_global_set(pcf_metric_type_global_t t, int val)
{ ogs_metrics_inst_set(pcf_metrics_inst_global[t], val); }
static inline void pcf_metrics_inst_global_add(pcf_metric_type_global_t t, int val)
{ ogs_metrics_inst_add(pcf_metrics_inst_global[t], val); }
static inline void pcf_metrics_inst_global_inc(pcf_metric_type_global_t t)
{ ogs_metrics_inst_inc(pcf_metrics_inst_global[t]); }
static inline void pcf_metrics_inst_global_dec(pcf_metric_type_global_t t)
{ ogs_metrics_inst_dec(pcf_metrics_inst_global[t]); }
/* BY_PLMN */
typedef enum pcf_metric_type_by_plmn_s {
PCF_METR_CTR_PA_POLICYAMASSOREQ = 0,
PCF_METR_CTR_PA_POLICYAMASSOSUCC,
_PCF_METR_BY_PLMN_MAX,
} pcf_metric_type_by_plmn_t;
void pcf_metrics_inst_by_plmn_add(
ogs_plmn_id_t *plmn, pcf_metric_type_by_plmn_t t, int val);
/* BY_SLICE */
typedef enum pcf_metric_type_by_slice_s {
PCF_METR_CTR_PA_POLICYSMASSOREQ = 0,
PCF_METR_CTR_PA_POLICYSMASSOSUCC,
PCF_METR_GAUGE_PA_SESSIONNBR,
_PCF_METR_BY_SLICE_MAX,
} pcf_metric_type_by_slice_t;
void pcf_metrics_inst_by_slice_add(
ogs_plmn_id_t *plmn, ogs_s_nssai_t *snssai,
pcf_metric_type_by_slice_t t, int val);
int pcf_metrics_open(void);
int pcf_metrics_close(void);
#ifdef __cplusplus
}
#endif
#endif /* PCF_METRICS_H */