[PATCH] osmo-bsc[master]: abisip-find: Add --format-json option

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Mon Mar 12 17:03:55 UTC 2018


Review at  https://gerrit.osmocom.org/7259

abisip-find: Add --format-json option

This format outputs json format which can be more easily parsed if
launched by scripting launguage with json support like python.

Change-Id: Ib2d461c79fbc242141dc342578467c3e9c6ed5fc
---
M src/ipaccess/abisip-find.c
1 file changed, 38 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/59/7259/1

diff --git a/src/ipaccess/abisip-find.c b/src/ipaccess/abisip-find.c
index defe2e4..03f579b 100644
--- a/src/ipaccess/abisip-find.c
+++ b/src/ipaccess/abisip-find.c
@@ -43,12 +43,14 @@
 	int send_interval;
 	bool list_view;
 	time_t list_view_timeout;
+	bool format_json;
 } cmdline_opts = {
 	.ifname = NULL,
 	.bind_ip = NULL,
 	.send_interval = 5,
 	.list_view = false,
 	.list_view_timeout = 10,
+	.format_json = false,
 };
 
 static void print_help()
@@ -66,6 +68,7 @@
 	printf("  -t --timeout <s>  Drop base stations after <s> seconds of\n"
 	       "                    receiving no more replies from it.\n"
 	       "                    Implies --list-view.\n");
+	printf("  -j --format-json  Print BTS information using json syntax.\n");
 }
 
 static void handle_options(int argc, char **argv)
@@ -78,10 +81,11 @@
 			{"send-interval", 1, 0, 'i'},
 			{"list-view", 0, 0, 'l'},
 			{"timeout", 1, 0, 't'},
+			{"format-json", 0, 0, 'j'},
 			{0, 0, 0, 0}
 		};
 
-		c = getopt_long(argc, argv, "hb:i:lt:",
+		c = getopt_long(argc, argv, "hb:i:lt:j",
 				long_options, &option_index);
 		if (c == -1)
 			break;
@@ -111,6 +115,9 @@
 			/* fall through to imply list-view: */
 		case 'l':
 			cmdline_opts.list_view = true;
+			break;
+		case 'j':
+			cmdline_opts.format_json = true;
 			break;
 		default:
 			/* catch unknown options *as well as* missing arguments. */
@@ -217,18 +224,32 @@
 
 static char *parse_response(void *ctx, unsigned char *buf, int len)
 {
+	unsigned int out_len;
 	uint8_t t_len;
 	uint8_t t_tag;
 	uint8_t *cur = buf;
 	char *out = talloc_zero_size(ctx, 512);
 
+	if (cmdline_opts.format_json)
+		out = talloc_asprintf_append(out,"{ ");
+
 	while (cur < buf + len) {
 		t_len = *cur++;
 		t_tag = *cur++;
-		
-		out = talloc_asprintf_append(out, "%s='%s'  ", ipa_ccm_idtag_name(t_tag), cur);
+
+		if (cmdline_opts.format_json)
+			out = talloc_asprintf_append(out, "\"%s\": \"%s\", ", ipa_ccm_idtag_name(t_tag), cur);
+		else
+			out = talloc_asprintf_append(out, "%s='%s'  ", ipa_ccm_idtag_name(t_tag), cur);
 
 		cur += t_len;
+	}
+
+	if (cmdline_opts.format_json) {
+		out_len = strlen(out);
+		if (out[out_len-2] == ',')
+			out[out_len-2] = ' ';
+		out[out_len-1] = '}';
 	}
 
 	return out;
@@ -308,10 +329,23 @@
 	int count = 0;
 
 	print_timestamp();
+	if (cmdline_opts.format_json)
+		printf("[");
+
 	llist_for_each_entry(bs, &base_stations, entry) {
-		printf("%3d: %s\n", count, bs->line);
+		if (cmdline_opts.format_json) {
+			if (count)
+				printf(",");
+			printf("\n%s", bs->line);
+		} else {
+			printf("%3d: %s\n", count, bs->line);
+		}
 		count++;
 	}
+
+	if (cmdline_opts.format_json)
+		printf("%c]\n", count ? '\n': ' ');
+
 	printf("\nTotal: %d\n", count);
 }
 

-- 
To view, visit https://gerrit.osmocom.org/7259
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib2d461c79fbc242141dc342578467c3e9c6ed5fc
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>



More information about the gerrit-log mailing list