Repository: trafficserver
Updated Branches:
  refs/heads/master 080bcaa07 -> b1f81f881


TS-3818: add traffic_ctl config defaults subcommand

Add a traffic_ctl subcommand to show the default values of all
configuration records.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/b1f81f88
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/b1f81f88
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/b1f81f88

Branch: refs/heads/master
Commit: b1f81f8819b0624eff8e96a54ecdccbce9bcf7a9
Parents: 2c19cd2
Author: James Peach <[email protected]>
Authored: Tue Aug 4 21:29:46 2015 -0700
Committer: James Peach <[email protected]>
Committed: Thu Aug 27 20:53:54 2015 -0700

----------------------------------------------------------------------
 cmd/traffic_ctl/config.cc                 | 82 +++++++++++++++++---------
 cmd/traffic_ctl/traffic_ctl.cc            |  6 +-
 doc/reference/commands/traffic_ctl.en.rst |  7 +++
 3 files changed, 66 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b1f81f88/cmd/traffic_ctl/config.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_ctl/config.cc b/cmd/traffic_ctl/config.cc
index 61e07fe..4295407 100644
--- a/cmd/traffic_ctl/config.cc
+++ b/cmd/traffic_ctl/config.cc
@@ -157,6 +157,19 @@ rec_sourceof(int rec_source)
   }
 }
 
+static const char *
+rec_labelof(int rec_class)
+{
+  switch (rec_class) {
+  case RECT_CONFIG:
+    return "CONFIG";
+  case RECT_LOCAL:
+    return "LOCAL";
+  default:
+    return NULL;
+  }
+}
+
 static std::string
 timestr(time_t tm)
 {
@@ -170,20 +183,7 @@ format_record(const CtrlMgmtRecord &record, bool recfmt)
   CtrlMgmtRecordValue value(record);
 
   if (recfmt) {
-    const char *label;
-
-    switch (record.rclass()) {
-    case RECT_CONFIG:
-      label = "CONFIG ";
-      break;
-    case RECT_LOCAL:
-      label = "LOCAL ";
-      break;
-    default:
-      label = "";
-    }
-
-    printf("%s%s %s %s\n", label, record.name(), rec_typeof(record.type()), 
value.c_str());
+    printf("%s %s %s %s\n", rec_labelof(record.rclass()), record.name(), 
rec_typeof(record.type()), value.c_str());
   } else {
     printf("%s: %s\n", record.name(), value.c_str());
   }
@@ -391,6 +391,43 @@ config_status(unsigned argc, const char **argv)
 }
 
 static int
+config_defaults(unsigned argc, const char **argv)
+{
+  int recfmt = 0;
+  const ArgumentDescription opts[] = {
+    {"records", '-', "Emit output in records.config format", "F", &recfmt, 
NULL, NULL},
+  };
+
+  if (!CtrlProcessArguments(argc, argv, opts, countof(opts)) || 
n_file_arguments != 0) {
+    return CtrlCommandUsage("config diff [OPTIONS]");
+  }
+
+  TSMgmtError error;
+  CtrlMgmtRecordDescriptionList descriptions;
+
+  error = descriptions.match(".*");
+  if (error != TS_ERR_OKAY) {
+    CtrlMgmtError(error, "failed to fetch record metadata");
+    return CTRL_EX_ERROR;
+  }
+
+  while (!descriptions.empty()) {
+    TSConfigRecordDescription *desc = descriptions.next();
+    CtrlMgmtRecordValue deflt(desc->rec_type, desc->rec_default);
+
+    if (recfmt) {
+      printf("%s %s %s %s\n", rec_labelof(desc->rec_class), desc->rec_name, 
rec_typeof(desc->rec_type), deflt.c_str());
+    } else {
+      printf("%s: %s\n", desc->rec_name, deflt.c_str());
+    }
+
+    TSConfigRecordDescriptionDestroy(desc);
+  }
+
+  return CTRL_EX_OK;
+}
+
+static int
 config_diff(unsigned argc, const char **argv)
 {
   int recfmt = 0;
@@ -439,20 +476,8 @@ config_diff(unsigned argc, const char **argv)
       CtrlMgmtRecordValue deflt(desc->rec_type, desc->rec_default);
 
       if (recfmt) {
-        const char *label;
-
-        switch (desc->rec_class) {
-        case RECT_CONFIG:
-          label = "CONFIG ";
-          break;
-        case RECT_LOCAL:
-          label = "LOCAL ";
-          break;
-        default:
-          label = "";
-        }
-
-        printf("%s%s %s %s # default: %s\n", label, desc->rec_name, 
rec_typeof(desc->rec_type), current.c_str(), deflt.c_str());
+        printf("%s %s %s %s # default: %s\n", rec_labelof(desc->rec_class), 
desc->rec_name, rec_typeof(desc->rec_type),
+               current.c_str(), deflt.c_str());
       } else {
         printf("%s has changed\n", desc->rec_name);
         printf("\t%-16s: %s\n", "Current Value", current.c_str());
@@ -470,6 +495,7 @@ int
 subcommand_config(unsigned argc, const char **argv)
 {
   const subcommand commands[] = {
+    {config_defaults, "defaults", "Show default information configuration 
values"},
     {config_describe, "describe", "Show detailed information about 
configuration values"},
     {config_diff, "diff", "Show non-default configuration values"},
     {config_get, "get", "Get one or more configuration values"},

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b1f81f88/cmd/traffic_ctl/traffic_ctl.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_ctl/traffic_ctl.cc b/cmd/traffic_ctl/traffic_ctl.cc
index c1e11f2..7601c6d 100644
--- a/cmd/traffic_ctl/traffic_ctl.cc
+++ b/cmd/traffic_ctl/traffic_ctl.cc
@@ -98,7 +98,11 @@ CtrlMgmtRecordValue::init(TSRecordT _t, TSRecordValueT _v)
     snprintf(this->fmt.nbuf, sizeof(this->fmt.nbuf), "%f", _v.float_val);
     break;
   case TS_REC_STRING:
-    this->fmt.str = _v.string_val;
+    if (strcmp(_v.string_val, "") == 0) {
+      this->fmt.str = "\"\"";
+    } else {
+      this->fmt.str = _v.string_val;
+    }
     break;
   default:
     rec_type = TS_REC_STRING;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b1f81f88/doc/reference/commands/traffic_ctl.en.rst
----------------------------------------------------------------------
diff --git a/doc/reference/commands/traffic_ctl.en.rst 
b/doc/reference/commands/traffic_ctl.en.rst
index 7393e6a..f40e2bf 100644
--- a/doc/reference/commands/traffic_ctl.en.rst
+++ b/doc/reference/commands/traffic_ctl.en.rst
@@ -97,6 +97,13 @@ traffic_ctl cluster
 traffic_ctl config
 ------------------
 .. program:: traffic_ctl config
+.. option:: defaults [--records]
+
+    Display the default values for all configuration records. The
+    *--records* flag has the same behavior as :option:`traffic_ctl
+    config get --records`.
+
+.. program:: traffic_ctl config
 .. option:: describe RECORD [RECORD...]
 
     Display all the known information about a configuration record.

Reply via email to