Skip to content
Snippets Groups Projects
Commit bb681fe3 authored by Daniel Hornung's avatar Daniel Hornung
Browse files

DOC: Documentation and typos.

parent b9aa2c79
No related branches found
No related tags found
1 merge request!3Better Error Handling and Logging
...@@ -149,6 +149,9 @@ public: ...@@ -149,6 +149,9 @@ public:
return ConnectionManager::GetInstance().mGetConnection(name); return ConnectionManager::GetInstance().mGetConnection(name);
}; };
/**
* Get the connection marked by the "default" key in the configuration.
*/
inline static auto GetDefaultConnection() inline static auto GetDefaultConnection()
-> const std::shared_ptr<Connection> & { -> const std::shared_ptr<Connection> & {
return ConnectionManager::GetInstance().mGetDefaultConnection(); return ConnectionManager::GetInstance().mGetDefaultConnection();
......
...@@ -111,6 +111,12 @@ private: ...@@ -111,6 +111,12 @@ private:
friend class Entity; friend class Entity;
}; };
/**
* Messages convey information about the state and result of transactions.
*
* A Message object can be thought of as kinf of a generalized error object in other frameworks.
* Please have a look at MessageCodes for more details.
*/
class Message { class Message {
public: public:
explicit inline Message(caosdb::entity::v1alpha1::Message *wrapped) explicit inline Message(caosdb::entity::v1alpha1::Message *wrapped)
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
* *
*/ */
#ifndef CAOSDB_LOG_LEVELS_H #ifndef CAOSDB_LOG_LEVEL_H
#define CAOSDB_LOG_LEVELS_H #define CAOSDB_LOG_LEVEL_H
#define CAOSDB_LOG_LEVEL_OFF 1000000 #define CAOSDB_LOG_LEVEL_OFF 1000000
#define CAOSDB_LOG_LEVEL_FATAL 700 #define CAOSDB_LOG_LEVEL_FATAL 700
......
...@@ -43,6 +43,9 @@ typedef boost::log::sources::severity_channel_logger<int, std::string> ...@@ -43,6 +43,9 @@ typedef boost::log::sources::severity_channel_logger<int, std::string>
BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(logger, boost_logger_class) BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(logger, boost_logger_class)
/**
* This class stores the integer log level.
*/
class LevelConfiguration { class LevelConfiguration {
public: public:
LevelConfiguration(int level) : level(level){}; LevelConfiguration(int level) : level(level){};
...@@ -54,6 +57,11 @@ private: ...@@ -54,6 +57,11 @@ private:
class SinkConfiguration; class SinkConfiguration;
/**
* This class stores the logging level and log sinks.
*
* Sinks are represented by SinkConfiguration objects.
*/
class LoggingConfiguration : public LevelConfiguration { class LoggingConfiguration : public LevelConfiguration {
public: public:
virtual ~LoggingConfiguration() = default; virtual ~LoggingConfiguration() = default;
...@@ -69,6 +77,22 @@ private: ...@@ -69,6 +77,22 @@ private:
auto initialize_logging_defaults() -> int; auto initialize_logging_defaults() -> int;
auto initialize_logging(const LoggingConfiguration &configuration) -> void; auto initialize_logging(const LoggingConfiguration &configuration) -> void;
/**
* A logging sink is characterized by a name and destination.
*
* Typical inheriting configurations exist for console, files and syslog.
*
* When a SinkConfiguration is created from a configuration, the sink configuration must contain a
* \p destination key which matches one of the keywords for implemented sinks. At the moment of
* writing this documentation, valid destinations are:
*
* \li \p file
* \li \p console
* \li \p syslog
*
* A \p level keyword sets the logging level, if it exists at the sink or logging level of the
* configuration.
*/
class SinkConfiguration : public LevelConfiguration { class SinkConfiguration : public LevelConfiguration {
public: public:
virtual ~SinkConfiguration() = default; virtual ~SinkConfiguration() = default;
...@@ -104,6 +128,12 @@ private: ...@@ -104,6 +128,12 @@ private:
const std::string destination = "Console"; const std::string destination = "Console";
}; };
/**
* The file name is the destination, the directory can be set separately.
*
* If there is a `directory` key in the configuration, that will be used as a default, otherwise it
* is the current directory.
*/
class FileSinkConfiguration : public SinkConfiguration { class FileSinkConfiguration : public SinkConfiguration {
public: public:
virtual ~FileSinkConfiguration() = default; virtual ~FileSinkConfiguration() = default;
...@@ -136,27 +166,27 @@ private: ...@@ -136,27 +166,27 @@ private:
}; };
/** /**
* Convenience function for the c-interface. * Convenience function for the C interface.
*/ */
void caosdb_log_fatal(const char *channel, const char *msg); void caosdb_log_fatal(const char *channel, const char *msg);
/** /**
* Convenience function for the c-interface. * Convenience function for the C interface.
*/ */
void caosdb_log_error(const char *channel, const char *msg); void caosdb_log_error(const char *channel, const char *msg);
/** /**
* Convenience function for the c-interface. * Convenience function for the C interface.
*/ */
void caosdb_log_warn(const char *channel, const char *msg); void caosdb_log_warn(const char *channel, const char *msg);
/** /**
* Convenience function for the c-interface. * Convenience function for the C interface.
*/ */
void caosdb_log_info(const char *channel, const char *msg); void caosdb_log_info(const char *channel, const char *msg);
/** /**
* Convenience function for the c-interface. * Convenience function for the C interface.
*/ */
void caosdb_log_debug(const char *channel, const char *msg); void caosdb_log_debug(const char *channel, const char *msg);
/** /**
* Convenience function for the c-interface. * Convenience function for the C interface.
*/ */
void caosdb_log_trace(const char *channel, const char *msg); void caosdb_log_trace(const char *channel, const char *msg);
......
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
* In contrast to the status codes, the message codes are part of the CaosDB * In contrast to the status codes, the message codes are part of the CaosDB
* API. Messages (and their codes) represent the state of the entities in a * API. Messages (and their codes) represent the state of the entities in a
* transaction or the server. * transaction or the server.
*
* For a specification of the message codes, look at the protobuf documentation. The sources and
* documentation can be found at https://gitlab.indiscale.com/caosdb/src/caosdb-proto.
*/ */
namespace caosdb::entity { namespace caosdb::entity {
......
...@@ -25,7 +25,11 @@ ...@@ -25,7 +25,11 @@
/** /**
* TransactionStatus indicates the current status of a transaction and, when it * TransactionStatus indicates the current status of a transaction and, when it
* has already terminated, whether the transaction has been successful or not. * has already terminated, whether the transaction has been successful or not.
*
* A status code of 0 denotes a generic success state, positive values indicate errors, and negative
* values indicate other states, such as different stages of a transaction in process.
*/ */
#include "caosdb/status_code.h" #include "caosdb/status_code.h"
#include "caosdb/exceptions.h" #include "caosdb/exceptions.h"
#include <memory> // for shared_ptr, unique_ptr #include <memory> // for shared_ptr, unique_ptr
...@@ -130,7 +134,7 @@ public: ...@@ -130,7 +134,7 @@ public:
/** /**
* Return a description of the erroneous state. * Return a description of the erroneous state.
* *
* Returns an empty string if there is no description. * No description yields an empty string.
*/ */
inline auto GetDescription() const -> const std::string & { inline auto GetDescription() const -> const std::string & {
return this->description; return this->description;
......
...@@ -43,8 +43,6 @@ using boost::json::value; ...@@ -43,8 +43,6 @@ using boost::json::value;
/** /**
* @brief Read a text file into a string and return the file's content. * @brief Read a text file into a string and return the file's content.
*
* TODO use boost-filesystem's "load_string_file"!
*/ */
inline auto load_string_file(const path &path) -> std::string { inline auto load_string_file(const path &path) -> std::string {
std::string result; std::string result;
...@@ -52,11 +50,14 @@ inline auto load_string_file(const path &path) -> std::string { ...@@ -52,11 +50,14 @@ inline auto load_string_file(const path &path) -> std::string {
return result; return result;
} }
inline auto get_env_var(const char *key, const char *fall_back) -> const /**
* @brief Return the environment variable KEY, or FALLBACK if it does not exist.
*/
inline auto get_env_var(const char *key, const char *fallback) -> const
char * { char * {
const char *val = getenv(key); const char *val = getenv(key);
if (val == nullptr) { if (val == nullptr) {
return fall_back; return fallback;
} else { } else {
return val; return val;
} }
...@@ -64,11 +65,11 @@ inline auto get_env_var(const char *key, const char *fall_back) -> const ...@@ -64,11 +65,11 @@ inline auto get_env_var(const char *key, const char *fall_back) -> const
/** /**
* @brief Return the value of an environment variable or - if undefined - the * @brief Return the value of an environment variable or - if undefined - the
* fall_back value. * fallback value.
*/ */
inline auto get_env_var(const std::string &key, const std::string &fall_back) inline auto get_env_var(const std::string &key, const std::string &fallback)
-> const std::string { -> const std::string {
const char *val = get_env_var(key.c_str(), fall_back.c_str()); const char *val = get_env_var(key.c_str(), fallback.c_str());
auto const result = std::string(val); auto const result = std::string(val);
return result; return result;
......
...@@ -81,9 +81,9 @@ typedef struct { ...@@ -81,9 +81,9 @@ typedef struct {
/** /**
* Return the environment variable of the given name. * Return the environment variable of the given name.
* *
* If the environment variable is not set, return the fall_back instead. * If the environment variable is not set, return the fallback instead.
*/ */
const char *caosdb_utility_get_env_var(const char *name, const char *fall_back); const char *caosdb_utility_get_env_var(const char *name, const char *fallback);
/** /**
* Return a description of the status code. * Return a description of the status code.
......
...@@ -508,6 +508,7 @@ auto ConfigurationManager::InitializeDefaults() -> int { ...@@ -508,6 +508,7 @@ auto ConfigurationManager::InitializeDefaults() -> int {
mLoadSingleJSONConfiguration(*configuration_file_path); mLoadSingleJSONConfiguration(*configuration_file_path);
} }
// Logging in the configuration leads to additional content.
if (this->json_configuration.is_object() && if (this->json_configuration.is_object() &&
this->json_configuration.as_object().contains("logging")) { this->json_configuration.as_object().contains("logging")) {
LoggingConfiguration logging_configuration = LoggingConfiguration logging_configuration =
......
...@@ -59,6 +59,7 @@ auto LoggingConfiguration::GetSinks() const ...@@ -59,6 +59,7 @@ auto LoggingConfiguration::GetSinks() const
SinkConfiguration::SinkConfiguration(std::string name, int level) SinkConfiguration::SinkConfiguration(std::string name, int level)
: LevelConfiguration(level), name(std::move(name)) {} : LevelConfiguration(level), name(std::move(name)) {}
[[nodiscard]] auto SinkConfiguration::GetName() const -> const std::string & { [[nodiscard]] auto SinkConfiguration::GetName() const -> const std::string & {
return this->name; return this->name;
} }
...@@ -77,6 +78,7 @@ auto SinkConfiguration::Configure(boost::log::settings &settings) const ...@@ -77,6 +78,7 @@ auto SinkConfiguration::Configure(boost::log::settings &settings) const
ConsoleSinkConfiguration::ConsoleSinkConfiguration(const std::string &name, ConsoleSinkConfiguration::ConsoleSinkConfiguration(const std::string &name,
int level) int level)
: SinkConfiguration(name, level) {} : SinkConfiguration(name, level) {}
[[nodiscard]] auto ConsoleSinkConfiguration::GetDestination() const [[nodiscard]] auto ConsoleSinkConfiguration::GetDestination() const
-> const std::string & { -> const std::string & {
CAOSDB_LOG_TRACE(logger_name) CAOSDB_LOG_TRACE(logger_name)
...@@ -93,12 +95,14 @@ auto ConsoleSinkConfiguration::Configure(boost::log::settings &settings) const ...@@ -93,12 +95,14 @@ auto ConsoleSinkConfiguration::Configure(boost::log::settings &settings) const
FileSinkConfiguration::FileSinkConfiguration(const std::string &name, int level) FileSinkConfiguration::FileSinkConfiguration(const std::string &name, int level)
: SinkConfiguration(name, level) {} : SinkConfiguration(name, level) {}
[[nodiscard]] auto FileSinkConfiguration::GetDestination() const [[nodiscard]] auto FileSinkConfiguration::GetDestination() const
-> const std::string & { -> const std::string & {
CAOSDB_LOG_TRACE(logger_name) CAOSDB_LOG_TRACE(logger_name)
<< "Enter FileSinkConfiguration::GetDestination()"; << "Enter FileSinkConfiguration::GetDestination()";
return this->destination; return this->destination;
} }
auto FileSinkConfiguration::SetDirectory(const std::string &directory) -> void { auto FileSinkConfiguration::SetDirectory(const std::string &directory) -> void {
this->directory = std::string(directory); this->directory = std::string(directory);
} }
...@@ -114,11 +118,13 @@ auto FileSinkConfiguration::Configure(boost::log::settings &settings) const ...@@ -114,11 +118,13 @@ auto FileSinkConfiguration::Configure(boost::log::settings &settings) const
SyslogSinkConfiguration::SyslogSinkConfiguration(const std::string &name, SyslogSinkConfiguration::SyslogSinkConfiguration(const std::string &name,
int level) int level)
: SinkConfiguration(name, level) {} : SinkConfiguration(name, level) {}
[[nodiscard]] auto SyslogSinkConfiguration::GetDestination() const [[nodiscard]] auto SyslogSinkConfiguration::GetDestination() const
-> const std::string & { -> const std::string & {
return this->destination; return this->destination;
} }
// Called if no custom logging settings are specified.
auto initialize_logging_defaults() -> int { auto initialize_logging_defaults() -> int {
// first: turn everything off // first: turn everything off
boost::log::settings off_settings; boost::log::settings off_settings;
...@@ -148,6 +154,7 @@ auto initialize_logging_defaults() -> int { ...@@ -148,6 +154,7 @@ auto initialize_logging_defaults() -> int {
return 0; return 0;
} }
// Called if custom logging settings are specified.
auto initialize_logging(const LoggingConfiguration &configuration) -> void { auto initialize_logging(const LoggingConfiguration &configuration) -> void {
boost::log::settings new_settings; boost::log::settings new_settings;
......
...@@ -57,8 +57,8 @@ const char *caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE() { ...@@ -57,8 +57,8 @@ const char *caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE() {
} }
const char *caosdb_utility_get_env_var(const char *name, const char *caosdb_utility_get_env_var(const char *name,
const char *fall_back) { const char *fallback) {
return caosdb::utility::get_env_var(name, fall_back); return caosdb::utility::get_env_var(name, fallback);
} }
const char *caosdb_get_status_description(int code) { const char *caosdb_get_status_description(int code) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment