From: Marcin Siodelski Date: Mon, 18 Aug 2014 16:43:51 +0000 (+0200) Subject: [3477] Report configuration summary when configuration is complete. X-Git-Tag: trac3482_base~29^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5763fe88d7b161f70d2b5f48237c8494f62cc5a0;p=thirdparty%2Fkea.git [3477] Report configuration summary when configuration is complete. This change affects DHCP servers and D2. --- diff --git a/src/bin/d2/d2_cfg_mgr.cc b/src/bin/d2/d2_cfg_mgr.cc index 3759207700..4e1d8978df 100644 --- a/src/bin/d2/d2_cfg_mgr.cc +++ b/src/bin/d2/d2_cfg_mgr.cc @@ -196,6 +196,11 @@ D2CfgMgr::getD2Params() { return (getD2CfgContext()->getD2Params()); } +std::string +D2CfgMgr::getConfigSummary(const uint16_t) { + return (getD2Params()->getConfigSummary()); +} + void D2CfgMgr::buildParams(isc::data::ConstElementPtr params_config) { // Base class build creates parses and invokes build on each parser. diff --git a/src/bin/d2/d2_cfg_mgr.h b/src/bin/d2/d2_cfg_mgr.h index 037d337dcc..6208677d8c 100644 --- a/src/bin/d2/d2_cfg_mgr.h +++ b/src/bin/d2/d2_cfg_mgr.h @@ -238,6 +238,14 @@ public: /// @return reference to const D2ParamsPtr const D2ParamsPtr& getD2Params(); + /// @brief Returns configuration summary in the textual format. + /// + /// @param selection Bitfield which describes the parts of the configuration + /// to be returned. This parameter is ignored for the D2. + /// + /// @return Summary of the configuration in the textual format. + virtual std::string getConfigSummary(const uint16_t selection); + protected: /// @brief Performs the parsing of the given "params" element. /// diff --git a/src/bin/d2/d2_config.cc b/src/bin/d2/d2_config.cc index 4ec3dbddee..4eba5d331d 100644 --- a/src/bin/d2/d2_config.cc +++ b/src/bin/d2/d2_config.cc @@ -22,6 +22,7 @@ #include #include +#include #include namespace isc { @@ -88,6 +89,13 @@ D2Params::validateContents() { } } +std::string +D2Params::getConfigSummary() const { + std::ostringstream s; + s << "listening on " << getIpAddress() << ", port " << getPort(); + return (s.str()); +} + bool D2Params::operator == (const D2Params& other) const { return ((ip_address_ == other.ip_address_) && diff --git a/src/bin/d2/d2_config.h b/src/bin/d2/d2_config.h index db3b23ad2a..159da45fe9 100644 --- a/src/bin/d2/d2_config.h +++ b/src/bin/d2/d2_config.h @@ -211,6 +211,15 @@ public: return(ncr_format_); } + /// @brief Return summary of the configuration used by D2. + /// + /// The returned summary of the configuration is meant to be appended to + /// the log message informing about the successful completion of the + /// D2 configuration. + /// + /// @return Configuration summary in the textual format. + std::string getConfigSummary() const; + /// @brief Compares two D2Paramss for equality bool operator == (const D2Params& other) const; diff --git a/src/bin/d2/d_cfg_mgr.cc b/src/bin/d2/d_cfg_mgr.cc index 8e0725693c..ec65b7b9fe 100644 --- a/src/bin/d2/d_cfg_mgr.cc +++ b/src/bin/d2/d_cfg_mgr.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -246,7 +246,7 @@ DCfgMgrBase::parseConfig(isc::data::ConstElementPtr config_set) { } // Everything was fine. Configuration set processed successfully. - LOG_INFO(dctl_logger, DCTL_CONFIG_COMPLETE).arg(""); + LOG_INFO(dctl_logger, DCTL_CONFIG_COMPLETE).arg(getConfigSummary(0)); answer = isc::config::createAnswer(0, "Configuration committed."); } catch (const std::exception& ex) { diff --git a/src/bin/d2/d_cfg_mgr.h b/src/bin/d2/d_cfg_mgr.h index 9d5817b4dd..b9d58dc291 100644 --- a/src/bin/d2/d_cfg_mgr.h +++ b/src/bin/d2/d_cfg_mgr.h @@ -308,6 +308,18 @@ public: return (context_); } + /// @brief Returns configuration summary in the textual format. + /// + /// This method returns the brief text describing the current configuration. + /// It may be used for logging purposes, e.g. whn the new configuration is + /// committed to notify a user about the changes in configuration. + /// + /// @param selection Bitfield which describes the parts of the configuration + /// to be returned. + /// + /// @return Summary of the configuration in the textual format. + virtual std::string getConfigSummary(const uint16_t selection) = 0; + protected: /// @brief Parses a set of scalar configuration elements into global /// parameters diff --git a/src/bin/d2/tests/d2_cfg_mgr_unittests.cc b/src/bin/d2/tests/d2_cfg_mgr_unittests.cc index ec1c666cc5..3abdbd6cec 100644 --- a/src/bin/d2/tests/d2_cfg_mgr_unittests.cc +++ b/src/bin/d2/tests/d2_cfg_mgr_unittests.cc @@ -376,6 +376,10 @@ TEST_F(D2CfgMgrTest, validParamsEntry) { // Verify that the global scalars have the proper values. EXPECT_EQ(isc::asiolink::IOAddress("3001::5"), d2_params_->getIpAddress()); + + // Verify the configuration summary. + EXPECT_EQ("listening on 3001::5, port 777", + d2_params_->getConfigSummary()); } /// @brief Tests default values for D2Params. diff --git a/src/bin/d2/tests/d_cfg_mgr_unittests.cc b/src/bin/d2/tests/d_cfg_mgr_unittests.cc index d9aa843541..735bff8a50 100644 --- a/src/bin/d2/tests/d_cfg_mgr_unittests.cc +++ b/src/bin/d2/tests/d_cfg_mgr_unittests.cc @@ -57,6 +57,11 @@ public: const isc::data::Element::Position& /* pos */) { return (isc::dhcp::ParserPtr()); } + + /// @brief Returns summary of configuration in the textual format. + virtual std::string getConfigSummary(const uint16_t) { + return (""); + } }; /// @brief Test fixture class for testing DCfgMgrBase class. diff --git a/src/bin/d2/tests/d_test_stubs.h b/src/bin/d2/tests/d_test_stubs.h index b01c249b66..d836d34aaa 100644 --- a/src/bin/d2/tests/d_test_stubs.h +++ b/src/bin/d2/tests/d_test_stubs.h @@ -180,6 +180,13 @@ public: virtual isc::data::ConstElementPtr command(const std::string& command, isc::data::ConstElementPtr args); + /// @brief Returns configuration summary in the textual format. + /// + /// @return Always an empty string. + virtual std::string getConfigSummary(const uint16_t) { + return (""); + } + // @brief Destructor virtual ~DStubProcess(); }; @@ -701,6 +708,13 @@ public: const isc::data::Element::Position& pos = isc::data::Element::Position()); + /// @brief Returns a summary of the configuration in the textual format. + /// + /// @return Always an empty string. + virtual std::string getConfigSummary(const uint16_t) { + return (""); + } + /// @brief A list for remembering the element ids in the order they were /// parsed. ElementIdList parsed_order_; diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 1a7be10172..1ece1bdf09 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -496,9 +496,6 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { return (answer); } - /// @todo: Append most essential info here (like "2 new subnets configured") - string config_details; - LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_START).arg(config_set->str()); @@ -657,7 +654,9 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { return (answer); } - LOG_INFO(dhcp4_logger, DHCP4_CONFIG_COMPLETE).arg(config_details); + LOG_INFO(dhcp4_logger, DHCP4_CONFIG_COMPLETE) + .arg(CfgMgr::instance().getConfiguration()-> + getConfigSummary(Configuration::CFGSEL_ALL4)); // Everything was fine. Configuration is successful. answer = isc::config::createAnswer(0, "Configuration committed."); diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 1ed76f2558..ba80f63dde 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -698,9 +698,6 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { return (answer); } - /// @todo: Append most essential info here (like "2 new subnets configured") - string config_details; - LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_START).arg(config_set->str()); @@ -858,7 +855,9 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { return (answer); } - LOG_INFO(dhcp6_logger, DHCP6_CONFIG_COMPLETE).arg(config_details); + LOG_INFO(dhcp6_logger, DHCP6_CONFIG_COMPLETE) + .arg(CfgMgr::instance().getConfiguration()-> + getConfigSummary(Configuration::CFGSEL_ALL6)); // Everything was fine. Configuration is successful. answer = isc::config::createAnswer(0, "Configuration committed."); diff --git a/src/lib/dhcpsrv/configuration.h b/src/lib/dhcpsrv/configuration.h index 6e6ffb3c55..16bb1dda82 100644 --- a/src/lib/dhcpsrv/configuration.h +++ b/src/lib/dhcpsrv/configuration.h @@ -106,7 +106,7 @@ struct Configuration { /// @brief Returns summary of the configuration in the textual format. /// /// This method returns the brief text describing the current configuration. - /// It may be use for logging purposes, e.g. when the new configuration is + /// It may be used for logging purposes, e.g. when the new configuration is /// committed to notify a user about the changes in configuration. /// /// @todo Currently this method uses @c CfgMgr accessors to get the