From 4a738a7a2b4d73e604dbe574d43396ecf36bee5a Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Thu, 29 Jul 2021 22:25:03 +0200
Subject: [PATCH] EHN: logging and error handling

---
 include/caosdb/log_level.h |  5 ++++-
 src/caosdb/logging.cpp     |  6 +++++
 src/ccaosdb.cpp            |  2 +-
 src/ccaosdbcli.c           | 26 +++++++++++++--------
 src/cxxcaosdbcli.cpp       | 46 +++++++++++++++++++++-----------------
 5 files changed, 54 insertions(+), 31 deletions(-)

diff --git a/include/caosdb/log_level.h b/include/caosdb/log_level.h
index 4cbfeb3..af05d3b 100644
--- a/include/caosdb/log_level.h
+++ b/include/caosdb/log_level.h
@@ -30,6 +30,9 @@
 #define CAOSDB_LOG_LEVEL_DEBUG 300
 #define CAOSDB_LOG_LEVEL_TRACE 200
 #define CAOSDB_LOG_LEVEL_ALL 0
-#define CAOSDB_DEFAULT_LOG_LEVEL 500
+
+#ifndef CAOSDB_DEFAULT_LOG_LEVEL
+#define CAOSDB_DEFAULT_LOG_LEVEL CAOSDB_LOG_LEVEL_ERROR
+#endif
 
 #endif
diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp
index f0d6be4..486ab84 100644
--- a/src/caosdb/logging.cpp
+++ b/src/caosdb/logging.cpp
@@ -120,6 +120,12 @@ SyslogSinkConfiguration::SyslogSinkConfiguration(const std::string &name,
 }
 
 auto initialize_logging_defaults() -> int {
+  // first: turn everything off
+  boost::log::settings off_settings;
+  off_settings["Core.DisableLogging"] = true;
+  boost::log::init_from_settings(off_settings);
+
+  // now set everything up
   const static std::vector<std::shared_ptr<SinkConfiguration>> default_sinks = {
     std::make_shared<ConsoleSinkConfiguration>("DEFAULT_SINK_1",
                                                CAOSDB_DEFAULT_LOG_LEVEL)};
diff --git a/src/ccaosdb.cpp b/src/ccaosdb.cpp
index 34da580..d21b3bd 100644
--- a/src/ccaosdb.cpp
+++ b/src/ccaosdb.cpp
@@ -12,7 +12,7 @@
 
 extern "C" {
 
-#define CCAOSDB_LOGGER_NAME "ccaosd"
+#define CCAOSDB_LOGGER_NAME "ccaosdb"
 
 /*
  * Macro for wrapping every function into a try-catch clause. If an exception
diff --git a/src/ccaosdbcli.c b/src/ccaosdbcli.c
index 90cf6ed..e06dff5 100644
--- a/src/ccaosdbcli.c
+++ b/src/ccaosdbcli.c
@@ -3,23 +3,31 @@
 #include <stdio.h>            // for printf
 
 int main(void) {
+  int status = 0; // last function return value
   printf(
     "CaosDB C client (libcaosdb %d.%d.%d)\nWe don't miss the H of caos.\n\n",
     LIBCAOSDB_VERSION_MAJOR, LIBCAOSDB_VERSION_MINOR, LIBCAOSDB_VERSION_PATCH);
 
   caosdb_connection_connection connection;
-  caosdb_connection_connection_manager_get_default_connection(&connection);
+  status =
+    caosdb_connection_connection_manager_get_default_connection(&connection);
+  if (status != 0) {
+    printf("An error occured: ERROR %d - %s\n", status,
+           caosdb_get_status_description(status));
+    return status;
+  }
 
   caosdb_info_version_info version_info;
-  int status = caosdb_connection_get_version_info(&version_info, &connection);
-  if (status == 0) {
-    printf("Server version: %d.%d.%d-%s-%s\n", version_info.major,
-           version_info.minor, version_info.patch, version_info.pre_release,
-           version_info.build);
-    /*} else {*/
-    /*printf("An error occured: ERROR %d - %s\n", status,*/
-    /*caosdb_get_status_description(status));*/
+  status = caosdb_connection_get_version_info(&version_info, &connection);
+  if (status != 0) {
+    printf("An error occured: ERROR %d - %s\n", status,
+           caosdb_get_status_description(status));
+    return status;
   }
 
+  printf("Server version: %d.%d.%d-%s-%s\n", version_info.major,
+         version_info.minor, version_info.patch, version_info.pre_release,
+         version_info.build);
+
   return 0;
 }
diff --git a/src/cxxcaosdbcli.cpp b/src/cxxcaosdbcli.cpp
index b33026d..f941449 100644
--- a/src/cxxcaosdbcli.cpp
+++ b/src/cxxcaosdbcli.cpp
@@ -24,6 +24,7 @@
 #include "caosdb/connection.h"  // for Connection, ConnectionManager
 #include "caosdb/constants.h"   // for LIBCAOSDB_VERSION_MINOR, LIBCAOSDB_V...
 #include "caosdb/entity.h"      // for Entity
+#include "caosdb/exceptions.h"  // for ConfigurationError
 #include "caosdb/info.h"        // for VersionInfo
 #include "caosdb/transaction.h" // for Transaction, UniqueResult, ResultSet
 #include <iostream>             // for operator<<, basic_ostream, basic_ost...
@@ -39,28 +40,33 @@ auto main() -> int {
             << "We don't miss the H of caos.\n"
             << std::endl;
 
-  const auto &connection =
-    caosdb::connection::ConnectionManager::GetDefaultConnection();
+  try {
+    const auto &connection =
+      caosdb::connection::ConnectionManager::GetDefaultConnection();
 
-  connection->RetrieveVersionInfoNoExceptions();
-  // get version info of the server
-  const auto &v_info = connection->GetVersionInfo();
-  std::cout << "Server Version: " << v_info->GetMajor() << "."
-            << v_info->GetMinor() << "." << v_info->GetPatch() << "-"
-            << v_info->GetPreRelease() << "-" << v_info->GetBuild()
-            << std::endl;
+    connection->RetrieveVersionInfoNoExceptions();
+    // get version info of the server
+    const auto &v_info = connection->GetVersionInfo();
+    std::cout << "Server Version: " << v_info->GetMajor() << "."
+              << v_info->GetMinor() << "." << v_info->GetPatch() << "-"
+              << v_info->GetPreRelease() << "-" << v_info->GetBuild()
+              << std::endl;
 
-  // retrieve an entity
-  auto transaction(connection->CreateTransaction());
-  transaction->RetrieveById("20");
-  transaction->Execute();
-  const auto &result_set =
-    dynamic_cast<const caosdb::transaction::UniqueResult &>(
-      transaction->GetResultSet());
+    // retrieve an entity
+    auto transaction(connection->CreateTransaction());
+    transaction->RetrieveById("20");
+    transaction->Execute();
+    const auto &result_set =
+      dynamic_cast<const caosdb::transaction::UniqueResult &>(
+        transaction->GetResultSet());
 
-  // print description
-  std::cout << "Entity Description: " << result_set.GetEntity().GetDescription()
-            << std::endl;
+    // print description
+    std::cout << "Entity Description: "
+              << result_set.GetEntity().GetDescription() << std::endl;
 
-  return 0;
+    return 0;
+  } catch (const caosdb::exceptions::ConfigurationError &exc) {
+    std::cout << "ConfigurationError: " << exc.what() << std::endl;
+    return exc.GetCode();
+  }
 }
-- 
GitLab