Kea: config_base.cc Source File

| Kea 2.2.0

config_base.cc
Go to the documentation of this file.
1// Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#include <config.h>
8
9#include <process/config_base.h>
10#include <log/logger_manager.h>
11#include <log/logger_specification.h>
12#include <list>
13
14using namespace isc::log;
15using namespace isc::data;
16
17namespace isc {
18namespace process {
19
20void
21ConfigBase::applyLoggingCfg() const {
22
23 std::list<LoggerSpecification> specs;
24 for (LoggingInfoStorage::const_iterator it = logging_info_.begin();
25 it != logging_info_.end(); ++it) {
26 specs.push_back(it->toSpec());
27 }
28 LoggerManager manager;
29 manager.process(specs.begin(), specs.end());
30}
31
32bool
33ConfigBase::equals(const ConfigBase& other) const {
34 // If number of loggers is different, then configurations aren't equal.
35 if (logging_info_.size() != other.logging_info_.size()) {
36 return (false);
37 }
38 // Pass through all loggers and try to find the match for each of them
39 // with the loggers from the other configuration. The order doesn't
40 // matter so we can't simply compare the vectors.
41 for (LoggingInfoStorage::const_iterator this_it =
42 logging_info_.begin(); this_it != logging_info_.end();
43 ++this_it) {
44 bool match = false;
45 for (LoggingInfoStorage::const_iterator other_it =
46 other.logging_info_.begin();
47 other_it != other.logging_info_.end(); ++other_it) {
48 if (this_it->equals(*other_it)) {
49 match = true;
50 break;
51 }
52 }
53 // No match found for the particular logger so return false.
54 if (!match) {
55 return (false);
56 }
57 }
58
59 // Check config control info for equality.
60 if ((config_ctl_info_ && !other.config_ctl_info_) ||
61 (!config_ctl_info_ && other.config_ctl_info_) ||
62 ((config_ctl_info_ && other.config_ctl_info_) &&
63 (!config_ctl_info_->equals(*(other.config_ctl_info_))))) {
64 return (false);
65 }
66
67 return (true);
68}
69
70void
71ConfigBase::copy(ConfigBase& other) const {
72 // We will entirely replace loggers in the new configuration.
73 other.logging_info_.clear();
74 for (LoggingInfoStorage::const_iterator it = logging_info_.begin();
75 it != logging_info_.end(); ++it) {
76 other.addLoggingInfo(*it);
77 }
78
79 // Clone the config control info
80 if (config_ctl_info_) {
81 other.config_ctl_info_.reset(new ConfigControlInfo(*config_ctl_info_));
82 } else {
83 other.config_ctl_info_.reset();
84 }
85
86 // Clone server tag.
87 other.server_tag_ = server_tag_;
88}
89
90void
91ConfigBase::merge(ConfigBase& other) {
92 // Merge logging info.
93 if (!other.logging_info_.empty()) {
94 logging_info_ = other.logging_info_;
95 }
96
97 // Merge the config control info
98 if (other.config_ctl_info_) {
99 if (config_ctl_info_) {
100 config_ctl_info_->merge(*other.config_ctl_info_);
101 } else {
102 config_ctl_info_ = other.config_ctl_info_;
103 }
104 }
105
106 // Merge server tag.
107 if (!other.server_tag_.unspecified()) {
108 server_tag_ = other.server_tag_.get();
109 }
110}
111
112 ElementPtr
113ConfigBase::toElement() const {
114 ElementPtr result = Element::createMap();
115
116 // Was in the Logging global map.
117 if (!logging_info_.empty()) {
118 // Set loggers list
119 ElementPtr loggers = Element::createList();
120 for (LoggingInfoStorage::const_iterator logger =
121 logging_info_.cbegin();
122 logger != logging_info_.cend(); ++logger) {
123 loggers->add(logger->toElement());
124 }
125 result->set("loggers", loggers);
126 }
127
128 // server-tag
129 if (!server_tag_.unspecified()) {
130 result->set("server-tag", Element::create(server_tag_.get()));
131 }
132
133 return (result);
134}
135
136};
137};
isc::log::LoggerManager
Logger Manager.
Definition: logger_manager.h:39
isc::log::LoggerManager::process
void process(T start, T finish)
Process Specifications.
Definition: logger_manager.h:56
isc::process::ConfigBase
Base class for all configurations.
Definition: config_base.h:33
isc::process::ConfigBase::addLoggingInfo
void addLoggingInfo(const process::LoggingInfo &logging_info)
Sets logging specific configuration.
Definition: config_base.h:50
isc::process::ConfigBase::applyLoggingCfg
void applyLoggingCfg() const
Apply logging configuration to log4cplus.
Definition: config_base.cc:21
isc::process::ConfigBase::toElement
virtual isc::data::ElementPtr toElement() const
Converts to Element representation.
Definition: config_base.cc:113
isc::process::ConfigBase::copy
void copy(ConfigBase &new_config) const
Copies the current configuration to a new configuration.
Definition: config_base.cc:71
isc::process::ConfigBase::merge
virtual void merge(ConfigBase &other)
Merges specified configuration into this configuration.
Definition: config_base.cc:91
isc::process::ConfigBase::equals
bool equals(const ConfigBase &other) const
Compares two configuration.
Definition: config_base.cc:33
isc::process::ConfigControlInfo
Embodies configuration information used during a server's configuration process.
Definition: config_ctl_info.h:141
isc::util::Optional::get
T get() const
Retrieves the encapsulated value.
Definition: optional.h:114
isc::util::Optional::unspecified
void unspecified(bool unspecified)
Modifies the flag that indicates whether the value is specified or unspecified.
Definition: optional.h:136
config_base.h
logger_manager.h
logger_specification.h
isc::asiodns::logger
isc::log::Logger logger("asiodns")
Use the ASIO logger.
Definition: asiodns/logger.h:15
isc::data
Definition: base_stamped_element.cc:12
isc::data::ElementPtr
boost::shared_ptr< Element > ElementPtr
Definition: data.h:24
isc::log
Definition: buffer_appender_impl.cc:17
isc
Defines the logger used by the top-level component of kea-lfc.
Definition: agent_parser.cc:143