diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index 7a8c01251891d47d3aa1b57028719e817843b0bc..55949748d9d513367c2fbb98b5354bd95d97713e 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -1,7 +1,7 @@ # GENERAL * >=conan-1.37.2 (e.g. with `pip install conan`) -* >=cmake-3.14 +* >=cmake-3.13 * >=gcc-10.2.0 | >=clang-11 # OPTIONAL diff --git a/include/caosdb/connection.h b/include/caosdb/connection.h index 22bdc6f9f5b524ae895469d25d540f9679e65353..5d7930a0d63e484f01be52dab7749d02b3916c33 100644 --- a/include/caosdb/connection.h +++ b/include/caosdb/connection.h @@ -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(); diff --git a/include/caosdb/entity.h b/include/caosdb/entity.h index ace778c11fd03c4533574a7930cc55ebe665a623..c84f044a68a94bed72970b8f387a3e61513e7216 100644 --- a/include/caosdb/entity.h +++ b/include/caosdb/entity.h @@ -38,6 +38,12 @@ using caosdb::entity::v1alpha1::IdResponse; using ProtoParent = caosdb::entity::v1alpha1::Parent; using ProtoEntity = caosdb::entity::v1alpha1::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: [[nodiscard]] inline auto GetCode() const -> MessageCode { @@ -58,187 +64,187 @@ private: }; /** - * Container for Messages. - */ +* Container for Messages. +*/ class Messages { public: - [[nodiscard]] inline auto Size() const -> int { return wrapped->size(); } - [[nodiscard]] inline auto At(int index) const -> const Message { - return Message(&(wrapped->at(index))); - } +[[nodiscard]] inline auto Size() const -> int { return wrapped->size(); } +[[nodiscard]] inline auto At(int index) const -> const Message { + return Message(&(wrapped->at(index))); +} - friend class Entity; +friend class Entity; private: - inline Messages() : wrapped(nullptr){}; +inline Messages() : wrapped(nullptr){}; - ::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Message> - *wrapped; +::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Message> + *wrapped; }; /** - * Parent of an Entity. - * - * This implementation uses protobuf messages as storage backends. In other - * words, this class wraps a protobuf message and provides getter and setter - * methods. - */ +* Parent of an Entity. +* +* This implementation uses protobuf messages as storage backends. In other +* words, this class wraps a protobuf message and provides getter and setter +* methods. +*/ class Parent { public: - explicit inline Parent(caosdb::entity::v1alpha1::Parent *wrapped) - : wrapped(wrapped){}; - Parent(); - - /** - * Return the id of the parent entity. - */ - [[nodiscard]] auto GetId() const -> const std::string &; - /** - * Return the name of the parent entity. - */ - [[nodiscard]] auto GetName() const -> const std::string &; - /** - * Return the description of the parent entity. - */ - [[nodiscard]] auto GetDescription() const -> const std::string &; - - /** - * Set the id of the parent. - */ - auto SetId(const std::string &id) -> void; - /** - * Set the name of the parent. - */ - auto SetName(const std::string &name) -> void; +explicit inline Parent(caosdb::entity::v1alpha1::Parent *wrapped) + : wrapped(wrapped){}; +Parent(); - /** - * Return a json string representing this parent. - * - * This is intended for debugging. - */ - inline auto ToString() const -> const std::string { - google::protobuf::util::JsonOptions options; - std::string out; - google::protobuf::util::MessageToJsonString(*(this->wrapped), &out, - options); - return out; - } +/** + * Return the id of the parent entity. + */ +[[nodiscard]] auto GetId() const -> const std::string &; +/** + * Return the name of the parent entity. + */ +[[nodiscard]] auto GetName() const -> const std::string &; +/** + * Return the description of the parent entity. + */ +[[nodiscard]] auto GetDescription() const -> const std::string &; - // TODO(fspreck) These need implementations. See Entity::GetErrors for - // inspiration. - /** - * Return the error messages of this parent. - */ - [[nodiscard]] inline auto GetErrors() const -> const Messages &; - /** - * Return the warning messages of this parent. - */ - [[nodiscard]] inline auto GetWarnings() const -> const Messages &; - /** - * Return the info messages of this parent. - */ - [[nodiscard]] inline auto GetInfos() const -> const Messages &; +/** + * Set the id of the parent. + */ +auto SetId(const std::string &id) -> void; +/** + * Set the name of the parent. + */ +auto SetName(const std::string &name) -> void; - friend class Entity; - friend class Parents; +/** + * Return a json string representing this parent. + * + * This is intended for debugging. + */ +inline auto ToString() const -> const std::string { + google::protobuf::util::JsonOptions options; + std::string out; + google::protobuf::util::MessageToJsonString(*(this->wrapped), &out, + options); + return out; +} + +// TODO(fspreck) These need implementations. See Entity::GetErrors for +// inspiration. +/** + * Return the error messages of this parent. + */ +[[nodiscard]] inline auto GetErrors() const -> const Messages &; +/** + * Return the warning messages of this parent. + */ +[[nodiscard]] inline auto GetWarnings() const -> const Messages &; +/** + * Return the info messages of this parent. + */ +[[nodiscard]] inline auto GetInfos() const -> const Messages &; -private: - /** - * Return an empty protobuf message pointer. - * - * This function is called by the default constructor of the - * caosdb::entity::Parent class and the protobuf message is used as the - * storage-backend for the new Parent instance. - * - * An 'Arena' takes care of the the memory management. Don't try to delete - * this. - */ - static auto CreateProtoParent() -> ProtoParent *; - - /** - * Message which serves as storage backend. - */ - mutable caosdb::entity::v1alpha1::Parent *wrapped; -}; +friend class Entity; +friend class Parents; +private: /** - * Container for parents of entities. + * Return an empty protobuf message pointer. * - * Should only be instantiated and write-accessed by the owning entity. + * This function is called by the default constructor of the + * caosdb::entity::Parent class and the protobuf message is used as the + * storage-backend for the new Parent instance. + * + * An 'Arena' takes care of the the memory management. Don't try to delete + * this. + */ +static auto CreateProtoParent() -> ProtoParent *; + +/** + * Message which serves as storage backend. */ +mutable caosdb::entity::v1alpha1::Parent *wrapped; +}; + +/** +* Container for parents of entities. +* +* Should only be instantiated and write-accessed by the owning entity. +*/ class Parents { public: - /** - * Return the current size of the parent container. - * - * That is also the number of parents the owning entity currently has. - */ - [[nodiscard]] inline auto Size() const -> int { return wrapped->size(); } - /** - * Return the parent at the given index. - */ - [[nodiscard]] inline auto At(int index) const -> const Parent { - return Parent(&(wrapped->at(index))); - } +/** + * Return the current size of the parent container. + * + * That is also the number of parents the owning entity currently has. + */ +[[nodiscard]] inline auto Size() const -> int { return wrapped->size(); } +/** + * Return the parent at the given index. + */ +[[nodiscard]] inline auto At(int index) const -> const Parent { + return Parent(&(wrapped->at(index))); +} - friend class Entity; +friend class Entity; private: - inline Parents(){}; - explicit inline Parents( - ::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Parent> - *wrapped) - : wrapped(wrapped){}; - - /** - * Append a parent. - * - * This increases the Size() by one. - */ - auto Append(const Parent &parent) -> void; - /** - * The collection of parent messages which serves as a backend for this - * class. - */ +inline Parents(){}; +explicit inline Parents( ::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Parent> - *wrapped; -}; + *wrapped) + : wrapped(wrapped){}; /** - * Property of an Entity. + * Append a parent. * - * This is a property which belongs to another entity. Don't confuse it with - * an Entity with the "Property" role. + * This increases the Size() by one. */ +auto Append(const Parent &parent) -> void; +/** + * The collection of parent messages which serves as a backend for this + * class. + */ +::google::protobuf::RepeatedPtrField<caosdb::entity::v1alpha1::Parent> + *wrapped; +}; + +/** +* Property of an Entity. +* +* This is a property which belongs to another entity. Don't confuse it with +* an Entity with the "Property" role. +*/ class Property { public: - explicit inline Property(caosdb::entity::v1alpha1::Property *wrapped) - : wrapped(wrapped){}; - - // TODO(fspreck) All of these methods need implementations. - [[nodiscard]] auto GetId() const -> const std::string &; - [[nodiscard]] auto GetName() const -> const std::string &; - [[nodiscard]] auto GetDescription() const -> const std::string &; - [[nodiscard]] auto GetImportance() const -> const std::string &; - [[nodiscard]] auto GetValue() const -> const std::string &; - [[nodiscard]] auto GetUnit() const -> const std::string &; - [[nodiscard]] auto GetDatatype() const -> const std::string &; - [[nodiscard]] auto GetErrors() const -> const Messages &; - [[nodiscard]] auto GetWarnings() const -> const Messages &; - [[nodiscard]] auto GetInfos() const -> const Messages &; - - auto SetId(const std::string &id) -> void; - auto SetName(const std::string &name) -> void; - auto SetImportance(const std::string &importance) -> void; - auto SetValue(const std::string &value) -> void; - auto SetUnit(const std::string &unit) -> void; - auto SetDatatype(const std::string &datatype) -> void; - - friend class Entity; - friend class Properties; +explicit inline Property(caosdb::entity::v1alpha1::Property *wrapped) + : wrapped(wrapped){}; + +// TODO(fspreck) All of these methods need implementations. +[[nodiscard]] auto GetId() const -> const std::string &; +[[nodiscard]] auto GetName() const -> const std::string &; +[[nodiscard]] auto GetDescription() const -> const std::string &; +[[nodiscard]] auto GetImportance() const -> const std::string &; +[[nodiscard]] auto GetValue() const -> const std::string &; +[[nodiscard]] auto GetUnit() const -> const std::string &; +[[nodiscard]] auto GetDatatype() const -> const std::string &; +[[nodiscard]] auto GetErrors() const -> const Messages &; +[[nodiscard]] auto GetWarnings() const -> const Messages &; +[[nodiscard]] auto GetInfos() const -> const Messages &; + +auto SetId(const std::string &id) -> void; +auto SetName(const std::string &name) -> void; +auto SetImportance(const std::string &importance) -> void; +auto SetValue(const std::string &value) -> void; +auto SetUnit(const std::string &unit) -> void; +auto SetDatatype(const std::string &datatype) -> void; + +friend class Entity; +friend class Properties; private: - caosdb::entity::v1alpha1::Property *wrapped; +caosdb::entity::v1alpha1::Property *wrapped; }; /** @@ -248,12 +254,12 @@ private: */ class Properties { public: - // TODO(fspreck) Implementations needed (basically everything). See Parents - // container for inspiration. - [[nodiscard]] auto At(int index) const -> const Property &; - auto Append(const Property &property) -> void; +// TODO(fspreck) Implementations needed (basically everything). See Parents +// container for inspiration. +[[nodiscard]] auto At(int index) const -> const Property &; +auto Append(const Property &property) -> void; - friend class Entity; +friend class Entity; private: inline Properties(){}; diff --git a/include/caosdb/exceptions.h b/include/caosdb/exceptions.h index 6dc44cbef4d05345eaab4b00d439967f7c88d89a..4fd519233185f59639e9e323c0549ecb4b36eefb 100644 --- a/include/caosdb/exceptions.h +++ b/include/caosdb/exceptions.h @@ -32,9 +32,9 @@ using std::runtime_error; /** * @brief Generic exception class of the caosdb client library. */ -class GenericException : public runtime_error { +class Exception : public runtime_error { public: - explicit GenericException(StatusCode code, const std::string &what_arg) + explicit Exception(StatusCode code, const std::string &what_arg) : runtime_error(what_arg), code(code) {} [[nodiscard]] inline auto GetCode() const -> StatusCode { return this->code; } @@ -45,32 +45,28 @@ private: /** * @brief Exception for authentication errors. */ -class AuthenticationError : public GenericException { +class AuthenticationError : public Exception { public: explicit AuthenticationError(const std::string &what_arg) - : GenericException(StatusCode::AUTHENTICATION_ERROR, what_arg) {} + : Exception(StatusCode::AUTHENTICATION_ERROR, what_arg) {} }; /** * @brief The connection to the CaosDB server is down. */ -class ConnectionError : public GenericException { +class ConnectionError : public Exception { public: explicit ConnectionError(const std::string &what_arg) - : GenericException(StatusCode::CONNECTION_ERROR, what_arg) {} + : Exception(StatusCode::CONNECTION_ERROR, what_arg) {} }; /** * @brief The transaction terminated unsuccessfully. */ -class TransactionError : public GenericException { -protected: - TransactionError(StatusCode code, const std::string &what_arg) - : GenericException(code, what_arg) {} - +class TransactionError : public Exception { public: explicit TransactionError(const std::string &what_arg) - : GenericException(StatusCode::GENERIC_TRANSACTION_ERROR, what_arg) {} + : Exception(StatusCode::GENERIC_TRANSACTION_ERROR, what_arg) {} }; class TransactionStatusError : public TransactionError { @@ -83,19 +79,19 @@ public: * @brief Exception for errors of the ConfigurationManager or other components * of the configuration. */ -class ConfigurationError : public GenericException { +class ConfigurationError : public Exception { public: explicit ConfigurationError(const std::string &what_arg) - : GenericException(StatusCode::CONFIGURATION_ERROR, what_arg) {} + : Exception(StatusCode::CONFIGURATION_ERROR, what_arg) {} }; /** * @brief The connection isn't known to the ConnectionManager under this name. */ -class UnknownConnectionError : public GenericException { +class UnknownConnectionError : public Exception { public: explicit UnknownConnectionError(const std::string &what_arg) - : GenericException(StatusCode::UNKNOWN_CONNECTION_ERROR, what_arg) {} + : Exception(StatusCode::UNKNOWN_CONNECTION_ERROR, what_arg) {} }; } // namespace caosdb::exceptions diff --git a/include/caosdb/log_level.h b/include/caosdb/log_level.h index af05d3ba11b3d0e6252c889f7c9be1ddd61015f8..c2fcb9b1181dcb86f91dfaf9a4ddecba3ea417cb 100644 --- a/include/caosdb/log_level.h +++ b/include/caosdb/log_level.h @@ -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 diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h index 8d3acdd3846726e7c5f31a4698b08bdb24ab978a..2f04ec6087cfec19e1a5fbe87483544bd4e144a6 100644 --- a/include/caosdb/logging.h +++ b/include/caosdb/logging.h @@ -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,23 @@ 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 +129,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 +167,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); diff --git a/include/caosdb/message_code.h b/include/caosdb/message_code.h index 17ec1c1a9fdfb58a512eaa5e7940686ea9ccbaa3..2cc3f516f4e3356d9dfccc9e0435bfdfe2063306 100644 --- a/include/caosdb/message_code.h +++ b/include/caosdb/message_code.h @@ -30,6 +30,10 @@ * 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 { diff --git a/include/caosdb/transaction_status.h b/include/caosdb/transaction_status.h index 8645aceb3749efbbcf8c6cfec5aa96394b029ed7..8e54c8ba79c944f6b157a577cc9db64be01e1473 100644 --- a/include/caosdb/transaction_status.h +++ b/include/caosdb/transaction_status.h @@ -25,7 +25,12 @@ /** * 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 @@ -35,7 +40,7 @@ namespace caosdb::transaction { using caosdb::StatusCode; using caosdb::exceptions::AuthenticationError; using caosdb::exceptions::ConnectionError; -using caosdb::exceptions::GenericException; +using caosdb::exceptions::Exception; using caosdb::exceptions::TransactionError; /** @@ -43,6 +48,8 @@ using caosdb::exceptions::TransactionError; */ class TransactionStatus { public: + // REFACTORING NEEDED: When you touch this code again consider writing a + // macro, because this is a lot of redundant code here... inline static auto INITIAL() -> const TransactionStatus & { static const TransactionStatus initial( StatusCode::INITIAL, caosdb::get_status_description(StatusCode::INITIAL)); @@ -61,6 +68,9 @@ public: } inline static auto RPC_ERROR(const std::string &details) -> const TransactionStatus { + // We use the GENERIC_RPC_ERROR here because we might want to add further + // RPC_ERROR states with different error codes (which stem from GRPC) here + // in the future. return TransactionStatus( StatusCode::GENERIC_RPC_ERROR, caosdb::get_status_description(StatusCode::GENERIC_RPC_ERROR) + @@ -113,7 +123,7 @@ public: case StatusCode::GENERIC_TRANSACTION_ERROR: throw TransactionError(this->description); default: - throw GenericException(StatusCode::GENERIC_ERROR, this->description); + throw Exception(StatusCode::GENERIC_ERROR, this->description); } } @@ -130,7 +140,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; diff --git a/include/caosdb/utility.h b/include/caosdb/utility.h index e1e306e40a82ced49ccefea45a42a9e63a2b04b9..30e21747ec4ce39493e24e10e09d7c53c7ab1308 100644 --- a/include/caosdb/utility.h +++ b/include/caosdb/utility.h @@ -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,13 @@ 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 - char * { +/** + * @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 +64,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; diff --git a/include/ccaosdb.h b/include/ccaosdb.h index 0df5f0e085d5e012c221491ed8c78c26b4d1c807..bb62a5105db9559444f5b5d178ced583c41c9fcb 100644 --- a/include/ccaosdb.h +++ b/include/ccaosdb.h @@ -79,9 +79,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. diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp index 58a2759a997c3301b6243654386932224408b7cf..ba15dce8377627504d939965b6d38dbc4e0ca06f 100644 --- a/src/caosdb/configuration.cpp +++ b/src/caosdb/configuration.cpp @@ -358,7 +358,7 @@ auto ConfigurationManager::mReset() noexcept -> int { mClear(); InitializeDefaults(); return StatusCode::SUCCESS; - } catch (const caosdb::exceptions::GenericException &exc) { + } catch (const caosdb::exceptions::Exception &exc) { return exc.GetCode(); } catch (const std::exception &exc) { CAOSDB_LOG_ERROR(logger_name) @@ -373,7 +373,7 @@ auto ConfigurationManager::mClear() noexcept -> int { json_configuration = value(nullptr); ConnectionManager::Reset(); return StatusCode::SUCCESS; - } catch (const caosdb::exceptions::GenericException &exc) { + } catch (const caosdb::exceptions::Exception &exc) { return exc.GetCode(); } catch (const std::exception &exc) { CAOSDB_LOG_ERROR(logger_name) @@ -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 = diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp index 486ab846c4ce43225b9242aceb557775b9632531..3618826a5ed6061f210c393b3429b641293fccae 100644 --- a/src/caosdb/logging.cpp +++ b/src/caosdb/logging.cpp @@ -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; diff --git a/src/ccaosdb.cpp b/src/ccaosdb.cpp index d21b3bd0aafd9c95488658574ef6c03a044996c1..5f89af16ed3da4de89df1d83e1de0bdecb79592f 100644 --- a/src/ccaosdb.cpp +++ b/src/ccaosdb.cpp @@ -56,9 +56,8 @@ const char *caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE() { return caosdb::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 *caosdb_utility_get_env_var(const char *name, const char *fallback) { + return caosdb::utility::get_env_var(name, fallback); } const char *caosdb_get_status_description(int code) {