ack, review only. Some comments below. /Thanks HansN
On 09/19/2018 05:42 AM, Gary Lee wrote:
Some configuration attribute are read by OpenSAF daemons as
environment variables. eg.
export FMS_PROMOTE_ACTIVE_TIMER=0
There is no easy way to reload these values without a restart.
ConfigFileReader will parse these files looking for 'export VAR=VAL'
and store them into a map, so a daemon can reload configuration
without a restart.
---
src/base/Makefile.am | 2 ++
src/base/config_file_reader.cc | 43 ++++++++++++++++++++++++++++++++++
src/base/config_file_reader.h | 30 ++++++++++++++++++++++++
3 files changed, 75 insertions(+)
create mode 100644 src/base/config_file_reader.cc
create mode 100644 src/base/config_file_reader.h
diff --git a/src/base/Makefile.am b/src/base/Makefile.am
index c7dd01900..ce93562e5 100644
--- a/src/base/Makefile.am
+++ b/src/base/Makefile.am
@@ -33,6 +33,7 @@ lib_libopensaf_core_la_LDFLAGS += \
lib_libopensaf_core_la_SOURCES += \
src/base/condition_variable.cc \
src/base/conf.cc \
+ src/base/config_file_reader.cc \
src/base/daemon.c \
src/base/file_descriptor.cc \
src/base/file_notify.cc \
@@ -94,6 +95,7 @@ noinst_HEADERS += \
src/base/buffer.h \
src/base/condition_variable.h \
src/base/conf.h \
+ src/base/config_file_reader.h \
src/base/daemon.h \
src/base/file_descriptor.h \
src/base/file_notify.h \
diff --git a/src/base/config_file_reader.cc b/src/base/config_file_reader.cc
new file mode 100644
index 000000000..d22930505
--- /dev/null
+++ b/src/base/config_file_reader.cc
@@ -0,0 +1,43 @@
+/* -*- OpenSAF -*-
+ *
+ * Copyright Ericsson AB 2018 - All Rights Reserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ */
+
+#include <fstream>
+#include <regex>
+#include "base/config_file_reader.h"
+
+ConfigFileReader::SettingsMap ConfigFileReader::ParseFile(const std::string&
filename) {
+ SettingsMap map;
+ std::ifstream file(filename);
+ std::string line;
+
+ if (file.is_open()) {
+ while (getline(file, line)) {
+ // go through each line of the config file
+ // only process "export key=value" and ignore trailing comments
+ // note: value may be surrounded with quotes
[HansN] there were some issues found using std::regex with gcc 4.8.4 in
ticket #2165 but worked with newer compiler versions, check
the review comments for ticket #2165
+ std::regex re("^export\\s*(\\w+)\\s*=\\s*([^#\\n]+)");
+ std::sregex_token_iterator key_iter(line.begin(), line.end(), re, 1);
+ std::sregex_token_iterator value_iter(line.begin(), line.end(), re, 2);
+ std::sregex_token_iterator end;
+
+ for (; key_iter != end && value_iter != end; ++key_iter, ++value_iter) {
+ // store key-value pairs into map
+ map[key_iter->str()] = value_iter->str();
+ }
+ }
+ file.close();
+ }
+ return map;
+}
diff --git a/src/base/config_file_reader.h b/src/base/config_file_reader.h
new file mode 100644
index 000000000..cb281b7db
--- /dev/null
+++ b/src/base/config_file_reader.h
@@ -0,0 +1,30 @@
+/* -*- OpenSAF -*-
+ *
+ * Copyright Ericsson AB 2018 - All Rights Reserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ */
+
+#ifndef BASE_CONFIG_FILE_READER_H_
+#define BASE_CONFIG_FILE_READER_H_
+
+#include <map>
+#include <string>
+
+class ConfigFileReader {
+ public:
[HansN] prefer alias declarations to typedefs, (i.e. using).
+ typedef std::map<std::string, std::string> SettingsMap;
+
+ // parses OpenSAF 'config' files and return key-value pairs in a map
+ ConfigFileReader::SettingsMap ParseFile(const std::string& filename);
+};
+
+#endif /* BASE_CONFIG_FILE_READER_H */
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel