Commit 327aa101 authored by Tomek Mrugalski's avatar Tomek Mrugalski 🛰
Browse files

[#25,!14] ConfigBase class added.

parent 964834c9
......@@ -38,12 +38,15 @@ CLEANFILES = *.gcno *.gcda process_messages.h s-messages
DISTCLEANFILES = spec_config.h.pre
libkea_process_la_SOURCES = d_cfg_mgr.h
libkea_process_la_SOURCES = config_base.h
libkea_process_la_SOURCES += d_cfg_mgr.h
libkea_process_la_SOURCES += d_controller.h
libkea_process_la_SOURCES += d_log.h
libkea_process_la_SOURCES += d_process.h
libkea_process_la_SOURCES += daemon.h
libkea_process_la_SOURCES += io_service_signal.h
libkea_process_la_SOURCES += log_parser.h
libkea_process_la_SOURCES += logging_info.h
nodist_libkea_process_la_SOURCES = process_messages.h
#include <process/config_base.h>
#include <log/logger_manager.h>
#include <log/logger_specification.h>
#include <list>
using namespace isc::log;
using namespace isc::data;
namespace isc {
namespace process {
ConfigBase::applyLoggingCfg() const {
std::list<LoggerSpecification> specs;
for (LoggingInfoStorage::const_iterator it = logging_info_.begin();
it != logging_info_.end(); ++it) {
LoggerManager manager;
manager.process(specs.begin(), specs.end());
ConfigBase::equals(const ConfigBase& other) const {
// If number of loggers is different, then configurations aren't equal.
if (logging_info_.size() != other.logging_info_.size()) {
return (false);
// Pass through all loggers and try to find the match for each of them
// with the loggers from the other configuration. The order doesn't
// matter so we can't simply compare the vectors.
for (LoggingInfoStorage::const_iterator this_it =
logging_info_.begin(); this_it != logging_info_.end();
++this_it) {
bool match = false;
for (LoggingInfoStorage::const_iterator other_it =
other_it != other.logging_info_.end(); ++other_it) {
if (this_it->equals(*other_it)) {
match = true;
// No match found for the particular logger so return false.
if (!match) {
return (false);
return (true);
ConfigBase::copy(ConfigBase& other) const {
// We will entirely replace loggers in the new configuration.
for (LoggingInfoStorage::const_iterator it = logging_info_.begin();
it != logging_info_.end(); ++it) {
ConfigBase::toElement() const {
ElementPtr result = Element::createMap();
// Logging global map (skip if empty)
if (!logging_info_.empty()) {
ElementPtr logging = Element::createMap();
// Set loggers list
ElementPtr loggers = Element::createList();
for (LoggingInfoStorage::const_iterator logger =
logger != logging_info_.cend(); ++logger) {
logging->set("loggers", loggers);
result->set("Logging", logging);
return (result);
// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at
#include <cc/cfg_to_element.h>
#include <cc/user_context.h>
#include <process/logging_info.h>
namespace isc {
namespace process {
/// @brief Base class for all configurations
/// This is a common base class that represents configurations.
/// SrvConfig, D2CfgContext, CtrlAgentCfgContext and possibly other
/// classes holding configurations are derived from this.
/// It should contain only those elements that are applicable to really
/// every daemon we may have. Before adding anything here, please consider
/// whether it would be usable by all of the following: DHCP servers,
/// DDNS update daemon, Control Agent, Netconf daemon, DHCP relay,
/// DHCP client.
/// This class currently holds information about logging configuration.
class ConfigBase : public isc::data::UserContext, public isc::data::CfgToElement {
/// @name Modifiers and accesors for the configuration objects.
/// @warning References to the objects returned by accessors are only
/// valid during the lifetime of the @c SrvConfig object which
/// returned them.
/// @brief Returns logging specific configuration.
const process::LoggingInfoStorage& getLoggingInfo() const {
return (logging_info_);
/// @brief Sets logging specific configuration.
/// @param logging_info New logging configuration.
void addLoggingInfo(const process::LoggingInfo& logging_info) {
/// @brief Apply logging configuration to log4cplus.
void applyLoggingCfg() const;
/// @brief Compares two configuration.
/// @param other the other configuration to compare to
virtual bool equals(const ConfigBase& other) const;
/// @brief Converts to Element representation
/// @return Element representation.
virtual isc::data::ElementPtr toElement() const;
/// @brief Copies the current configuration to a new configuration.
/// This method copies only the parameters defined in this class.
/// Since derived classes are expected to provide their own
/// copy methods, this one is protected and can be used only
/// by descendant classes.
/// @param new_config this configuration will be copied to new_config
virtual void copy(ConfigBase& new_config) const;
/// @brief Logging specific information.
process::LoggingInfoStorage logging_info_;
/// @brief Non-const pointer to the @c SrvConfig.
typedef boost::shared_ptr<ConfigBase> ConfigPtr;
#endif /* CONFIG_BASE_H */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment