info: add 'pretty' parameter to jsoninfo and netjson modules
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 5 May 2016 20:05:43 +0000 (21:05 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 5 May 2016 20:13:48 +0000 (21:13 +0100)
false by default to reduce the size of large replies quite
significantly.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/info/json_helpers.c
lib/info/json_helpers.h
lib/jsoninfo/README_JSONINFO
lib/jsoninfo/src/olsrd_jsoninfo.c
lib/jsoninfo/src/olsrd_plugin.c
lib/jsoninfo/src/olsrd_plugin.h
lib/netjson/README_NETJSON
lib/netjson/src/olsrd_netjson.c
lib/netjson/src/olsrd_plugin.c
lib/netjson/src/olsrd_plugin.h

index d76ed7b..6e48310 100644 (file)
@@ -57,10 +57,11 @@ static const char * empty = "";
 
 /* JSON support functions */
 
-void abuf_json_reset_entry_number_and_depth(struct json_session *session) {
+void abuf_json_reset_entry_number_and_depth(struct json_session *session, bool pretty) {
   assert(session);
 
   memset(session, 0, sizeof(*session));
+  session->pretty = pretty;
 }
 
 static void abuf_json_new_indent(struct json_session *session, struct autobuf *abuf) {
@@ -70,9 +71,11 @@ static void abuf_json_new_indent(struct json_session *session, struct autobuf *a
   if (session->currentjsondepth) {
     int i = session->currentjsondepth;
 
-    abuf_puts(abuf, "\n");
-    while (i-- > 0) {
-      abuf_puts(abuf, "  ");
+    if (session->pretty) {
+      abuf_puts(abuf, "\n");
+      while (i-- > 0) {
+        abuf_puts(abuf, "  ");
+      }
     }
   }
 }
@@ -100,7 +103,10 @@ void abuf_json_mark_output(struct json_session *session, bool open, struct autob
     session->entrynumber[session->currentjsondepth] = 0;
     session->currentjsondepth--;
     abuf_json_new_indent(session, abuf);
-    abuf_puts(abuf, "\n}");
+    if (session->pretty) {
+      abuf_puts(abuf, "\n");
+    }
+    abuf_puts(abuf, "}");
   }
 }
 
index d8b9248..239d79c 100644 (file)
  * dangling comma on at the end
  */
 struct json_session {
+    bool pretty;
     int entrynumber[INFO_JSON_ENTRY_MAX_DEPTH];
     int currentjsondepth;
 };
 
-void abuf_json_reset_entry_number_and_depth(struct json_session *session);
+void abuf_json_reset_entry_number_and_depth(struct json_session *session, bool pretty);
 
 void abuf_json_insert_comma(struct json_session *session, struct autobuf *abuf);
 
index af228e8..bf73a04 100644 (file)
@@ -59,4 +59,10 @@ LoadPlugin "olsrd_jsoninfo.so.0.0"
   # field.
   # Default: <not set>
   # PlParam "uuidfile" "uuid.txt"
+
+  # When set to 'true' or 'yes' then the output will be pretty-printed
+  # (multi-line indented). Otherwise the output will not contain
+  # line-breaks and indentation.
+  # Default: false
+  # PlParam "pretty" "false"
 }
index 7e9d2b4..d268fdc 100644 (file)
@@ -209,7 +209,7 @@ const char * determine_mime_type(unsigned int send_what) {
 
 void output_start(struct autobuf *abuf) {
   /* global variables for tracking when to put a comma in for JSON */
-  abuf_json_reset_entry_number_and_depth(&json_session);
+  abuf_json_reset_entry_number_and_depth(&json_session, pretty);
   abuf_json_mark_output(&json_session, true, abuf);
 
   abuf_json_int(&json_session, abuf, "systemTime", time(NULL));
@@ -222,7 +222,7 @@ void output_start(struct autobuf *abuf) {
 void output_end(struct autobuf *abuf) {
   abuf_json_mark_output(&json_session, false, abuf);
   abuf_puts(abuf, "\n");
-  abuf_json_reset_entry_number_and_depth(&json_session);
+  abuf_json_reset_entry_number_and_depth(&json_session, pretty);
 }
 
 void output_error(struct autobuf *abuf, unsigned int status, const char * req __attribute__((unused)), bool http_headers) {
index adea8e3..3dded54 100644 (file)
@@ -60,6 +60,7 @@
 info_plugin_functions_t functions;
 info_plugin_config_t config;
 char uuidfile[FILENAME_MAX];
+bool pretty = false;
 
 static void my_init(void) __attribute__ ((constructor));
 static void my_fini(void) __attribute__ ((destructor));
@@ -139,7 +140,8 @@ int olsrd_plugin_interface_version(void) {
 static const struct olsrd_plugin_parameters plugin_parameters[] = { //
     //
         INFO_PLUGIN_CONFIG_PLUGIN_PARAMETERS(config), //
-        { .name = "uuidfile", .set_plugin_parameter = &set_plugin_string, .data = uuidfile, .addon = { .ui = FILENAME_MAX - 1 } } //
+        { .name = "uuidfile", .set_plugin_parameter = &set_plugin_string, .data = uuidfile, .addon = { .ui = FILENAME_MAX - 1 } }, //
+        { .name = "pretty", .set_plugin_parameter = set_plugin_boolean, .data = &pretty, .addon = { .pc = NULL } } //
     };
 
 void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size) {
index f3b9b1f..130ac2b 100644 (file)
 #include "plugin_util.h"
 #include "info/info_types.h"
 
+#include <stdbool.h>
+
 extern info_plugin_config_t config;
 extern char uuidfile[FILENAME_MAX];
+extern bool pretty;
 
 int olsrd_plugin_interface_version(void);
 int olsrd_plugin_init(void);
index fcff7b9..71faa3c 100644 (file)
@@ -28,4 +28,10 @@ The port in the generic info plugin configuration is set to 2005.
 LoadPlugin "olsrd_netjson.so.0.0"
 {
   # <generic info plugin configuration>
+
+  # When set to 'true' or 'yes' then the output will be pretty-printed
+  # (multi-line indented). Otherwise the output will not contain
+  # line-breaks and indentation.
+  # Default: false
+  # PlParam "pretty" "false"
 }
index ccfaed1..cea0b8b 100644 (file)
@@ -48,6 +48,7 @@
 #include <unistd.h>
 
 #include "olsrd_netjson_helpers.h"
+#include "olsrd_plugin.h"
 #include "info/info_types.h"
 #include "info/http_headers.h"
 #include "info/json_helpers.h"
@@ -94,14 +95,14 @@ const char * determine_mime_type(unsigned int send_what __attribute__((unused)))
 
 void output_start(struct autobuf *abuf) {
   /* global variables for tracking when to put a comma in for JSON */
-  abuf_json_reset_entry_number_and_depth(&json_session);
+  abuf_json_reset_entry_number_and_depth(&json_session, pretty);
   abuf_json_mark_output(&json_session, true, abuf);
 }
 
 void output_end(struct autobuf *abuf) {
   abuf_json_mark_output(&json_session, false, abuf);
   abuf_puts(abuf, "\n");
-  abuf_json_reset_entry_number_and_depth(&json_session);
+  abuf_json_reset_entry_number_and_depth(&json_session, pretty);
 }
 
 void output_error(struct autobuf *abuf, unsigned int status, const char * req __attribute__((unused)), bool http_headers) {
index 0f4efa4..e0a1d00 100644 (file)
@@ -55,6 +55,7 @@
 
 info_plugin_functions_t functions;
 info_plugin_config_t config;
+bool pretty = false;
 
 static void my_init(void) __attribute__ ((constructor));
 static void my_fini(void) __attribute__ ((destructor));
@@ -121,6 +122,7 @@ int olsrd_plugin_interface_version(void) {
 static const struct olsrd_plugin_parameters plugin_parameters[] = { //
     //
         INFO_PLUGIN_CONFIG_PLUGIN_PARAMETERS(config), //
+        { .name = "pretty", .set_plugin_parameter = &set_plugin_boolean, .data = &pretty, .addon = { .pc = NULL } } //
     };
 
 void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size) {
index b1bfb1e..68483b5 100644 (file)
 #include "plugin_util.h"
 #include "info/info_types.h"
 
+#include <stdbool.h>
+
 extern info_plugin_config_t config;
+extern bool pretty;
 
 int olsrd_plugin_interface_version(void);
 int olsrd_plugin_init(void);