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:
return ConnectionManager::GetInstance().mGetConnection(name);
};
/**
* Get the connection marked by the "default" key in the configuration.
*/
inline static auto GetDefaultConnection()
-> const std::shared_ptr<Connection> & {
return ConnectionManager::GetInstance().mGetDefaultConnection();
......
......@@ -111,6 +111,12 @@ private:
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 {
public:
explicit inline Message(caosdb::entity::v1alpha1::Message *wrapped)
......
......@@ -19,8 +19,8 @@
*
*/
#ifndef CAOSDB_LOG_LEVELS_H
#define CAOSDB_LOG_LEVELS_H
#ifndef CAOSDB_LOG_LEVEL_H
#define CAOSDB_LOG_LEVEL_H
#define CAOSDB_LOG_LEVEL_OFF 1000000
#define CAOSDB_LOG_LEVEL_FATAL 700
......
......@@ -43,6 +43,9 @@ typedef boost::log::sources::severity_channel_logger<int, std::string>
BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(logger, boost_logger_class)
/**
* This class stores the integer log level.
*/
class LevelConfiguration {
public:
LevelConfiguration(int level) : level(level){};
......@@ -54,6 +57,11 @@ private:
class SinkConfiguration;
/**
* This class stores the logging level and log sinks.
*
* Sinks are represented by SinkConfiguration objects.
*/
class LoggingConfiguration : public LevelConfiguration {
public:
virtual ~LoggingConfiguration() = default;
......@@ -69,6 +77,22 @@ private:
auto initialize_logging_defaults() -> int;
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 {
public:
virtual ~SinkConfiguration() = default;
......@@ -104,6 +128,12 @@ private:
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 {
public:
virtual ~FileSinkConfiguration() = default;
......@@ -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);
/**
* Convenience function for the c-interface.
* Convenience function for the C interface.
*/
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);
/**
* Convenience function for the c-interface.
* Convenience function for the C interface.
*/
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);
/**
* Convenience function for the c-interface.
* Convenience function for the C interface.
*/
void caosdb_log_trace(const char *channel, const char *msg);
......
......@@ -30,6 +30,9 @@
* 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
* 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 {
......
......@@ -25,7 +25,11 @@
/**
* TransactionStatus indicates the current status of a transaction and, when it
* 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/exceptions.h"
#include <memory> // for shared_ptr, unique_ptr
......@@ -130,7 +134,7 @@ public:
/**
* 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 & {
return this->description;
......
......@@ -43,8 +43,6 @@ using boost::json::value;
/**
* @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 {
std::string result;
......@@ -52,11 +50,14 @@ inline auto load_string_file(const path &path) -> std::string {
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 * {
const char *val = getenv(key);
if (val == nullptr) {
return fall_back;
return fallback;
} else {
return val;
}
......@@ -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
* 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 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);
return result;
......
......@@ -81,9 +81,9 @@ typedef struct {
/**
* 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.
......
......@@ -508,6 +508,7 @@ auto ConfigurationManager::InitializeDefaults() -> int {
mLoadSingleJSONConfiguration(*configuration_file_path);
}
// Logging in the configuration leads to additional content.
if (this->json_configuration.is_object() &&
this->json_configuration.as_object().contains("logging")) {
LoggingConfiguration logging_configuration =
......
......@@ -59,6 +59,7 @@ auto LoggingConfiguration::GetSinks() const
SinkConfiguration::SinkConfiguration(std::string name, int level)
: LevelConfiguration(level), name(std::move(name)) {}
[[nodiscard]] auto SinkConfiguration::GetName() const -> const std::string & {
return this->name;
}
......@@ -77,6 +78,7 @@ auto SinkConfiguration::Configure(boost::log::settings &settings) const
ConsoleSinkConfiguration::ConsoleSinkConfiguration(const std::string &name,
int level)
: SinkConfiguration(name, level) {}
[[nodiscard]] auto ConsoleSinkConfiguration::GetDestination() const
-> const std::string & {
CAOSDB_LOG_TRACE(logger_name)
......@@ -93,12 +95,14 @@ auto ConsoleSinkConfiguration::Configure(boost::log::settings &settings) const
FileSinkConfiguration::FileSinkConfiguration(const std::string &name, int level)
: SinkConfiguration(name, level) {}
[[nodiscard]] auto FileSinkConfiguration::GetDestination() const
-> const std::string & {
CAOSDB_LOG_TRACE(logger_name)
<< "Enter FileSinkConfiguration::GetDestination()";
return this->destination;
}
auto FileSinkConfiguration::SetDirectory(const std::string &directory) -> void {
this->directory = std::string(directory);
}
......@@ -114,11 +118,13 @@ auto FileSinkConfiguration::Configure(boost::log::settings &settings) const
SyslogSinkConfiguration::SyslogSinkConfiguration(const std::string &name,
int level)
: SinkConfiguration(name, level) {}
[[nodiscard]] auto SyslogSinkConfiguration::GetDestination() const
-> const std::string & {
return this->destination;
}
// Called if no custom logging settings are specified.
auto initialize_logging_defaults() -> int {
// first: turn everything off
boost::log::settings off_settings;
......@@ -148,6 +154,7 @@ auto initialize_logging_defaults() -> int {
return 0;
}
// Called if custom logging settings are specified.
auto initialize_logging(const LoggingConfiguration &configuration) -> void {
boost::log::settings new_settings;
......
......@@ -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 *fall_back) {
return caosdb::utility::get_env_var(name, fall_back);
const char *fallback) {
return caosdb::utility::get_env_var(name, fallback);
}
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