Line data Source code
1 : #ifndef HEADER_fd_src_disco_metrics_fd_metrics_base_h 2 : #define HEADER_fd_src_disco_metrics_fd_metrics_base_h 3 : 4 : #include "../../util/fd_util.h" 5 : 6 0 : #define FD_METRICS_TYPE_GAUGE (0UL) 7 0 : #define FD_METRICS_TYPE_COUNTER (1UL) 8 0 : #define FD_METRICS_TYPE_HISTOGRAM (2UL) 9 : 10 0 : #define FD_METRICS_CONVERTER_NONE (0UL) 11 0 : #define FD_METRICS_CONVERTER_NANOSECONDS (2UL) /* stored as ticks, exported as nanoseconds */ 12 : 13 0 : #define MIDX( type, group, measurement ) (FD_METRICS_##type##_##group##_##measurement##_OFF) 14 : 15 : #define DECLARE_METRIC( MEASUREMENT, TYPE ) { \ 16 : .name = FD_METRICS_##TYPE##_##MEASUREMENT##_NAME, \ 17 : .type = FD_METRICS_TYPE_##TYPE, \ 18 : .desc = FD_METRICS_##TYPE##_##MEASUREMENT##_DESC, \ 19 : .offset = FD_METRICS_##TYPE##_##MEASUREMENT##_OFF, \ 20 : .converter = FD_METRICS_##TYPE##_##MEASUREMENT##_CVT \ 21 : } 22 : 23 : #define DECLARE_METRIC_ENUM( MEASUREMENT, TYPE, ENUM_NAME, ENUM_VARIANT ) { \ 24 : .name = FD_METRICS_##TYPE##_##MEASUREMENT##_NAME, \ 25 : .enum_name = FD_METRICS_ENUM_##ENUM_NAME##_NAME, \ 26 : .enum_variant = FD_METRICS_ENUM_##ENUM_NAME##_V_##ENUM_VARIANT##_NAME, \ 27 : .type = FD_METRICS_TYPE_##TYPE, \ 28 : .desc = FD_METRICS_##TYPE##_##MEASUREMENT##_DESC, \ 29 : .offset = FD_METRICS_##TYPE##_##MEASUREMENT##_OFF + \ 30 : FD_METRICS_ENUM_##ENUM_NAME##_V_##ENUM_VARIANT##_IDX, \ 31 : .converter = FD_METRICS_##TYPE##_##MEASUREMENT##_CVT \ 32 : } 33 : 34 : #define DECLARE_METRIC_HISTOGRAM_NONE( MEASUREMENT ) { \ 35 : .name = FD_METRICS_HISTOGRAM_##MEASUREMENT##_NAME, \ 36 : .type = FD_METRICS_TYPE_HISTOGRAM, \ 37 : .desc = FD_METRICS_HISTOGRAM_##MEASUREMENT##_DESC, \ 38 : .offset = FD_METRICS_HISTOGRAM_##MEASUREMENT##_OFF, \ 39 : .converter = FD_METRICS_HISTOGRAM_##MEASUREMENT##_CVT, \ 40 : .histogram = { \ 41 : .none = { \ 42 : .min = FD_METRICS_HISTOGRAM_##MEASUREMENT##_MIN, \ 43 : .max = FD_METRICS_HISTOGRAM_##MEASUREMENT##_MAX, \ 44 : }, \ 45 : }, \ 46 : } 47 : 48 : #define DECLARE_METRIC_HISTOGRAM_TICKS( MEASUREMENT ) { \ 49 : .name = FD_METRICS_HISTOGRAM_##MEASUREMENT##_NAME, \ 50 : .type = FD_METRICS_TYPE_HISTOGRAM, \ 51 : .desc = FD_METRICS_HISTOGRAM_##MEASUREMENT##_DESC, \ 52 : .offset = FD_METRICS_HISTOGRAM_##MEASUREMENT##_OFF, \ 53 : .converter = FD_METRICS_HISTOGRAM_##MEASUREMENT##_CVT, \ 54 : .histogram = { \ 55 : .ticks = { \ 56 : .edges_ns = (ulong const[])FD_METRICS_HISTOGRAM_##MEASUREMENT##_EDGES_NS, \ 57 : }, \ 58 : }, \ 59 : } 60 : 61 : typedef struct { 62 : char const * name; 63 : char const * enum_name; 64 : char const * enum_variant; 65 : int type; 66 : char const * desc; 67 : ulong offset; 68 : 69 : int converter; 70 : 71 : union { 72 : struct { 73 : 74 : union { 75 : struct { 76 : ulong min; 77 : ulong max; 78 : } none; 79 : 80 : struct { 81 : ulong const * edges_ns; /* FD_HISTF_BUCKET_CNT-1 right edges */ 82 : } ticks; 83 : }; 84 : } histogram; 85 : }; 86 : } fd_metrics_meta_t; 87 : 88 : FD_PROTOTYPES_BEGIN 89 : 90 : FD_FN_PURE static inline char * 91 0 : fd_metrics_meta_type_str( fd_metrics_meta_t const * metric ) { 92 0 : switch( metric->type ) { 93 0 : case FD_METRICS_TYPE_GAUGE: return "gauge"; 94 0 : case FD_METRICS_TYPE_COUNTER: return "counter"; 95 0 : case FD_METRICS_TYPE_HISTOGRAM: return "histogram"; 96 0 : default: return "unknown"; 97 0 : } 98 0 : } 99 : 100 : FD_PROTOTYPES_END 101 : 102 : #endif /* HEADER_fd_src_disco_metrics_fd_metrics_base_h */