stats: fix state counter removal
[vpp.git] / src / vpp / app / vpp_prometheus_export.c
index 65e0147..9994491 100644 (file)
@@ -97,9 +97,13 @@ retry:
              }
          break;
        case STAT_DIR_TYPE_ERROR_INDEX:
-         fformat (stream, "# TYPE %s counter\n", prom_string (res[i].name));
-         fformat (stream, "%s{thread=\"0\"} %lld\n",
-                  prom_string (res[i].name), res[i].error_value);
+         for (j = 0; j < vec_len (res[i].error_vector); j++)
+           {
+             fformat (stream, "# TYPE %s counter\n",
+                      prom_string (res[i].name));
+             fformat (stream, "%s{thread=\"%d\"} %lld\n",
+                      prom_string (res[i].name), j, res[i].error_vector[j]);
+           }
          break;
 
        case STAT_DIR_TYPE_SCALAR_INDEX:
@@ -108,6 +112,9 @@ retry:
                   res[i].scalar_value);
          break;
 
+       case STAT_DIR_TYPE_EMPTY:
+         break;
+
        default:
          fformat (stderr, "Unknown value %d\n", res[i].type);
          ;
@@ -188,6 +195,7 @@ start_listen (u16 port)
   if (listenfd == -1)
     {
       perror ("Failed opening socket");
+      return -1;
     }
 
   int rv =
@@ -195,9 +203,11 @@ start_listen (u16 port)
   if (rv < 0)
     {
       perror ("Failed setsockopt");
+      close (listenfd);
+      return -1;
     }
 
-  memset (&serveraddr, 0, sizeof (serveraddr));
+  clib_memset (&serveraddr, 0, sizeof (serveraddr));
   serveraddr.sin6_family = AF_INET6;
   serveraddr.sin6_port = htons (port);
   serveraddr.sin6_addr = in6addr_any;
@@ -205,11 +215,13 @@ start_listen (u16 port)
   if (bind (listenfd, (struct sockaddr *) &serveraddr, addrlen) < 0)
     {
       fprintf (stderr, "bind() error %s\n", strerror (errno));
+      close (listenfd);
       return -1;
     }
   if (listen (listenfd, 1000000) != 0)
     {
       fprintf (stderr, "listen() error for %s\n", strerror (errno));
+      close (listenfd);
       return -1;
     }
   return listenfd;
@@ -257,6 +269,13 @@ main (int argc, char **argv)
        }
     }
 
+  if (vec_len (patterns) == 0)
+    {
+      fformat (stderr,
+              "%s: usage [socket-name <name>] <patterns> ...\n", argv[0]);
+      exit (1);
+    }
+
   rv = stat_segment_connect ((char *) stat_segment_name);
   if (rv)
     {
@@ -280,7 +299,7 @@ main (int argc, char **argv)
        }
       else
        {
-         struct sockaddr_in6 clientaddr;
+         struct sockaddr_in6 clientaddr = { 0 };
          char address[INET6_ADDRSTRLEN];
          socklen_t addrlen;
          getpeername (conn_sock, (struct sockaddr *) &clientaddr, &addrlen);
@@ -305,6 +324,7 @@ main (int argc, char **argv)
     }
 
   stat_segment_disconnect ();
+  close (fd);
 
   exit (0);
 }