stats: expose symlink to stats client

For e.g. prometheus export it makes more sense to use the same metric name,
and expose the various symlinks as labels.

The VPP symlink metric:
/interfaces/local0/rx_unicast

that points to
/if/rx_unicast

Becomes in Prometheus:
interfaces_rx_unicast_bytes{index="0",label="local0"} 0

Type: improvement
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: Ide0ab4fda4b3eb7ba7ddfc44680121c53f5267f6
diff --git a/src/vpp-api/client/stat_client.c b/src/vpp-api/client/stat_client.c
index 5bee21a..01ed7c7 100644
--- a/src/vpp-api/client/stat_client.c
+++ b/src/vpp-api/client/stat_client.c
@@ -225,7 +225,7 @@
  */
 static stat_segment_data_t
 copy_data (vlib_stats_entry_t *ep, u32 index2, char *name,
-	   stat_client_main_t *sm)
+	   stat_client_main_t *sm, bool via_symlink)
 {
   stat_segment_data_t result = { 0 };
   int i;
@@ -235,6 +235,7 @@
   assert (sm->shared_header);
 
   result.type = ep->type;
+  result.via_symlink = via_symlink;
   result.name = strdup (name ? name : ep->name);
 
   switch (ep->type)
@@ -289,7 +290,7 @@
 	ep2 = vec_elt_at_index (sm->directory_vector, ep->index1);
 	/* We do not intend to return the "result", avoid a leak */
 	free (result.name);
-	return copy_data (ep2, ep->index2, ep->name, sm);
+	return copy_data (ep2, ep->index2, ep->name, sm, true);
       }
 
     case STAT_DIR_TYPE_EMPTY:
@@ -424,7 +425,7 @@
     {
       /* Collect counter */
       ep = vec_elt_at_index (sm->directory_vector, stats[i]);
-      vec_add1 (res, copy_data (ep, ~0, 0, sm));
+      vec_add1 (res, copy_data (ep, ~0, 0, sm, false));
     }
 
   if (stat_segment_access_end (&sa, sm))
@@ -483,7 +484,7 @@
 
   /* Collect counter */
   ep = vec_elt_at_index (sm->directory_vector, index);
-  vec_add1 (res, copy_data (ep, ~0, 0, sm));
+  vec_add1 (res, copy_data (ep, ~0, 0, sm, false));
 
   if (stat_segment_access_end (&sa, sm))
     return res;