1 /* SPDX-License-Identifier: Apache-2.0
2 * Copyright(c) 2022 Cisco Systems, Inc.
6 #include <vlib/stats/stats.h>
9 name_sort_cmp (void *a1, void *a2)
11 vlib_stats_entry_t *n1 = a1;
12 vlib_stats_entry_t *n2 = a2;
14 return strcmp ((char *) n1->name, (char *) n2->name);
18 format_stat_dir_entry (u8 *s, va_list *args)
20 vlib_stats_entry_t *ep = va_arg (*args, vlib_stats_entry_t *);
24 format_string = "%-74s %-10s %10lld";
28 case STAT_DIR_TYPE_SCALAR_INDEX:
29 type_name = "ScalarPtr";
32 case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
33 case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
34 type_name = "CMainPtr";
37 case STAT_DIR_TYPE_NAME_VECTOR:
38 type_name = "NameVector";
41 case STAT_DIR_TYPE_EMPTY:
45 case STAT_DIR_TYPE_SYMLINK:
46 type_name = "Symlink";
50 type_name = "illegal!";
54 return format (s, format_string, ep->name, type_name, 0);
57 show_stat_segment_command_fn (vlib_main_t *vm, unformat_input_t *input,
58 vlib_cli_command_t *cmd)
60 vlib_stats_segment_t *sm = vlib_stats_get_segment ();
61 vlib_stats_entry_t *show_data;
66 if (unformat (input, "verbose"))
69 /* Lock even as reader, as this command doesn't handle epoch changes */
70 vlib_stats_segment_lock ();
71 show_data = vec_dup (sm->directory_vector);
72 vlib_stats_segment_unlock ();
74 vec_sort_with_function (show_data, name_sort_cmp);
76 vlib_cli_output (vm, "%-74s %10s %10s", "Name", "Type", "Value");
78 for (i = 0; i < vec_len (show_data); i++)
80 vlib_stats_entry_t *ep = vec_elt_at_index (show_data, i);
82 if (ep->type == STAT_DIR_TYPE_EMPTY)
85 vlib_cli_output (vm, "%-100U", format_stat_dir_entry,
86 vec_elt_at_index (show_data, i));
92 vlib_cli_output (vm, "%U", format_clib_mem_heap, sm->heap,
100 show_stat_segment_hash_command_fn (vlib_main_t *vm, unformat_input_t *input,
101 vlib_cli_command_t *cmd)
103 vlib_stats_segment_t *sm = vlib_stats_get_segment ();
106 hash_foreach_mem (name, i, sm->directory_vector_by_name,
107 ({ vlib_cli_output (vm, "%d: %s\n", i, name); }));
111 VLIB_CLI_COMMAND (show_stat_segment_hash_command, static) = {
112 .path = "show statistics hash",
113 .short_help = "show statistics hash",
114 .function = show_stat_segment_hash_command_fn,
117 VLIB_CLI_COMMAND (show_stat_segment_command, static) = {
118 .path = "show statistics segment",
119 .short_help = "show statistics segment [verbose]",
120 .function = show_stat_segment_command_fn,