Clean up monitoring format/naming
authorJennifer Richards <jennifer@painless-security.com>
Fri, 20 Apr 2018 23:17:04 +0000 (19:17 -0400)
committerJennifer Richards <jennifer@painless-security.com>
Fri, 20 Apr 2018 23:17:04 +0000 (19:17 -0400)
  * change show "serial" to "config_files" to reflect its function
  * suppress display of empty strings for unset / irrelevant values when
    returning routes / communities

common/tr_comm_encoders.c
include/mon_internal.h
mon/mon_common.c
mon/tests/test_mon_req_decode.c
mon/tests/test_mon_req_encode.c
mon/tests/test_mon_resp_encode.c
tr/tr_main.c
trp/trp_route_encoders.c

index bd3278e..2655fe5 100644 (file)
 #include <tr_util.h>
 #include <tr_debug.h>
 
-/**
- * Convert TR_NAME n to a JSON string, returning the empty string if n is null
- */
-static json_t *safe_name_to_json_string(TR_NAME *n)
-{
-  if (n)
-    return tr_name_to_json_string(n);
-  else
-    return json_string("");
-}
-
 static json_t *expiry_to_json_string(TR_COMM_MEMB *memb)
 {
   struct timespec ts_zero = {0, 0};
@@ -114,7 +103,7 @@ static json_t *tr_comm_memb_to_json(TR_COMM_MEMB *memb)
     OBJECT_SET_OR_FAIL(memb_json, "origin", json_string("file"));
   } else {
     OBJECT_SET_OR_FAIL(memb_json, "origin",
-                       safe_name_to_json_string(tr_comm_memb_get_origin(memb)));
+                       tr_name_to_json_string(tr_comm_memb_get_origin(memb)));
     OBJECT_SET_OR_FAIL(memb_json, "provenance",
                        provenance_to_json(memb));
     OBJECT_SET_OR_FAIL(memb_json, "expires",
@@ -241,11 +230,14 @@ static json_t *tr_comm_to_json(TR_COMM_TABLE *ctable, TR_COMM *comm)
   }
   OBJECT_SET_OR_FAIL(comm_json, "name",
                      tr_name_to_json_string(tr_comm_get_id(comm)));
