diff --git a/CMakeLists.txt b/CMakeLists.txt index 402aaf8df925f5a592794bdd535694eecfb1e034..c57a7c1bea9368c1d4b2b060c32bb8aab9c643a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -323,7 +323,7 @@ if(_LINTING) else() message(STATUS "clang-tidy: ${clang_tidy}") set(_CMAKE_CXX_CLANG_TIDY_CHECKS - "--checks=*,-fuchsia-*,-llvmlibc-*,-readability-convert-member-functions-to-static,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay,-llvm-else-after-return,-readability-else-after-return,-modernize-use-trailing-return-type,-bugprone-branch-clone") + "--checks=*,-fuchsia-*,-llvmlibc-*,-readability-convert-member-functions-to-static,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-hicpp-no-array-decay,-llvm-else-after-return,-readability-else-after-return,-modernize-use-trailing-return-type,-bugprone-branch-clone,-altera-*") set(_CMAKE_C_CLANG_TIDY_CHECKS "${_CMAKE_CXX_CLANG_TIDY_CHECKS}") set(_CMAKE_CXX_CLANG_TIDY "${clang_tidy}" "--header-filter=caosdb/.*[^\(\.pb\.h\)]$" diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 18d9334acdac17d3b583efabb4e2eeb116cbb5a9..784e2e04ae3baa8aacffbacbba2ecc55c1c0af6a 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -28,6 +28,7 @@ set(libcaosdb_INCL ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/data_type.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/entity.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/exceptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_descriptor.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/handler_interface.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/info.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/log_level.h @@ -42,8 +43,6 @@ set(libcaosdb_INCL ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/utility.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/value.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_upload_handler.h - # TODO this file is still missing - # ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/register_file_download_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/upload_request_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/download_request_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_writer.h diff --git a/include/caosdb/certificate_provider.h b/include/caosdb/certificate_provider.h index 1fd4a80b630e53b8b704b29f7803837a3cff6ced..a2cb5b5a1e407d93f3aa0ac774c26aac5ff31f83 100644 --- a/include/caosdb/certificate_provider.h +++ b/include/caosdb/certificate_provider.h @@ -46,7 +46,7 @@ private: std::string certificate_provider; public: - explicit PemCertificateProvider(const std::string &certificate_provider); + explicit PemCertificateProvider(std::string certificate_provider); [[nodiscard]] auto GetCertificatePem() const -> std::string override; }; } // namespace caosdb::configuration diff --git a/include/caosdb/configuration.h b/include/caosdb/configuration.h index 649495f9a3722c9009edcb6b383f5c02941ade28..092522d1bb3a30980036e7c6acb71ddb8b78be5c 100644 --- a/include/caosdb/configuration.h +++ b/include/caosdb/configuration.h @@ -63,7 +63,7 @@ private: int port; public: - ConnectionConfiguration(const std::string &host, int port); + ConnectionConfiguration(std::string host, int port); virtual ~ConnectionConfiguration() = default; friend auto operator<<(std::ostream &out, const ConnectionConfiguration &configuration) -> std::ostream &; diff --git a/include/caosdb/entity.h b/include/caosdb/entity.h index 2ff36d7242c5bcb8739bbca839e749825e4f6825..76f17b9dac5d09dc7c6025f93474cf2d06e196df 100644 --- a/include/caosdb/entity.h +++ b/include/caosdb/entity.h @@ -29,29 +29,24 @@ #ifndef CAOSDB_ENTITY_H #define CAOSDB_ENTITY_H -#include "caosdb/data_type.h" // for DataType -#include "caosdb/entity/v1/main.pb.h" // for RepeatedPtrField -#include "caosdb/logging.h" // for CAOSDB_LOG_WARN -#include "caosdb/message_code.h" // for get_message_code -#include "caosdb/protobuf_helper.h" // for get_arena -#include "caosdb/status_code.h" // for StatusCode -#include "caosdb/value.h" // for Value -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... -#include <cstdint> // for int64_t -#include <filesystem> // for path -#include <google/protobuf/arena.h> // for Arena -#include <google/protobuf/message.h> // for RepeatedPtrField -#include <iosfwd> // for streamsize -#include <iterator> // for iterator, output_iterato... -#include <map> // for map -#include <stdexcept> // for out_of_range -#include <string> // for string, basic... -#include <utility> // for move -#include <vector> // for vector +#include "caosdb/data_type.h" // for DataType +#include "caosdb/entity/v1/main.pb.h" // for RepeatedPtrField +#include "caosdb/file_descriptor.h" // for FileDescriptor +#include "caosdb/logging.h" // for CAOSDB_LOG_WARN +#include "caosdb/message_code.h" // for get_message_code +#include "caosdb/protobuf_helper.h" // for get_arena +#include "caosdb/status_code.h" // for StatusCode +#include "caosdb/value.h" // for Value +#include <cstdint> // for int64_t +#include <filesystem> // for path +#include <google/protobuf/arena.h> // for Arena +#include <google/protobuf/message.h> // for RepeatedPtrField +#include <iterator> // for iterator, output_iterato... +#include <map> // for map +#include <stdexcept> // for out_of_range +#include <string> // for string, basic... +#include <utility> // for move +#include <vector> // for vector namespace caosdb::entity { using caosdb::entity::v1::IdResponse; @@ -60,7 +55,6 @@ using std::filesystem::is_directory; using ProtoParent = caosdb::entity::v1::Parent; using ProtoProperty = caosdb::entity::v1::Property; using ProtoEntity = caosdb::entity::v1::Entity; -using ProtoFileDescriptor = caosdb::entity::v1::FileDescriptor; using ProtoMessage = caosdb::entity::v1::Message; using ProtoValue = caosdb::entity::v1::Value; using ProtoDataType = caosdb::entity::v1::DataType; @@ -109,12 +103,6 @@ const std::map<Role, std::string> role_names = {{Role::UNSPECIFIED, "UNSPECIFIED {Role::PROPERTY, "PROPERTY"}, {Role::FILE, "FILE"}}; -struct FileDescriptor { - FileTransmissionId *file_transmission_id; - ProtoFileDescriptor *wrapped; - std::filesystem::path local_path; -}; - /** * Abstract base class for Messages, Properties and Parents container classes. * diff --git a/include/caosdb/file_descriptor.h b/include/caosdb/file_descriptor.h new file mode 100644 index 0000000000000000000000000000000000000000..2d69db019b5762c8c34ed6033a688004ffc763bc --- /dev/null +++ b/include/caosdb/file_descriptor.h @@ -0,0 +1,46 @@ +/* + * This file is a part of the CaosDB Project. + * + * Copyright (C) 2022 Timm Fitschen <t.fitschen@indiscale.com> + * Copyright (C) 2022 IndiScale GmbH <info@indiscale.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + */ + +/** + * @brief File descriptors are used to represent directories, links and files + * of the caosdb file system and their meta data. + * @file caosdb/entity.h + * @author Timm Fitchen + * @date 2022-01-21 + */ +#ifndef CAOSDB_FILE_DESCRIPTOR_H +#define CAOSDB_FILE_DESCRIPTOR_H + +#include "caosdb/entity/v1/main.pb.h" // for RepeatedPtrField +#include <filesystem> // for path + +namespace caosdb::entity { +using ProtoFileDescriptor = caosdb::entity::v1::FileDescriptor; +using caosdb::entity::v1::FileTransmissionId; + +struct FileDescriptor { + FileTransmissionId *file_transmission_id; + ProtoFileDescriptor *wrapped; + std::filesystem::path local_path; +}; + +} // namespace caosdb::entity +#endif diff --git a/include/caosdb/file_transmission/download_request_handler.h b/include/caosdb/file_transmission/download_request_handler.h index 0a8e13aac4237b2a9c5e1262dd8fdd0b742a0f29..cd8542bef873169c363a43e8c727a7323f3c64bc 100644 --- a/include/caosdb/file_transmission/download_request_handler.h +++ b/include/caosdb/file_transmission/download_request_handler.h @@ -49,11 +49,12 @@ #ifndef CAOSDB_FILE_TRANSMISSION_DOWNLOAD_REQUEST_HANDLER_H #define CAOSDB_FILE_TRANSMISSION_DOWNLOAD_REQUEST_HANDLER_H -#include "caosdb/entity.h" // for FileDescriptor +#include "caosdb/file_descriptor.h" // for FileDescriptor #include "caosdb/entity/v1/main.grpc.pb.h" // for FileTransmissionS... #include "caosdb/entity/v1/main.pb.h" // for FileDownloadResponse #include "caosdb/file_transmission/file_writer.h" // for FileWriter #include "caosdb/handler_interface.h" // for HandlerTag, Handl... +#include <cstdint> // for uint64_t #include <grpcpp/impl/codegen/async_stream.h> // for ClientAsyncReader #include <grpcpp/impl/codegen/client_context.h> // for ClientContext #include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue @@ -115,7 +116,7 @@ protected: FileDescriptor file_descriptor_; - unsigned long long bytesReceived_; + uint64_t bytesReceived_; }; } // namespace caosdb::transaction diff --git a/include/caosdb/file_transmission/file_reader.h b/include/caosdb/file_transmission/file_reader.h index 14f8614896de79b15e9bb793a04ac17f40f27fec..380b6a838b77e9f80f91f93c84eb0b0f888de2e0 100644 --- a/include/caosdb/file_transmission/file_reader.h +++ b/include/caosdb/file_transmission/file_reader.h @@ -50,8 +50,9 @@ #define CAOSDB_FILE_TRANSMISSION_FILE_READER_H #include <cstddef> // for size_t -#include <filesystem> // for ifstream -#include <fstream> // for ifstream, size_t +#include <cstdint> // for uint64_t +#include <filesystem> // for path, exists +#include <fstream> // for ifstream #include <string> // for string namespace caosdb::transaction { @@ -71,7 +72,7 @@ public: FileReader(FileReader &&) = default; FileReader &operator=(FileReader &&) = default; - unsigned long long fileSize() const { return size_; } + uint64_t fileSize() const { return size_; } std::size_t read(std::string &buffer); @@ -80,7 +81,7 @@ private: std::ifstream stream_; std::filesystem::path filename_; - unsigned long long size_; + uint64_t size_; }; } // namespace caosdb::transaction diff --git a/include/caosdb/file_transmission/upload_request_handler.h b/include/caosdb/file_transmission/upload_request_handler.h index cb9748f868290d362bb21bb66eaacb0267c14eed..193489e21c2c69d4c4df564cc6ad2c71d200cc8f 100644 --- a/include/caosdb/file_transmission/upload_request_handler.h +++ b/include/caosdb/file_transmission/upload_request_handler.h @@ -49,9 +49,9 @@ #ifndef CAOSDB_FILE_TRANSMISSION_UPLOAD_REQUEST_HANDLER_H #define CAOSDB_FILE_TRANSMISSION_UPLOAD_REQUEST_HANDLER_H -#include "caosdb/entity.h" // for FileDescriptor #include "caosdb/entity/v1/main.grpc.pb.h" // for FileTransmissionS... #include "caosdb/entity/v1/main.pb.h" // for FileUploadRequest +#include "caosdb/file_descriptor.h" // for FileDescriptor #include "caosdb/file_transmission/file_reader.h" // for FileReader #include "caosdb/handler_interface.h" // for HandlerTag, Handl... #include <cstdint> // for uint64_t diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h index eb99f9a51b3630ce48849acf935b316044aa82b2..263151fd21674d1d801439c7c4b4d13a0837043a 100644 --- a/include/caosdb/logging.h +++ b/include/caosdb/logging.h @@ -23,32 +23,34 @@ #ifndef CAOSDB_LOGGING_H #define CAOSDB_LOGGING_H -#include "caosdb/log_level.h" // for CAOSDB_LOG_... -#include <boost/log/sources/record_ostream.hpp> // IWYU pragma: keep -#include <boost/log/sources/severity_channel_logger.hpp> // for BOOST_LOG_C... -#include <boost/log/utility/setup/settings.hpp> // for settings -#include <boost/smart_ptr/intrusive_ptr.hpp> // for intrusive_ptr -#include <boost/smart_ptr/intrusive_ref_counter.hpp> // for intrusive_p... -#include <memory> // for shared_ptr -#include <string> // for string -#include <vector> // for vector +#include "caosdb/log_level.h" // for CAOSDB_LOG_... +#include <cstdint> // for uint64_t +#include <memory> // for shared_ptr +#include <ostream> // for ostream +#include <string> // for string +#include <vector> // for vector namespace caosdb::logging { const std::string logger_name = "caosdb::logging"; -typedef boost::log::sources::severity_channel_logger_mt<int, std::string> boost_logger_class; - -class logger { +class LoggerOutputStream { public: - static auto get() -> boost_logger_class & { return logger::GetInstance()._logger_instance; } + LoggerOutputStream(std::string channel, int level); + auto operator<<(int msg) -> LoggerOutputStream &; + auto operator<<(uint64_t msg) -> LoggerOutputStream &; + auto operator<<(int64_t msg) -> LoggerOutputStream &; + auto operator<<(std::streambuf *msg) -> LoggerOutputStream &; + auto operator<<(const char *msg) -> LoggerOutputStream &; + auto operator<<(const std::string &msg) -> LoggerOutputStream &; + auto operator<<(void *msg) -> LoggerOutputStream &; + static auto get(const std::string &channel, int level) -> LoggerOutputStream { + return LoggerOutputStream(channel, level); + } private: - static logger &GetInstance() { - static logger instance; - return instance; - } - boost_logger_class _logger_instance; + std::string channel; + int level; }; /** @@ -112,7 +114,7 @@ public: friend auto initialize_logging(const LoggingConfiguration &logging_configuration) -> void; protected: - virtual auto Configure(boost::log::settings &settings) const -> void; + virtual auto Configure(void *settings) const -> void; private: std::string name; @@ -128,7 +130,7 @@ public: protected: typedef SinkConfiguration sink_configuration; - virtual auto Configure(boost::log::settings &settings) const -> void override; + virtual auto Configure(void *settings) const -> void override; private: const std::string destination = "Console"; @@ -151,7 +153,7 @@ public: protected: typedef SinkConfiguration sink_configuration; - virtual auto Configure(boost::log::settings &settings) const -> void override; + virtual auto Configure(void *settings) const -> void override; private: const std::string destination = "TextFile"; @@ -196,17 +198,17 @@ void caosdb_log_trace(const char *channel, const char *msg); } // namespace caosdb::logging #define CAOSDB_LOG_FATAL(Channel) \ - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), Channel, CAOSDB_LOG_LEVEL_FATAL) + caosdb::logging::LoggerOutputStream::get(Channel, CAOSDB_LOG_LEVEL_FATAL) #define CAOSDB_LOG_ERROR(Channel) \ - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), Channel, CAOSDB_LOG_LEVEL_ERROR) + caosdb::logging::LoggerOutputStream::get(Channel, CAOSDB_LOG_LEVEL_ERROR) #define CAOSDB_LOG_WARN(Channel) \ - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), Channel, CAOSDB_LOG_LEVEL_WARN) + caosdb::logging::LoggerOutputStream::get(Channel, CAOSDB_LOG_LEVEL_WARN) #define CAOSDB_LOG_INFO(Channel) \ - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), Channel, CAOSDB_LOG_LEVEL_INFO) + caosdb::logging::LoggerOutputStream::get(Channel, CAOSDB_LOG_LEVEL_INFO) #define CAOSDB_LOG_DEBUG(Channel) \ - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), Channel, CAOSDB_LOG_LEVEL_DEBUG) + caosdb::logging::LoggerOutputStream::get(Channel, CAOSDB_LOG_LEVEL_DEBUG) #define CAOSDB_LOG_TRACE(Channel) \ - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), Channel, CAOSDB_LOG_LEVEL_TRACE) + caosdb::logging::LoggerOutputStream::get(Channel, CAOSDB_LOG_LEVEL_TRACE) #define CAOSDB_LOG_ERROR_AND_RETURN_STATUS(Channel, StatusCode, Message) \ CAOSDB_LOG_ERROR(Channel) << "StatusCode (" << StatusCode << ") " \ diff --git a/include/caosdb/transaction.h b/include/caosdb/transaction.h index 0e11d3f1a5d9145795b2bdcd4e1c82c31e360aa2..ae0361276eb0ad1d5f282a0068ae99f9418b2f7c 100644 --- a/include/caosdb/transaction.h +++ b/include/caosdb/transaction.h @@ -21,25 +21,22 @@ #ifndef CAOSDB_TRANSACTION_H #define CAOSDB_TRANSACTION_H -#include "caosdb/entity.h" // for Entity, FileDe... -#include "caosdb/entity/v1/main.grpc.pb.h" // for EntityTransact... -#include "caosdb/entity/v1/main.pb.h" // for MultiTransacti... -#include "caosdb/handler_interface.h" // for HandlerInterface -#include "caosdb/transaction_handler.h" // for EntityTransactionHandler -#include "caosdb/logging.h" // for CAOSDB_LOG_ERR... -#include "caosdb/protobuf_helper.h" // for get_arena -#include "caosdb/status_code.h" // for StatusCode -#include "caosdb/transaction_status.h" // for StatusCode -#include <boost/log/core/record.hpp> // for record -#include <boost/log/sources/record_ostream.hpp> // for basic_record_o... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_E... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_S... -#include <google/protobuf/arena.h> // for Arena -#include <google/protobuf/util/json_util.h> // for MessageToJsonS... -#include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue -#include <algorithm> // for max -#include <iterator> // for iterator, next -#include <map> // for map +#include "caosdb/entity.h" // for Entity, FileDe... +#include "caosdb/entity/v1/main.grpc.pb.h" // for EntityTransact... +#include "caosdb/entity/v1/main.pb.h" // for MultiTransacti... +#include "caosdb/file_descriptor.h" // for FileDescriptor +#include "caosdb/handler_interface.h" // for HandlerInterface +#include "caosdb/transaction_handler.h" // for EntityTransactionHandler +#include "caosdb/logging.h" // for CAOSDB_LOG_ERR... +#include "caosdb/protobuf_helper.h" // for get_arena +#include "caosdb/status_code.h" // for StatusCode +#include "caosdb/transaction_status.h" // for StatusCode +#include <google/protobuf/arena.h> // for Arena +#include <google/protobuf/util/json_util.h> // for MessageToJsonS... +#include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue +#include <algorithm> // for max +#include <iterator> // for iterator, next +#include <map> // for map // IWYU pragma: no_include <ext/alloc_traits.h> #include <memory> // for unique_ptr #include <string> // for string diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp index 90cc97b3cebc1b39a1b376805ae73cc068173ef7..41d19616acdd450aa5e8057dd1966000f46e0803 100644 --- a/src/caosdb/configuration.cpp +++ b/src/caosdb/configuration.cpp @@ -19,35 +19,30 @@ * */ #include "caosdb/configuration.h" -#include "caosdb/authentication.h" // for Authenticator -#include "caosdb/connection.h" // for ConnectionManager -#include "caosdb/constants.h" // for LIBCAOSDB_CONF... -#include "caosdb/exceptions.h" // for ConfigurationE... -#include "caosdb/log_level.h" // for CAOSDB_DEFAULT... -#include "caosdb/status_code.h" // for StatusCode -#include "caosdb/utility.h" // for get_home_direc... -#include <boost/json/impl/object.hpp> // for object::at -#include <boost/json/object.hpp> // for object, objec... -#include <boost/json/string.hpp> // for string -#include <boost/json/string_view.hpp> // for string_view -#include <boost/json/value.hpp> // for value, key_va... -#include <boost/json/value_ref.hpp> // for object -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_o... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_E... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_S... -#include <cassert> // for assert -#include <cstdlib> // for getenv -#include <cstring> // for strcmp -#include <exception> // IWYU pragma: keep +#include "caosdb/authentication.h" // for Authenticator +#include "caosdb/connection.h" // for ConnectionManager +#include "caosdb/constants.h" // for LIBCAOSDB_CONF... +#include "caosdb/exceptions.h" // for ConfigurationE... +#include "caosdb/log_level.h" // for CAOSDB_DEFAULT... +#include "caosdb/status_code.h" // for StatusCode +#include "caosdb/utility.h" // for get_home_direc... +#include <boost/json/impl/object.hpp> // for object::at +#include <boost/json/object.hpp> // for object, objec... +#include <boost/json/string.hpp> // for string +#include <boost/json/string_view.hpp> // for string_view +#include <boost/json/value.hpp> // for value, key_va... +#include <boost/json/value_ref.hpp> // for object +#include <cassert> // for assert +#include <cstdlib> // for getenv +#include <cstring> // for strcmp +#include <exception> // IWYU pragma: keep // IWYU pragma: no_include <bits/exception.h> #include <grpcpp/security/credentials.h> // for SslCredentials #include <iterator> // for next #include <map> // for map -#include <sstream> // for basic_stringb... #include <stdexcept> // for out_of_range #include <string> // for string, operator+ +#include <utility> // for move namespace caosdb::configuration { using boost::json::object; @@ -78,18 +73,15 @@ auto PemFileCertificateProvider::GetCertificatePem() const -> std::string { return this->certificate_provider; } -PemCertificateProvider::PemCertificateProvider(const std::string &certificate_provider) { - this->certificate_provider = certificate_provider; -} +PemCertificateProvider::PemCertificateProvider(std::string certificate_provider) + : certificate_provider(std::move(certificate_provider)) {} auto PemCertificateProvider::GetCertificatePem() const -> std::string { return this->certificate_provider; } -ConnectionConfiguration::ConnectionConfiguration(const std::string &host, int port) { - this->host = host; - this->port = port; -} +ConnectionConfiguration::ConnectionConfiguration(std::string host, int port) + : host(std::move(host)), port(port) {} auto ConnectionConfiguration::GetHost() const -> std::string { return this->host; } @@ -399,12 +391,12 @@ auto ConfigurationManager::mGetDefaultConnectionName() const -> std::string { auto default_connection = connections.at("default"); if (default_connection.is_object()) { // the name is actually "default" - return std::string("default"); + return {"default"}; } else { assert(default_connection.is_string()); auto default_connection_name = default_connection.as_string(); // return the string value of connections.default - return std::string(default_connection_name.c_str()); + return {default_connection_name.c_str()}; } } if (connections.size() == 1) { @@ -509,7 +501,7 @@ auto ConfigurationManager::InitializeDefaults() -> int { // NOLINT } if (configuration_file_path != nullptr && this->json_configuration.is_object()) { - CAOSDB_LOG_INFO(logger_name) << "Loaded configuration from " << *(configuration_file_path.get()) + CAOSDB_LOG_INFO(logger_name) << "Loaded configuration from " << *(configuration_file_path) << "."; } diff --git a/src/caosdb/entity.cpp b/src/caosdb/entity.cpp index 127d5b4e41ef5b859bbb17d5ebcec1b2c678fa43..568cc5d97c38c8af0bf8fd632d93cb9b9bc4b2f1 100644 --- a/src/caosdb/entity.cpp +++ b/src/caosdb/entity.cpp @@ -25,7 +25,6 @@ #include "caosdb/protobuf_helper.h" // for get_arena #include "caosdb/value.h" // for Value #include <google/protobuf/arena.h> // for Arena -#include <new> // for operator new namespace caosdb::entity { using ProtoParent = caosdb::entity::v1::Parent; diff --git a/src/caosdb/file_transmission/download_request_handler.cpp b/src/caosdb/file_transmission/download_request_handler.cpp index 23520e0d78c5c8c8606ad5acf7611ba7c4806fc4..6d2df655acde2cec564c1ac6bf308bac2c9eca82 100644 --- a/src/caosdb/file_transmission/download_request_handler.cpp +++ b/src/caosdb/file_transmission/download_request_handler.cpp @@ -47,16 +47,11 @@ * > DEALINGS IN THE SOFTWARE. */ #include "caosdb/file_transmission/download_request_handler.h" -#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE -#include "caosdb/protobuf_helper.h" // for get_arena -#include "caosdb/status_code.h" // for GENERIC_RPC_E... -#include "caosdb/transaction_status.h" // for TransactionStatus -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... -#include <exception> // IWYU pragma: keep +#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE +#include "caosdb/protobuf_helper.h" // for get_arena +#include "caosdb/status_code.h" // for GENERIC_RPC_E... +#include "caosdb/transaction_status.h" // for TransactionStatus +#include <exception> // IWYU pragma: keep // IWYU pragma: no_include <bits/exception.h> #include <filesystem> // for operator<<, path #include <google/protobuf/arena.h> // for Arena @@ -65,7 +60,6 @@ #include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue #include <grpcpp/impl/codegen/status.h> // for Status #include <grpcpp/impl/codegen/status_code_enum.h> // for OK, UNAUTHENT... -#include <sstream> // for streamsize #include <stdexcept> // for runtime_error #include <string> // for string, opera... #include <utility> // for move diff --git a/src/caosdb/file_transmission/register_file_upload_handler.cpp b/src/caosdb/file_transmission/register_file_upload_handler.cpp index 7b5c18c83729060768d882132067c5c8dd496d67..9460d187e883d843dae21c9e4e3ba00376ecbb01 100644 --- a/src/caosdb/file_transmission/register_file_upload_handler.cpp +++ b/src/caosdb/file_transmission/register_file_upload_handler.cpp @@ -47,13 +47,9 @@ * > DEALINGS IN THE SOFTWARE. */ #include "caosdb/file_transmission/register_file_upload_handler.h" -#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE -#include <boost/log/core/record.hpp> // for record -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... -#include <grpcpp/impl/codegen/async_unary_call.h> // for ClientAsyncRes... -#include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue +#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE +#include <grpcpp/impl/codegen/async_unary_call.h> // for ClientAsyncRes... +#include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue namespace caosdb::transaction { diff --git a/src/caosdb/file_transmission/upload_request_handler.cpp b/src/caosdb/file_transmission/upload_request_handler.cpp index 71f1106b78397a435638a0a1695bb86cb02a3edc..2f2d2c08db213bea30a3b2635b15d7eb38e249a2 100644 --- a/src/caosdb/file_transmission/upload_request_handler.cpp +++ b/src/caosdb/file_transmission/upload_request_handler.cpp @@ -47,18 +47,13 @@ * > DEALINGS IN THE SOFTWARE. */ #include "caosdb/file_transmission/upload_request_handler.h" -#include "caosdb/logging.h" // for CAOSDB_LOG_ERROR -#include "caosdb/protobuf_helper.h" // for get_arena -#include "caosdb/status_code.h" // for GENERIC_RPC_E... -#include "caosdb/transaction_status.h" // for TransactionStatus -#include <algorithm> // for min -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... -#include <cstdint> // for uint64_t -#include <exception> // IWYU pragma: keep +#include "caosdb/logging.h" // for CAOSDB_LOG_ERROR +#include "caosdb/protobuf_helper.h" // for get_arena +#include "caosdb/status_code.h" // for GENERIC_RPC_E... +#include "caosdb/transaction_status.h" // for TransactionStatus +#include <algorithm> // for min +#include <cstdint> // for uint64_t +#include <exception> // IWYU pragma: keep // IWYU pragma: no_include <bits/exception.h> #include <filesystem> // for operator<<, path #include <google/protobuf/arena.h> // for Arena @@ -68,7 +63,6 @@ #include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue #include <grpcpp/impl/codegen/status.h> // for Status #include <grpcpp/impl/codegen/status_code_enum.h> // for OK, UNAUTHENT... -#include <sstream> // for streamsize #include <string> // for basic_string #include <utility> // for move @@ -154,7 +148,7 @@ void UploadRequestHandler::handleSendingHeaderState() { } void UploadRequestHandler::handleSendingFileState() { - const uint64_t DefaultChunkSize = 4 * 1024; // 4K + const auto DefaultChunkSize = static_cast<uint64_t>(4 * 1024); // 4K auto chunkSize = std::min(DefaultChunkSize, bytesToSend_); diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp index 22cda0b65f5428fe485f62972fde3aac70f84080..ab718ff1d7eabbf0586561255e1c37336fd5b00e 100644 --- a/src/caosdb/logging.cpp +++ b/src/caosdb/logging.cpp @@ -25,25 +25,86 @@ #include <boost/log/attributes/clock.hpp> #include <boost/log/core/core.hpp> // for core #include <boost/log/core/record.hpp> +#include <boost/log/detail/attachable_sstream_buf.hpp> #include <boost/log/sources/record_ostream.hpp> #include <boost/log/sources/severity_channel_logger.hpp> #include <boost/log/utility/setup/from_settings.hpp> #include <boost/log/utility/setup/settings.hpp> -#include <boost/move/utility_core.hpp> // for move #include <boost/multi_index/detail/bidir_node_iterator.hpp> #include <boost/operators.hpp> #include <boost/preprocessor/seq/limits/enum_256.hpp> #include <boost/preprocessor/seq/limits/size_256.hpp> #include <boost/property_tree/detail/exception_implementation.hpp> +#include <boost/smart_ptr/intrusive_ptr.hpp> +#include <boost/smart_ptr/intrusive_ref_counter.hpp> #include <boost/smart_ptr/shared_ptr.hpp> -#include <boost/tuple/detail/tuple_basic.hpp> // for get +#include <cstdint> // for uint64_t #include <memory> +#include <ostream> // for ostream #include <sstream> #include <string> #include <utility> // for move #include <vector> namespace caosdb::logging { +using boost_logger_class = boost::log::sources::severity_channel_logger_mt<int, std::string>; + +class logger { +public: + static auto get() -> boost_logger_class & { return logger::GetInstance()._logger_instance; } + +private: + static logger &GetInstance() { + static logger instance; + return instance; + } + boost_logger_class _logger_instance; +}; + +LoggerOutputStream::LoggerOutputStream(std::string channel, int level) + : channel(std::move(channel)), level(level){}; + +auto LoggerOutputStream::operator<<(std::streambuf *msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} + +auto LoggerOutputStream::operator<<(int msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} + +auto LoggerOutputStream::operator<<(int64_t msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} + +auto LoggerOutputStream::operator<<(uint64_t msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} + +auto LoggerOutputStream::operator<<(const char *msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} + +auto LoggerOutputStream::operator<<(const std::string &msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} + +auto LoggerOutputStream::operator<<(void *msg) -> LoggerOutputStream & { + BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, this->level) << msg; + + return *this; +} LoggingConfiguration::LoggingConfiguration(int level) : LevelConfiguration(level) {} @@ -61,13 +122,14 @@ SinkConfiguration::SinkConfiguration(std::string name, int level) [[nodiscard]] auto SinkConfiguration::GetName() const -> const std::string & { return this->name; } -auto SinkConfiguration::Configure(boost::log::settings &settings) const -> void { - CAOSDB_LOG_TRACE(logger_name) << "Enter SinkConfiguration::Configure(&settings)"; +auto SinkConfiguration::Configure(void *settings) const -> void { + CAOSDB_LOG_TRACE(logger_name) << "Enter SinkConfiguration::Configure(*settings)"; auto sink = "Sinks." + GetName(); - settings[sink]["Destination"] = GetDestination(); - settings[sink]["Filter"] = "%Severity% >= " + std::to_string(GetLevel()); - settings[sink]["AutoFlush"] = true; - settings[sink]["Format"] = "[%TimeStamp%][%Severity%] %Channel% - %Message%"; + auto *boost_settings = static_cast<boost::log::settings *>(settings); + (*boost_settings)[sink]["Destination"] = GetDestination(); + (*boost_settings)[sink]["Filter"] = "%Severity% >= " + std::to_string(GetLevel()); + (*boost_settings)[sink]["AutoFlush"] = true; + (*boost_settings)[sink]["Format"] = "[%TimeStamp%][%Severity%] %Channel% - %Message%"; } ConsoleSinkConfiguration::ConsoleSinkConfiguration(const std::string &name, int level) @@ -78,8 +140,8 @@ ConsoleSinkConfiguration::ConsoleSinkConfiguration(const std::string &name, int return this->destination; } -auto ConsoleSinkConfiguration::Configure(boost::log::settings &settings) const -> void { - CAOSDB_LOG_TRACE(logger_name) << "Enter ConsoleSinkConfiguration::Configure(&settings)"; +auto ConsoleSinkConfiguration::Configure(void *settings) const -> void { + CAOSDB_LOG_TRACE(logger_name) << "Enter ConsoleSinkConfiguration::Configure(*settings)"; sink_configuration::Configure(settings); } @@ -95,10 +157,11 @@ auto FileSinkConfiguration::SetDirectory(const std::string &directory) -> void { this->directory = std::string(directory); } -auto FileSinkConfiguration::Configure(boost::log::settings &settings) const -> void { - CAOSDB_LOG_TRACE(logger_name) << "Enter FileSinkConfiguration::Configure(&settings)"; +auto FileSinkConfiguration::Configure(void *settings) const -> void { + CAOSDB_LOG_TRACE(logger_name) << "Enter FileSinkConfiguration::Configure(*settings)"; sink_configuration::Configure(settings); - settings["Sink." + GetName() + ".Target"] = this->directory; + auto *boost_settings = static_cast<boost::log::settings *>(settings); + (*boost_settings)["Sink." + GetName() + ".Target"] = this->directory; } SyslogSinkConfiguration::SyslogSinkConfiguration(const std::string &name, int level) @@ -127,7 +190,7 @@ auto initialize_logging_defaults() -> int { default_settings["Core.DisableLogging"] = false; for (const auto &sink : default_sinks) { - sink->Configure(default_settings); + sink->Configure(&default_settings); } boost::log::init_from_settings(default_settings); @@ -158,7 +221,7 @@ auto initialize_logging(const LoggingConfiguration &configuration) -> void { new_settings["Core.DisableLogging"] = false; for (const auto &sink : configuration.GetSinks()) { - sink->Configure(new_settings); + sink->Configure(&new_settings); } boost::log::init_from_settings(new_settings); @@ -167,27 +230,27 @@ auto initialize_logging(const LoggingConfiguration &configuration) -> void { } void caosdb_log_fatal(const char *channel, const char *msg) { - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, CAOSDB_LOG_LEVEL_FATAL) << msg; + LoggerOutputStream::get(channel, CAOSDB_LOG_LEVEL_FATAL) << msg; } void caosdb_log_error(const char *channel, const char *msg) { - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, CAOSDB_LOG_LEVEL_ERROR) << msg; + LoggerOutputStream::get(channel, CAOSDB_LOG_LEVEL_ERROR) << msg; } void caosdb_log_warn(const char *channel, const char *msg) { - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, CAOSDB_LOG_LEVEL_WARN) << msg; + LoggerOutputStream::get(channel, CAOSDB_LOG_LEVEL_WARN) << msg; } void caosdb_log_info(const char *channel, const char *msg) { - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, CAOSDB_LOG_LEVEL_INFO) << msg; + LoggerOutputStream::get(channel, CAOSDB_LOG_LEVEL_INFO) << msg; } void caosdb_log_debug(const char *channel, const char *msg) { - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, CAOSDB_LOG_LEVEL_DEBUG) << msg; + LoggerOutputStream::get(channel, CAOSDB_LOG_LEVEL_DEBUG) << msg; } void caosdb_log_trace(const char *channel, const char *msg) { - BOOST_LOG_CHANNEL_SEV(caosdb::logging::logger::get(), channel, CAOSDB_LOG_LEVEL_TRACE) << msg; + LoggerOutputStream::get(channel, CAOSDB_LOG_LEVEL_TRACE) << msg; } } // namespace caosdb::logging diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp index 4c4bbda601d358c60fffa0537532d28a3699bb86..939e5e8d6e55a533d78c826f513ffea527101e0c 100644 --- a/src/caosdb/transaction.cpp +++ b/src/caosdb/transaction.cpp @@ -18,8 +18,9 @@ * */ #include "caosdb/transaction.h" -#include "caosdb/entity/v1/main.grpc.pb.h" // for EntityTransac... -#include "caosdb/entity/v1/main.pb.h" // for TransactionRe... +#include "caosdb/entity/v1/main.grpc.pb.h" // for EntityTransac... +#include "caosdb/entity/v1/main.pb.h" // for TransactionRe... + #include "caosdb/file_transmission/download_request_handler.h" // Download... #include "caosdb/file_transmission/file_reader.h" // for path #include "caosdb/file_transmission/register_file_upload_handler.h" // for RegisterFileUploadHandler @@ -28,11 +29,6 @@ #include "caosdb/status_code.h" // for StatusCode #include "caosdb/transaction_handler.h" // for EntityTransactionHandler #include <algorithm> // for max -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... // IWYU pragma: no_include <bits/exception.h> #include <exception> // IWYU pragma: keep #include <filesystem> // for operator<<, path @@ -42,8 +38,7 @@ #include <map> // for map, operator!= #include <memory> // for unique_ptr #include <random> // for mt19937, rand... -#include <sstream> -#include <utility> // for move, pair +#include <utility> // for move, pair namespace caosdb::transaction { using caosdb::entity::v1::EntityTransactionService; @@ -89,12 +84,9 @@ MultiResultSet::MultiResultSet(std::vector<std::unique_ptr<Entity>> result_set) Transaction::Transaction(std::shared_ptr<EntityTransactionService::Stub> entity_service, std::shared_ptr<FileTransmissionService::Stub> file_service) - : request(Arena::CreateMessage<MultiTransactionRequest>(GetArena())), - response(Arena::CreateMessage<MultiTransactionResponse>(GetArena())) { - this->entity_service = std::move(entity_service); - this->file_service = std::move(file_service); - this->query_count = -1; -} + : entity_service(std::move(entity_service)), file_service(std::move(file_service)), + request(Arena::CreateMessage<MultiTransactionRequest>(GetArena())), + response(Arena::CreateMessage<MultiTransactionResponse>(GetArena())), query_count(-1) {} auto Transaction::RetrieveById(const std::string &id) noexcept -> StatusCode { ASSERT_CAN_ADD_RETRIEVAL diff --git a/src/caosdb/transaction_handler.cpp b/src/caosdb/transaction_handler.cpp index e97e626139dd967353491310627f96acefbdb8eb..fd2b527e47dc411290ef05d629899c335788bc36 100644 --- a/src/caosdb/transaction_handler.cpp +++ b/src/caosdb/transaction_handler.cpp @@ -1,15 +1,9 @@ #include "caosdb/transaction_handler.h" -#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... -#include <exception> // IWYU pragma: keep +#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE +#include <exception> // IWYU pragma: keep // IWYU pragma: no_include <bits/exception.h> #include <grpcpp/impl/codegen/async_unary_call.h> // for ClientAsyncRes... #include <grpcpp/impl/codegen/completion_queue.h> // for CompletionQueue -#include <iosfwd> // for streamsize namespace caosdb::transaction { diff --git a/src/caosdb/unary_rpc_handler.cpp b/src/caosdb/unary_rpc_handler.cpp index 9a61a534ec30da943f7637d9995a2595acf96804..86320ca2a94b0b67bd362e0e76fe0f31ddd78007 100644 --- a/src/caosdb/unary_rpc_handler.cpp +++ b/src/caosdb/unary_rpc_handler.cpp @@ -47,19 +47,13 @@ * > DEALINGS IN THE SOFTWARE. */ #include "caosdb/unary_rpc_handler.h" -#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE -#include "caosdb/status_code.h" // for GENERIC_RPC_E... -#include <boost/log/core/record.hpp> // for record -#include <boost/log/detail/attachable_sstream_buf.hpp> // for basic_ostring... -#include <boost/log/sources/record_ostream.hpp> // for basic_record_... -#include <boost/preprocessor/seq/limits/enum_256.hpp> // for BOOST_PP_SEQ_... -#include <boost/preprocessor/seq/limits/size_256.hpp> // for BOOST_PP_SEQ_... +#include "caosdb/logging.h" // for CAOSDB_LOG_TRACE +#include "caosdb/status_code.h" // for GENERIC_RPC_E... // IWYU pragma: no_include <bits/exception.h> #include <exception> // IWYU pragma: keep #include <grpcpp/impl/codegen/client_context.h> // for ClientContext #include <grpcpp/impl/codegen/status.h> // for Status #include <grpcpp/impl/codegen/status_code_enum.h> // for OK, UNAUTHENT... -#include <iosfwd> // for streamsize #include <string> // for string, opera... namespace caosdb::transaction {