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
next prev 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).