Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
stats: Split stat_segment and stats code in preparation for deprecation.
[vpp.git]
/
src
/
vpp
/
app
/
vpp_get_stats.c
diff --git
a/src/vpp/app/vpp_get_stats.c
b/src/vpp/app/vpp_get_stats.c
index
c1f43a7
..
1852b77
100644
(file)
--- a/
src/vpp/app/vpp_get_stats.c
+++ b/
src/vpp/app/vpp_get_stats.c
@@
-19,15
+19,19
@@
#include <vpp-api/client/stat_client.h>
#include <vlib/vlib.h>
#include <vpp-api/client/stat_client.h>
#include <vlib/vlib.h>
-#include <vpp/stats/stats.h>
static int
static int
-stat_poll_loop (
stat_segment_cached_pointer_t * cp
)
+stat_poll_loop (
u8 ** patterns
)
{
struct timespec ts, tsrem;
stat_segment_data_t *res;
int i, j, k, lost_connection = 0;
f64 heartbeat, prev_heartbeat = 0;
{
struct timespec ts, tsrem;
stat_segment_data_t *res;
int i, j, k, lost_connection = 0;
f64 heartbeat, prev_heartbeat = 0;
+ u32 *stats = stat_segment_ls (patterns);
+ if (!stats)
+ {
+ return -1;
+ }
printf ("\033[2J"); /* clear the screen */
while (1)
printf ("\033[2J"); /* clear the screen */
while (1)
@@
-49,7
+53,12
@@
stat_poll_loop (stat_segment_cached_pointer_t * cp)
}
printf ("\033[H"); /* Cursor top left corner */
}
printf ("\033[H"); /* Cursor top left corner */
- res = stat_segment_collect (cp);
+ res = stat_segment_dump (stats);
+ if (!res)
+ {
+ stats = stat_segment_ls (patterns);
+ continue;
+ }
for (i = 0; i < vec_len (res); i++)
{
switch (res[i].type)
for (i = 0; i < vec_len (res); i++)
{
switch (res[i].type)
@@
-57,24
+66,24
@@
stat_poll_loop (stat_segment_cached_pointer_t * cp)
case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
for (k = 0; k < vec_len (res[i].simple_counter_vec); k++)
for (j = 0; j < vec_len (res[i].simple_counter_vec[k]); j++)
case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
for (k = 0; k < vec_len (res[i].simple_counter_vec); k++)
for (j = 0; j < vec_len (res[i].simple_counter_vec[k]); j++)
- fformat (stdout, "[%d]: %ll
d
packets %s\n",
+ fformat (stdout, "[%d]: %ll
u
packets %s\n",
j, res[i].simple_counter_vec[k][j], res[i].name);
break;
case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
for (k = 0; k < vec_len (res[i].simple_counter_vec); k++)
for (j = 0; j < vec_len (res[i].combined_counter_vec[k]); j++)
j, res[i].simple_counter_vec[k][j], res[i].name);
break;
case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
for (k = 0; k < vec_len (res[i].simple_counter_vec); k++)
for (j = 0; j < vec_len (res[i].combined_counter_vec[k]); j++)
- fformat (stdout, "[%d]: %ll
d packets, %lld
bytes %s\n",
+ fformat (stdout, "[%d]: %ll
u packets, %llu
bytes %s\n",
j, res[i].combined_counter_vec[k][j].packets,
res[i].combined_counter_vec[k][j].bytes,
res[i].name);
break;
case STAT_DIR_TYPE_ERROR_INDEX:
j, res[i].combined_counter_vec[k][j].packets,
res[i].combined_counter_vec[k][j].bytes,
res[i].name);
break;
case STAT_DIR_TYPE_ERROR_INDEX:
- fformat (stdout, "%ll
d
%s\n", res[i].error_value, res[i].name);
+ fformat (stdout, "%ll
u
%s\n", res[i].error_value, res[i].name);
break;
break;
- case STAT_DIR_TYPE_SCALAR_
POINTER
:
+ case STAT_DIR_TYPE_SCALAR_
INDEX
:
fformat (stdout, "%.2f %s\n", res[i].scalar_value, res[i].name);
break;
fformat (stdout, "%.2f %s\n", res[i].scalar_value, res[i].name);
break;
@@
-99,6
+108,7
@@
enum stat_client_cmd_e
STAT_CLIENT_CMD_LS,
STAT_CLIENT_CMD_POLL,
STAT_CLIENT_CMD_DUMP,
STAT_CLIENT_CMD_LS,
STAT_CLIENT_CMD_POLL,
STAT_CLIENT_CMD_DUMP,
+ STAT_CLIENT_CMD_TIGHTPOLL,
};
int
};
int
@@
-108,10
+118,9
@@
main (int argc, char **argv)
u8 *stat_segment_name, *pattern = 0, **patterns = 0;
int rv;
enum stat_client_cmd_e cmd = STAT_CLIENT_CMD_UNKNOWN;
u8 *stat_segment_name, *pattern = 0, **patterns = 0;
int rv;
enum stat_client_cmd_e cmd = STAT_CLIENT_CMD_UNKNOWN;
- void *heap_base;
- heap_base = clib_mem_vm_map ((void *) 0x10000000ULL, 128 << 20);
- clib_mem_init (
heap_base, 128
<< 20);
+ /* Create a heap of 64MB */
+ clib_mem_init (
0, 64
<< 20);
unformat_init_command_line (a, argv);
unformat_init_command_line (a, argv);
@@
-133,6
+142,10
@@
main (int argc, char **argv)
{
cmd = STAT_CLIENT_CMD_POLL;
}
{
cmd = STAT_CLIENT_CMD_POLL;
}
+ else if (unformat (a, "tightpoll"))
+ {
+ cmd = STAT_CLIENT_CMD_TIGHTPOLL;
+ }
else if (unformat (a, "%s", &pattern))
{
vec_add1 (patterns, pattern);
else if (unformat (a, "%s", &pattern))
{
vec_add1 (patterns, pattern);
@@
-154,10
+167,9
@@
reconnect:
exit (1);
}
exit (1);
}
- u
8 *
*dir;
+ u
32
*dir;
int i, j, k;
stat_segment_data_t *res;
int i, j, k;
stat_segment_data_t *res;
- stat_segment_cached_pointer_t *cp;
dir = stat_segment_ls (patterns);
dir = stat_segment_ls (patterns);
@@
-167,7
+179,9
@@
reconnect:
/* List all counters */
for (i = 0; i < vec_len (dir); i++)
{
/* List all counters */
for (i = 0; i < vec_len (dir); i++)
{
- printf ("%s\n", (char *) dir[i]);
+ char *n = stat_segment_index_to_name (dir[i]);
+ printf ("%s\n", n);
+ free (n);
}
break;
}
break;
@@
-180,27
+194,26
@@
reconnect:
case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
for (k = 0; k < vec_len (res[i].simple_counter_vec) - 1; k++)
for (j = 0; j < vec_len (res[i].simple_counter_vec[k]); j++)
case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
for (k = 0; k < vec_len (res[i].simple_counter_vec) - 1; k++)
for (j = 0; j < vec_len (res[i].simple_counter_vec[k]); j++)
- fformat (stdout, "[%d @ %d]: %ll
d
packets %s\n",
+ fformat (stdout, "[%d @ %d]: %ll
u
packets %s\n",
j, k, res[i].simple_counter_vec[k][j],
res[i].name);
break;
case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
j, k, res[i].simple_counter_vec[k][j],
res[i].name);
break;
case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
- for (k = 0; k < vec_len (res[i].
simple
_counter_vec); k++)
+ for (k = 0; k < vec_len (res[i].
combined
_counter_vec); k++)
for (j = 0; j < vec_len (res[i].combined_counter_vec[k]); j++)
for (j = 0; j < vec_len (res[i].combined_counter_vec[k]); j++)
- fformat (stdout, "[%d @ %d]: %ll
d packets, %lld
bytes %s\n",
+ fformat (stdout, "[%d @ %d]: %ll
u packets, %llu
bytes %s\n",
j, k, res[i].combined_counter_vec[k][j].packets,
res[i].combined_counter_vec[k][j].bytes,
res[i].name);
break;
case STAT_DIR_TYPE_ERROR_INDEX:
j, k, res[i].combined_counter_vec[k][j].packets,
res[i].combined_counter_vec[k][j].bytes,
res[i].name);
break;
case STAT_DIR_TYPE_ERROR_INDEX:
- fformat (stdout, "%ll
d %s\n", res[i].error_value, dir[i]
);
+ fformat (stdout, "%ll
u %s\n", res[i].error_value, res[i].name
);
break;
break;
- case STAT_DIR_TYPE_SCALAR_POINTER:
- fformat (stdout, "%.2f %s\n", dir[i], res[i].scalar_value,
- res[i].name);
+ case STAT_DIR_TYPE_SCALAR_INDEX:
+ fformat (stdout, "%.2f %s\n", res[i].scalar_value, res[i].name);
break;
default:
break;
default:
@@
-211,19
+224,27
@@
reconnect:
break;
case STAT_CLIENT_CMD_POLL:
break;
case STAT_CLIENT_CMD_POLL:
- cp = stat_segment_register (dir);
- if (!cp)
- {
- fformat (stderr,
- "Couldn't register required counters with stat segment\n");
- exit (1);
- }
- stat_poll_loop (cp);
+ stat_poll_loop (patterns);
/* We can only exist the pool loop if we lost connection to VPP */
stat_segment_disconnect ();
goto reconnect;
break;
/* We can only exist the pool loop if we lost connection to VPP */
stat_segment_disconnect ();
goto reconnect;
break;
+ case STAT_CLIENT_CMD_TIGHTPOLL:
+ while (1)
+ {
+ res = stat_segment_dump (dir);
+ if (res == 0)
+ {
+ /* Refresh */
+ vec_free (dir);
+ dir = stat_segment_ls (patterns);
+ continue;
+ }
+ stat_segment_data_free (res);
+ }
+ break;
+
default:
fformat (stderr,
"%s: usage [socket-name <name>] [ls|dump|poll] <patterns> ...\n",
default:
fformat (stderr,
"%s: usage [socket-name <name>] [ls|dump|poll] <patterns> ...\n",