stats: check if stats vector entry is empty
[vpp.git] / src / vpp / app / vpp_get_stats.c
index 1852b77..54d36ab 100644 (file)
@@ -79,14 +79,13 @@ stat_poll_loop (u8 ** patterns)
                           res[i].name);
              break;
 
-           case STAT_DIR_TYPE_ERROR_INDEX:
-             fformat (stdout, "%llu %s\n", res[i].error_value, res[i].name);
-             break;
-
            case STAT_DIR_TYPE_SCALAR_INDEX:
              fformat (stdout, "%.2f %s\n", res[i].scalar_value, res[i].name);
              break;
 
+           case STAT_DIR_TYPE_EMPTY:
+             break;
+
            default:
              printf ("Unknown value\n");
              ;
@@ -180,6 +179,8 @@ reconnect:
       for (i = 0; i < vec_len (dir); i++)
        {
          char *n = stat_segment_index_to_name (dir[i]);
+         if (!n)
+           continue;
          printf ("%s\n", n);
          free (n);
        }
@@ -192,7 +193,9 @@ reconnect:
          switch (res[i].type)
            {
            case STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE:
-             for (k = 0; k < vec_len (res[i].simple_counter_vec) - 1; k++)
+             if (res[i].simple_counter_vec == 0)
+               continue;
+             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 @ %d]: %llu packets %s\n",
                           j, k, res[i].simple_counter_vec[k][j],
@@ -200,6 +203,8 @@ reconnect:
              break;
 
            case STAT_DIR_TYPE_COUNTER_VECTOR_COMBINED:
+             if (res[i].combined_counter_vec == 0)
+               continue;
              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++)
                  fformat (stdout, "[%d @ %d]: %llu packets, %llu bytes %s\n",
@@ -208,14 +213,22 @@ reconnect:
                           res[i].name);
              break;
 
-           case STAT_DIR_TYPE_ERROR_INDEX:
-             fformat (stdout, "%llu %s\n", res[i].error_value, res[i].name);
-             break;
-
            case STAT_DIR_TYPE_SCALAR_INDEX:
              fformat (stdout, "%.2f %s\n", res[i].scalar_value, res[i].name);
              break;
 
+           case STAT_DIR_TYPE_NAME_VECTOR:
+             if (res[i].name_vector == 0)
+               continue;
+             for (k = 0; k < vec_len (res[i].name_vector); k++)
+               if (res[i].name_vector[k])
+                 fformat (stdout, "[%d]: %s %s\n", k, res[i].name_vector[k],
+                          res[i].name);
+             break;
+
+           case STAT_DIR_TYPE_EMPTY:
+             break;
+
            default:
              ;
            }