-  OBJECT_SET_OR_FAIL(comm_json, "owner_realm",
-                     safe_name_to_json_string(tr_comm_get_owner_realm(comm)));
-  OBJECT_SET_OR_FAIL(comm_json, "owner_contact",
-                     safe_name_to_json_string(tr_comm_get_owner_contact(comm)));
-
+  if (tr_comm_get_owner_realm(comm)) {
+    OBJECT_SET_OR_FAIL(comm_json, "owner_realm",
+                     tr_name_to_json_string(tr_comm_get_owner_realm(comm)));
+  }
+  if (tr_comm_get_owner_contact(comm)) {
+    OBJECT_SET_OR_FAIL(comm_json, "owner_contact",
+                       tr_name_to_json_string(tr_comm_get_owner_contact(comm)));
+  }
   OBJECT_SET_OR_FAIL(comm_json, "idp_realms",
                      tr_comm_realms_to_json(ctable, tr_comm_get_id(comm), TR_ROLE_IDP));
   OBJECT_SET_OR_FAIL(comm_json, "rp_realms",
index ff2be72..29ea514 100644 (file)
@@ -95,7 +95,7 @@ enum mon_opt_type {
 
   // System information
   OPT_TYPE_SHOW_VERSION,
-  OPT_TYPE_SHOW_SERIAL,
+  OPT_TYPE_SHOW_CONFIG_FILES,
 
   // System statistics
   OPT_TYPE_SHOW_UPTIME,
index b03afda..a237b5d 100644 (file)
@@ -87,8 +87,8 @@ const char *mon_opt_type_to_string(MON_OPT_TYPE opt_type)
     case OPT_TYPE_SHOW_VERSION:
       return "version";
 
-    case OPT_TYPE_SHOW_SERIAL:
-      return "serial";
+    case OPT_TYPE_SHOW_CONFIG_FILES:
+      return "config_files";
 
     case OPT_TYPE_SHOW_UPTIME:
       return "uptime";
@@ -130,7 +130,7 @@ const char *mon_opt_type_to_string(MON_OPT_TYPE opt_type)
 MON_OPT_TYPE mon_opt_type_from_string(const char *s)
 {
   return_if_matches(s, OPT_TYPE_SHOW_VERSION);
-  return_if_matches(s, OPT_TYPE_SHOW_SERIAL);
+  return_if_matches(s, OPT_TYPE_SHOW_CONFIG_FILES);
   return_if_matches(s, OPT_TYPE_SHOW_UPTIME);
   return_if_matches(s, OPT_TYPE_SHOW_TID_REQ_COUNT);
   return_if_matches(s, OPT_TYPE_SHOW_TID_REQ_ERR_COUNT);
index 5391857..19ad64d 100644 (file)
@@ -52,7 +52,7 @@ static MON_REQ *show_options(const MON_OPT_TYPE *opts)
 static MON_REQ *show_all_options()
 {
   MON_OPT_TYPE opts[] = {
-      OPT_TYPE_SHOW_SERIAL,
+      OPT_TYPE_SHOW_CONFIG_FILES,
       OPT_TYPE_SHOW_VERSION,
       OPT_TYPE_SHOW_UPTIME,
       OPT_TYPE_SHOW_TID_REQ_COUNT,
index 80811fd..d3ae49c 100644 (file)
@@ -107,7 +107,7 @@ int main(void)
   free(expected);
 
   // Test show with many options
-  opts[0] = OPT_TYPE_SHOW_SERIAL;
+  opts[0] = OPT_TYPE_SHOW_CONFIG_FILES;
   opts[1] = OPT_TYPE_SHOW_VERSION;
   opts[2] = OPT_TYPE_SHOW_UPTIME;
   opts[3] = OPT_TYPE_SHOW_TID_REQ_COUNT;
index 081ed2d..6945b76 100644 (file)
@@ -64,10 +64,10 @@ static char *show_success()
                                mon_opt_type_to_string(OPT_TYPE_SHOW_VERSION),
                                json_string("1.2.3-4")));
   assert(! json_object_set_new(payload,
-                               mon_opt_type_to_string(OPT_TYPE_SHOW_SERIAL),
+                               mon_opt_type_to_string(OPT_TYPE_SHOW_CONFIG_FILES),
                                json_integer(1234567890)));
   assert(! json_object_set_new(payload,
-                               mon_opt_type_to_string(OPT_TYPE_SHOW_SERIAL),
+                               mon_opt_type_to_string(OPT_TYPE_SHOW_CONFIG_FILES),
                                json_integer(86400)));
   assert(! json_object_set_new(payload,
                                mon_opt_type_to_string(OPT_TYPE_SHOW_TID_REQ_PENDING),
index 35c32e0..5f8215d 100644 (file)
@@ -250,7 +250,7 @@ int main(int argc, char *argv[])
 
   /* Register monitoring handlers */
   mons_register_handler(tr->mons, MON_CMD_SHOW, OPT_TYPE_SHOW_VERSION, tr_handle_version, NULL);
-  mons_register_handler(tr->mons, MON_CMD_SHOW, OPT_TYPE_SHOW_SERIAL, tr_handle_show_cfg_serial, tr->cfg_mgr);
+  mons_register_handler(tr->mons, MON_CMD_SHOW, OPT_TYPE_SHOW_CONFIG_FILES, tr_handle_show_cfg_serial, tr->cfg_mgr);
   mons_register_handler(tr->mons, MON_CMD_SHOW, OPT_TYPE_SHOW_UPTIME, tr_handle_uptime, &start_time);
   mons_register_handler(tr->mons, MON_CMD_SHOW, OPT_TYPE_SHOW_RP_CLIENTS, tr_handle_show_rp_clients, tr->cfg_mgr);
   tr_tid_register_mons_handlers(tr->tids, tr->mons);
index 1d30cbc..8e1809b 100644 (file)
@@ -88,15 +88,13 @@ static json_t *expiry_to_json_string(TRP_ROUTE *route)
   char *s = NULL;
   json_t *jstr = NULL;
 
-  if (tr_cmp_timespec(trp_route_get_expiry(route), &ts_zero) == 0) {
-    s = strdup("");
-  } else {
+  if (tr_cmp_timespec(trp_route_get_expiry(route), &ts_zero) > 0) {
     s = timespec_to_str(trp_route_get_expiry(route));
-  }
 
-  if (s) {
-    jstr = json_string(s);
-    free(s);
+    if (s) {
+      jstr = json_string(s);
+      free(s);
+    }
   }
 
   return jstr;
@@ -111,6 +109,12 @@ do {                                           \
     goto cleanup;                              \
 } while (0)
 
+#define OBJECT_SET_OR_SKIP(jobj, key, val)     \
+do {                                           \
+  if (val)                                     \
+    json_object_set_new((jobj),(key),(val));   \
+} while (0)
+
 json_t *trp_route_to_json(TRP_ROUTE *route)
 {
   json_t *route_json = NULL;
@@ -122,13 +126,15 @@ json_t *trp_route_to_json(TRP_ROUTE *route)
 
   OBJECT_SET_OR_FAIL(route_json, "community", tr_name_to_json_string(trp_route_get_comm(route)));
   OBJECT_SET_OR_FAIL(route_json, "realm", tr_name_to_json_string(trp_route_get_realm(route)));
-  OBJECT_SET_OR_FAIL(route_json, "peer", tr_name_to_json_string(trp_route_get_peer(route)));
+  if (trp_route_get_peer(route)->len > 0)
+    OBJECT_SET_OR_FAIL(route_json, "peer", tr_name_to_json_string(trp_route_get_peer(route)));
   OBJECT_SET_OR_FAIL(route_json, "metric", json_integer(trp_route_get_metric(route)));
   OBJECT_SET_OR_FAIL(route_json, "trust_router", tr_name_to_json_string(trp_route_get_trust_router(route)));
-  OBJECT_SET_OR_FAIL(route_json, "next_hop", tr_name_to_json_string(trp_route_get_next_hop(route)));
+  if (trp_route_get_next_hop(route)->len > 0)
+    OBJECT_SET_OR_FAIL(route_json, "next_hop", tr_name_to_json_string(trp_route_get_next_hop(route)));
   OBJECT_SET_OR_FAIL(route_json, "selected", json_boolean(trp_route_is_selected(route)));
   OBJECT_SET_OR_FAIL(route_json, "local", json_boolean(trp_route_is_local(route)));
-  OBJECT_SET_OR_FAIL(route_json, "expires", expiry_to_json_string(route));
+  OBJECT_SET_OR_SKIP(route_json, "expires", expiry_to_json_string(route));
 
   /* succeeded - set the return value and increment the reference count */
   retval = route_json;