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.
