You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ph...@apache.org on 2019/08/13 12:38:59 UTC

[nifi-minifi-cpp] branch master updated: MINIFICPP-1000 - Add proper logging for configuration loading

This is an automated email from the ASF dual-hosted git repository.

phrocker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git


The following commit(s) were added to refs/heads/master by this push:
     new fb92490  MINIFICPP-1000 - Add proper logging for configuration loading
fb92490 is described below

commit fb9249086d4a9512ccbb129b493d8acd6f93580a
Author: Arpad Boda <ab...@apache.org>
AuthorDate: Thu Aug 8 15:18:32 2019 -0400

    MINIFICPP-1000 - Add proper logging for configuration loading
    
    This closes #623.
    
    Signed-off-by: Marc Parisi <ph...@apache.org>
---
 .../include/core/logging/LoggerConfiguration.h     |  1 +
 libminifi/include/properties/Configure.h           |  1 +
 libminifi/include/properties/Properties.h          | 10 ++++-
 libminifi/src/Properties.cpp                       | 45 ++++++++++------------
 main/MiNiFiMain.cpp                                |  2 +-
 5 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/libminifi/include/core/logging/LoggerConfiguration.h b/libminifi/include/core/logging/LoggerConfiguration.h
index d015862..7f9fdd2 100644
--- a/libminifi/include/core/logging/LoggerConfiguration.h
+++ b/libminifi/include/core/logging/LoggerConfiguration.h
@@ -57,6 +57,7 @@ struct LoggerNamespace {
 
 class LoggerProperties : public Properties {
  public:
+  LoggerProperties() : Properties("Logger properties") {}
   /**
    * Gets all keys that start with the given prefix and do not have a "." after the prefix and "." separator.
    *
diff --git a/libminifi/include/properties/Configure.h b/libminifi/include/properties/Configure.h
index 9fc639f..f4a3a4e 100644
--- a/libminifi/include/properties/Configure.h
+++ b/libminifi/include/properties/Configure.h
@@ -30,6 +30,7 @@ namespace minifi {
 
 class Configure : public Properties {
  public:
+  Configure() : Properties("MiNiFi configuration") {}
 
   void setAgentIdentifier(const std::string &identifier) {
     std::lock_guard<std::mutex> lock(mutex_);
diff --git a/libminifi/include/properties/Properties.h b/libminifi/include/properties/Properties.h
index 9047d11..420f26c 100644
--- a/libminifi/include/properties/Properties.h
+++ b/libminifi/include/properties/Properties.h
@@ -45,12 +45,16 @@ namespace minifi {
 
 class Properties {
  public:
-  Properties();
+  Properties(const std::string& name = "");
 
   virtual ~Properties() {
 
   }
 
+  virtual const std::string& getName() {
+    return name_;
+  }
+
   // Clear the load config
   void clear() {
     std::lock_guard<std::mutex> lock(mutex_);
@@ -110,7 +114,7 @@ class Properties {
   }
 
   // Get the determined MINIFI_HOME
-  std::string getHome() {
+  std::string getHome() const {
     return minifi_home_;
   }
   // Parse Command Line
@@ -137,6 +141,8 @@ class Properties {
   std::shared_ptr<minifi::core::logging::Logger> logger_;
   // Home location for this executable
   std::string minifi_home_;
+
+  std::string name_;
 };
 
 } /* namespace minifi */
diff --git a/libminifi/src/Properties.cpp b/libminifi/src/Properties.cpp
index 0e23b45..95cb18e 100644
--- a/libminifi/src/Properties.cpp
+++ b/libminifi/src/Properties.cpp
@@ -22,14 +22,6 @@
 #include "core/Core.h"
 #include "core/logging/LoggerConfiguration.h"
 
-#ifndef FILE_SEPARATOR_C
-#ifdef WIN32
-#define FILE_SEPARATOR_C '\\'
-#else
-#define FILE_SEPARATOR_C '/'
-#endif
-#endif
-
 namespace org {
 namespace apache {
 namespace nifi {
@@ -37,8 +29,9 @@ namespace minifi {
 
 #define TRACE_BUFFER_SIZE 512
 
-Properties::Properties()
-    : logger_(logging::LoggerFactory<Properties>::getLogger()) {
+Properties::Properties(const std::string& name)
+    : logger_(logging::LoggerFactory<Properties>::getLogger()),
+    name_(name) {
 }
 
 // Get the config value
@@ -122,26 +115,27 @@ bool Properties::parseConfigureFileLine(char *buf, std::string &prop_key, std::s
 
 // Load Configure File
 void Properties::loadConfigureFile(const char *fileName) {
-  std::string adjustedFilename;
-  if (fileName) {
-    // perform a naive determination if this is a relative path
-    if (fileName[0] != FILE_SEPARATOR_C) {
-      adjustedFilename = adjustedFilename + getHome() + FILE_SEPARATOR_C + fileName;
-    } else {
-      if (adjustedFilename.empty()) {
-        adjustedFilename = getHome();
-      }
-      adjustedFilename += fileName;
-    }
+  if (NULL == fileName) {
+    logger_->log_error("Configuration file path for %s is a nullptr!", getName().c_str());
+    return;
+  }
+
+  std::string adjustedFilename = getHome();
+  // perform a naive determination if this is a relative path
+  if (fileName[0] != utils::file::FileUtils::get_separator()) {
+    adjustedFilename += utils::file::FileUtils::get_separator();
   }
-  char *path = NULL;
+
+  adjustedFilename += fileName;
+
+  const char *path = NULL;
 #ifndef WIN32
   char full_path[PATH_MAX];
   path = realpath(adjustedFilename.c_str(), full_path);
 #else
-  path = const_cast<char*>(adjustedFilename.c_str());
+  path = adjustedFilename.c_str();
 #endif
-  logger_->log_info("Using configuration file located at %s, from %s", path, fileName);
+  logger_->log_info("Using configuration file to load configuration for %s from %s (located at %s)", getName().c_str(), fileName, path);
 
   properties_file_ = path;
 
@@ -165,7 +159,7 @@ void Properties::loadConfigureFile(const char *fileName) {
 bool Properties::validateConfigurationFile(const std::string &configFile) {
   std::ifstream file(configFile, std::ifstream::in);
   if (!file.good()) {
-    logger_->log_error("load configure file failed %s", configFile);
+    logger_->log_error("Failed to load configuration file %s to configure %s", configFile, getName().c_str());
     return false;
   }
 
@@ -173,6 +167,7 @@ bool Properties::validateConfigurationFile(const std::string &configFile) {
   for (file.getline(buf, TRACE_BUFFER_SIZE); file.good(); file.getline(buf, TRACE_BUFFER_SIZE)) {
     std::string key, value;
     if (!parseConfigureFileLine(buf, key, value)) {
+      logger_->log_error("While loading configuration for %s found invalid line: %s", getName().c_str(), buf);
       return false;
     }
   }
diff --git a/main/MiNiFiMain.cpp b/main/MiNiFiMain.cpp
index ba74ace..6c39b5e 100644
--- a/main/MiNiFiMain.cpp
+++ b/main/MiNiFiMain.cpp
@@ -191,7 +191,7 @@ int main(int argc, char **argv) {
 	log_properties->loadConfigureFile(DEFAULT_LOG_PROPERTIES_FILE);
 	logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
 
-	std::shared_ptr<minifi::Properties> uid_properties = std::make_shared<minifi::Properties>();
+	std::shared_ptr<minifi::Properties> uid_properties = std::make_shared<minifi::Properties>("UID properties");
 	uid_properties->setHome(minifiHome);
 	uid_properties->loadConfigureFile(DEFAULT_UID_PROPERTIES_FILE);
 	utils::IdGenerator::getIdGenerator()->initialize(uid_properties);