Parcourir la source

[3477] Report configuration summary when configuration is complete.

This change affects DHCP servers and D2.
Marcin Siodelski il y a 10 ans
Parent
commit
5763fe88d7

+ 5 - 0
src/bin/d2/d2_cfg_mgr.cc

@@ -196,6 +196,11 @@ D2CfgMgr::getD2Params() {
     return (getD2CfgContext()->getD2Params());
     return (getD2CfgContext()->getD2Params());
 }
 }
 
 
+std::string
+D2CfgMgr::getConfigSummary(const uint16_t) {
+    return (getD2Params()->getConfigSummary());
+}
+
 void
 void
 D2CfgMgr::buildParams(isc::data::ConstElementPtr params_config) {
 D2CfgMgr::buildParams(isc::data::ConstElementPtr params_config) {
     // Base class build creates parses and invokes build on each parser.
     // Base class build creates parses and invokes build on each parser.

+ 8 - 0
src/bin/d2/d2_cfg_mgr.h

@@ -238,6 +238,14 @@ public:
     /// @return reference to const D2ParamsPtr
     /// @return reference to const D2ParamsPtr
     const D2ParamsPtr& getD2Params();
     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:
 protected:
     /// @brief Performs the parsing of the given "params" element.
     /// @brief Performs the parsing of the given "params" element.
     ///
     ///

+ 8 - 0
src/bin/d2/d2_config.cc

@@ -22,6 +22,7 @@
 #include <boost/lexical_cast.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 
 
+#include <sstream>
 #include <string>
 #include <string>
 
 
 namespace isc {
 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
 bool
 D2Params::operator == (const D2Params& other) const {
 D2Params::operator == (const D2Params& other) const {
     return ((ip_address_ == other.ip_address_) &&
     return ((ip_address_ == other.ip_address_) &&

+ 9 - 0
src/bin/d2/d2_config.h

@@ -211,6 +211,15 @@ public:
         return(ncr_format_);
         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
     /// @brief Compares two D2Paramss for equality
     bool operator == (const D2Params& other) const;
     bool operator == (const D2Params& other) const;
 
 

+ 2 - 2
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
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
 // 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.
         // 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.");
         answer = isc::config::createAnswer(0, "Configuration committed.");
 
 
     } catch (const std::exception& ex) {
     } catch (const std::exception& ex) {

+ 12 - 0
src/bin/d2/d_cfg_mgr.h

@@ -308,6 +308,18 @@ public:
         return (context_);
         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:
 protected:
     /// @brief Parses a set of scalar configuration elements into global
     /// @brief Parses a set of scalar configuration elements into global
     /// parameters
     /// parameters

+ 4 - 0
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.
     // Verify that the global scalars have the proper values.
     EXPECT_EQ(isc::asiolink::IOAddress("3001::5"),
     EXPECT_EQ(isc::asiolink::IOAddress("3001::5"),
               d2_params_->getIpAddress());
               d2_params_->getIpAddress());
+
+    // Verify the configuration summary.
+    EXPECT_EQ("listening on 3001::5, port 777",
+              d2_params_->getConfigSummary());
 }
 }
 
 
 /// @brief Tests default values for D2Params.
 /// @brief Tests default values for D2Params.

+ 5 - 0
src/bin/d2/tests/d_cfg_mgr_unittests.cc

@@ -57,6 +57,11 @@ public:
                        const isc::data::Element::Position& /* pos */) {
                        const isc::data::Element::Position& /* pos */) {
         return (isc::dhcp::ParserPtr());
         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.
 /// @brief Test fixture class for testing DCfgMgrBase class.

+ 14 - 0
src/bin/d2/tests/d_test_stubs.h

@@ -180,6 +180,13 @@ public:
     virtual isc::data::ConstElementPtr command(const std::string& command,
     virtual isc::data::ConstElementPtr command(const std::string& command,
                                                isc::data::ConstElementPtr args);
                                                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
     // @brief Destructor
     virtual ~DStubProcess();
     virtual ~DStubProcess();
 };
 };
@@ -701,6 +708,13 @@ public:
                        const isc::data::Element::Position& pos
                        const isc::data::Element::Position& pos
                        = isc::data::Element::Position());
                        = 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
     /// @brief A list for remembering the element ids in the order they were
     /// parsed.
     /// parsed.
     ElementIdList parsed_order_;
     ElementIdList parsed_order_;

+ 3 - 4
src/bin/dhcp4/json_config_parser.cc

@@ -496,9 +496,6 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) {
         return (answer);
         return (answer);
     }
     }
 
 
-    /// @todo: Append most essential info here (like "2 new subnets configured")
-    string config_details;
-
     LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND,
     LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND,
               DHCP4_CONFIG_START).arg(config_set->str());
               DHCP4_CONFIG_START).arg(config_set->str());
 
 
@@ -657,7 +654,9 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) {
         return (answer);
         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.
     // Everything was fine. Configuration is successful.
     answer = isc::config::createAnswer(0, "Configuration committed.");
     answer = isc::config::createAnswer(0, "Configuration committed.");

+ 3 - 4
src/bin/dhcp6/json_config_parser.cc

@@ -698,9 +698,6 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) {
         return (answer);
         return (answer);
     }
     }
 
 
-    /// @todo: Append most essential info here (like "2 new subnets configured")
-    string config_details;
-
     LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND,
     LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND,
               DHCP6_CONFIG_START).arg(config_set->str());
               DHCP6_CONFIG_START).arg(config_set->str());
 
 
@@ -858,7 +855,9 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) {
         return (answer);
         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.
     // Everything was fine. Configuration is successful.
     answer = isc::config::createAnswer(0, "Configuration committed.");
     answer = isc::config::createAnswer(0, "Configuration committed.");

+ 1 - 1
src/lib/dhcpsrv/configuration.h

@@ -106,7 +106,7 @@ struct Configuration {
     /// @brief Returns summary of the configuration in the textual format.
     /// @brief Returns summary of the configuration in the textual format.
     ///
     ///
     /// This method returns the brief text describing the current configuration.
     /// 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.
     /// committed to notify a user about the changes in configuration.
     ///
     ///
     /// @todo Currently this method uses @c CfgMgr accessors to get the
     /// @todo Currently this method uses @c CfgMgr accessors to get the