Soft Patch Panel
 help / color / mirror / Atom feed
From: ogawa.yasufumi@lab.ntt.co.jp
To: spp@dpdk.org, ferruh.yigit@intel.com
Cc: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Subject: [spp] [PATCH 3/5] primary: change status command detailed
Date: Mon,  1 Oct 2018 12:14:11 +0900	[thread overview]
Message-ID: <20181001031413.75652-4-ogawa.yasufumi@lab.ntt.co.jp> (raw)
In-Reply-To: <20181001031413.75652-1-ogawa.yasufumi@lab.ntt.co.jp>

From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>

Status command of primary simply returns 'running' or 'idling'. This
update is to change to stats of each fo ports as json instead of running
status. Here is an example.

  {
      "phy_ports": [
          {
              "eth": "56:48:4f:12:34:00",
              "id": 0,
              "rx": 78932932,
              "tx": 78932931,
              "tx_drop": 1,
          }
          ...
      ],
      "ring_ports": [
          {
              "id": 0,
              "rx": 89283,
              "rx_drop": 0,
              "tx": 89283,
              "tx_drop": 0
          },
          ...
      ]
  }

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
---
 src/primary/main.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 77 insertions(+), 4 deletions(-)

diff --git a/src/primary/main.c b/src/primary/main.c
index 7ad8f54..7d5e0a2 100644
--- a/src/primary/main.c
+++ b/src/primary/main.c
@@ -152,6 +152,81 @@ do_send(int *connected, int *sock, char *str)
 	return 0;
 }
 
+/**
+ * Retrieve all of statu of ports as JSON format managed by primary.
+ *
+ * Here is an exmaple.
+ *
+ * {
+ *     "ring_ports": [
+ *     {
+ *         "id": 0,
+ *             "rx": 0,
+ *             "rx_drop": 0,
+ *             "tx": 0,
+ *             "tx_drop": 0
+ *     },
+ *     ...
+ *     ],
+ *     "phy_ports": [
+ *     {
+ *         "eth": "56:48:4f:53:54:00",
+ *         "id": 0,
+ *         "rx": 0,
+ *         "tx": 0,
+ *         "tx_drop": 0
+ *     },
+ *     ...
+ *     ]
+ * }
+ */
+static int
+get_status_json(char *str)
+{
+	int i;
+	char phy_ports[512];
+	char ring_ports[1024];
+	memset(phy_ports, '\0', 512);
+	memset(ring_ports, '\0', 1024);
+
+	for (i = 0; i < ports->num_ports; i++) {
+		sprintf(phy_ports, "%s{\"id\": %u, \"eth\": \"%s\", "
+				"\"rx\": %"PRIu64", \"tx\": %"PRIu64", "
+				"\"tx_drop\": %"PRIu64"}",
+				phy_ports,
+				ports->id[i],
+				get_printable_mac_addr(ports->id[i]),
+				ports->port_stats[i].rx,
+				ports->port_stats[i].tx,
+				ports->client_stats[i].tx_drop);
+
+		if (i < ports->num_ports - 1)
+			sprintf(phy_ports, "%s,", phy_ports);
+	}
+
+	for (i = 0; i < num_clients; i++) {
+		sprintf(ring_ports, "%s{\"id\": %u, \"rx\": %"PRIu64", "
+			"\"rx_drop\": %"PRIu64", "
+			"\"tx\": %"PRIu64", \"tx_drop\": %"PRIu64"}",
+			ring_ports,
+			i,
+			ports->client_stats[i].rx,
+			ports->client_stats[i].rx_drop,
+			ports->client_stats[i].tx,
+			ports->client_stats[i].tx_drop);
+
+		if (i < num_clients - 1)
+			sprintf(ring_ports, "%s,", ring_ports);
+	}
+
+	RTE_LOG(DEBUG, APP, "{\"phy_ports\": [%s], \"ring_ports\": [%s]}",
+			phy_ports, ring_ports);
+	sprintf(str, "{\"phy_ports\": [%s], \"ring_ports\": [%s]}",
+			phy_ports, ring_ports);
+
+	return 0;
+}
+
 static int
 parse_command(char *str)
 {
@@ -171,10 +246,7 @@ parse_command(char *str)
 		RTE_LOG(DEBUG, APP, "status\n");
 
 		memset(str, '\0', MSG_SIZE);
-		if (cmd == START)
-			sprintf(str, "Server Running\n");
-		else
-			sprintf(str, "Server Idling\n");
+		ret = get_status_json(str);
 
 	} else if (!strcmp(token_list[0], "exit")) {
 		RTE_LOG(DEBUG, APP, "exit\n");
@@ -183,6 +255,7 @@ parse_command(char *str)
 		ret = -1;
 
 	} else if (!strcmp(token_list[0], "clear")) {
+		sprintf(str, "{\"status\": \"cleared\"}");
 		clear_stats();
 	}
 
-- 
2.7.4

  parent reply	other threads:[~2018-10-01  3:14 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-01  3:14 [spp] [PATCH 0/5] Change primary status command to be detailed ogawa.yasufumi
2018-10-01  3:14 ` [spp] [PATCH 1/5] shared: change socket buffer length ogawa.yasufumi
2018-10-01  3:14 ` [spp] [PATCH 2/5] controller: " ogawa.yasufumi
2018-10-01  3:14 ` ogawa.yasufumi [this message]
2018-10-01  3:14 ` [spp] [PATCH 4/5] controller: change msg format in ConnectionThread ogawa.yasufumi
2018-10-01  3:14 ` [spp] [PATCH 5/5] controller: simply print primary status ogawa.yasufumi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181001031413.75652-4-ogawa.yasufumi@lab.ntt.co.jp \
    --to=ogawa.yasufumi@lab.ntt.co.jp \
    --cc=ferruh.yigit@intel.com \
    --cc=spp@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).