From 2fee16787ed0d622631223567635a77e14c8c076 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Thu, 23 Aug 2018 13:00:53 +0200 Subject: STATS: stat_client updates. New stat segment client library: vpp-api/client/stat_client.h New stat segment query app: vpp_get_stats [ls | dump | poll ] Prometheus integration through: vpp_prometheus_export Change-Id: I6f370cf599e9fcf066f22965a62d3a8acd529994 Signed-off-by: Ole Troan --- src/vpp/stats/stat_segment.c | 18 +++++++++++++++--- src/vpp/stats/stats.h | 4 +++- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'src/vpp/stats') diff --git a/src/vpp/stats/stat_segment.c b/src/vpp/stats/stat_segment.c index 29b3bf3812d..8459138be34 100644 --- a/src/vpp/stats/stat_segment.c +++ b/src/vpp/stats/stat_segment.c @@ -43,7 +43,7 @@ vlib_stats_push_heap (void) } void -vlib_stats_pop_heap (void *cm_arg, void *oldheap) +vlib_stats_pop_heap (void *cm_arg, void *oldheap, stat_directory_type_t type) { vlib_simple_counter_main_t *cm = (vlib_simple_counter_main_t *) cm_arg; stats_main_t *sm = &stats_main; @@ -80,7 +80,7 @@ vlib_stats_pop_heap (void *cm_arg, void *oldheap) } name_copy = format (0, "%s%c", stat_segment_name, 0); ep = clib_mem_alloc (sizeof (*ep)); - ep->type = STAT_DIR_TYPE_COUNTER_VECTOR; + ep->type = type; ep->value = cm->counters; hash_set_mem (sm->counter_vector_by_name, name_copy, ep); @@ -236,6 +236,7 @@ vlib_map_stat_segment_init (void) sm->input_rate_ptr = (scalar_data + 1); sm->last_runtime_ptr = (scalar_data + 2); sm->last_runtime_stats_clear_ptr = (scalar_data + 3); + sm->heartbeat_ptr = (scalar_data + 4); name = format (0, "/sys/vector_rate%c", 0); ep = clib_mem_alloc (sizeof (*ep)); @@ -265,6 +266,13 @@ vlib_map_stat_segment_init (void) hash_set_mem (sm->counter_vector_by_name, name, ep); + name = format (0, "/sys/heartbeat%c", 0); + ep = clib_mem_alloc (sizeof (*ep)); + ep->type = STAT_DIR_TYPE_SCALAR_POINTER; + ep->value = sm->heartbeat_ptr; + + hash_set_mem (sm->counter_vector_by_name, name, ep); + /* Publish the hash table */ shared_header->opaque[STAT_SEGMENT_OPAQUE_DIR] = sm->counter_vector_by_name; @@ -309,7 +317,8 @@ format_stat_dir_entry (u8 * s, va_list * args) type_name = "VectorPtr"; break; - case STAT_DIR_TYPE_COUNTER_VECTOR: + case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE: + case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED: type_name = "CMainPtr"; break; @@ -512,6 +521,9 @@ do_stat_segment_updates (stats_main_t * sm) if (sm->serialize_nodes) update_serialized_nodes (sm); + + /* Heartbeat, so clients detect we're still here */ + (*sm->heartbeat_ptr)++; } static clib_error_t * diff --git a/src/vpp/stats/stats.h b/src/vpp/stats/stats.h index aea2da7a2c2..911706cbb09 100644 --- a/src/vpp/stats/stats.h +++ b/src/vpp/stats/stats.h @@ -175,6 +175,7 @@ typedef struct f64 *last_runtime_ptr; f64 *last_runtime_stats_clear_ptr; f64 *vector_rate_ptr; + f64 *heartbeat_ptr; u64 last_input_packets; /* Pointers to vector stats maintained by the stat thread */ @@ -209,7 +210,8 @@ typedef enum STAT_DIR_TYPE_ILLEGAL = 0, STAT_DIR_TYPE_SCALAR_POINTER, STAT_DIR_TYPE_VECTOR_POINTER, - STAT_DIR_TYPE_COUNTER_VECTOR, + STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE, + STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED, STAT_DIR_TYPE_ERROR_INDEX, STAT_DIR_TYPE_SERIALIZED_NODES, } stat_directory_type_t; -- cgit 1.2.3-korg