From 2842f4a0d0071eb83a14bfd037842356d84a87c7 Mon Sep 17 00:00:00 2001 From: astri Date: Thu, 18 May 2023 20:35:34 +0200 Subject: [PATCH 1/3] Configuration Refactoring --- CMakeLists.txt | 1 - include/Redis_Provider.h | 37 +++++++------------- src/Redis_Provider.cpp | 73 ++++++++++++++++++++++++++++++++++++---- 3 files changed, 79 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02d9c34..e202807 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,6 @@ option(REDISPROVIDER_BUILD_SHARED "Build redisprovider as a shared library." OFF # sources set(SOURCES src/Redis_Provider.cpp - src/Redis_Provider_Configurator.cpp ) # target diff --git a/include/Redis_Provider.h b/include/Redis_Provider.h index 0ed0f25..792e585 100755 --- a/include/Redis_Provider.h +++ b/include/Redis_Provider.h @@ -4,8 +4,7 @@ * Author: astrisw */ -#ifndef REDISPROVIDER_H_ -#define REDISPROVIDER_H_ +#pragma once #include #include @@ -16,36 +15,24 @@ namespace inaf::oasbo::Providers { class RedisProvider : public BaseProvider{ protected: redisContext *context = nullptr; - std::string ip; - int port; - std::string & key = *(&this->dest); - - void setDest(std::string dest){setKey(dest);} - std::string getDest(){return getKey();} - -public: RedisProvider(); RedisProvider(std::string ip, int port, std::string key); - void setIp(std::string ip){this->ip=ip;} - void setPort(int port){this->port=port;} - void setKey(std::string key){this->key=key;} - - - std::string getIp(){return this->ip;} - int getPort(){return this->port;} - std::string getKey(){return this->key;} - - - int write(PacketLib::BasePacket &); - int write(PacketLib::BasePacket &, std::string dest); +public: + std::string ip; + int port; - int close(); - int open(); + int write(PacketLib::BasePacket &) override; + int write(PacketLib::BasePacket &, std::string dest) override; + void setDest(std::string dest) override {this->dest = dest;} + std::string getDest() override {return dest;} + int close() override; + int open() override; bool isOpen() override; ~RedisProvider(); + class Builder; + }; } -#endif /* REDISPROVIDER_H_ */ diff --git a/src/Redis_Provider.cpp b/src/Redis_Provider.cpp index 1b7341b..bd8e9b7 100755 --- a/src/Redis_Provider.cpp +++ b/src/Redis_Provider.cpp @@ -1,4 +1,5 @@ - #include +#include +#include using namespace inaf::oasbo::Providers; RedisProvider::RedisProvider() { @@ -6,13 +7,13 @@ RedisProvider::RedisProvider() { } RedisProvider::RedisProvider(std::string ip, int port, std::string key) { - setIp(ip); - setPort(port); - setKey(key); + setDest(key); + this->port = port; + this->ip = ip; } int RedisProvider::write(PacketLib::BasePacket &packet) { - return write(packet,this->key); + return write(packet,this->dest); } int RedisProvider::write(PacketLib::BasePacket &packet, std::string key) { @@ -44,7 +45,7 @@ int RedisProvider::write(PacketLib::BasePacket &packet, std::string key) { int RedisProvider::open() { if (isOpen()) close(); - context = redisConnect(getIp().c_str(), getPort()); + context = redisConnect(ip.c_str(), port); if (context == nullptr || context->err) { if (context) { std::cout << "Redis Provider Error: "<< context->errstr << std::endl; @@ -71,3 +72,63 @@ bool RedisProvider::isOpen() { RedisProvider::~RedisProvider(){ close(); } + + +class RedisProvider::Builder { +protected: + RedisProvider *provider; + +public: + + std::string ip_key{"ip"}; + std::string port_key{"port"}; + std::string redis_key_key{"key"}; + + Builder() { + this->reset(); + } + Builder(std::string ip, int port, std::string topic) { + this->provider = new RedisProvider(ip, port, topic); + + } + ~Builder() { + delete provider; + } + + void reset() { + this->provider = new RedisProvider(); + } + + Builder* configFrom(Configurators::BaseConfigurator *conf) { + std::map params = + conf->readConfig(); + if (params.count(ip_key) > 0) + provider->ip = params[ip_key]; + if (params.count(port_key) > 0) + provider->port = std::stoi(params[port_key]); + if (params.count(redis_key_key) > 0) + provider->setDest(params[redis_key_key]); + return this; + } + + Builder* setIp(std::string ip) { + provider->ip = ip; + return this; + } + + Builder* setPort(int port) { + provider->port = port; + return this; + } + + Builder* setKey(std::string key) { + provider->setDest(key); + return this; + } + + RedisProvider* getProvider() { + RedisProvider *result = this->provider; + this->reset(); + return result; + } +}; -- GitLab From 9512400e09814a62cee3f6ecee85e733512004e6 Mon Sep 17 00:00:00 2001 From: astri Date: Thu, 25 May 2023 15:56:35 +0200 Subject: [PATCH 2/3] builder refactor --- include/Redis_Provider.h | 44 ++++++++++-- src/Redis_Provider.cpp | 150 +++++++++++++++++++-------------------- 2 files changed, 110 insertions(+), 84 deletions(-) diff --git a/include/Redis_Provider.h b/include/Redis_Provider.h index 792e585..fc32327 100755 --- a/include/Redis_Provider.h +++ b/include/Redis_Provider.h @@ -9,10 +9,11 @@ #include #include #include +#include namespace inaf::oasbo::Providers { -class RedisProvider : public BaseProvider{ +class RedisProvider: public BaseProvider { protected: redisContext *context = nullptr; @@ -23,16 +24,47 @@ public: std::string ip; int port; - int write(PacketLib::BasePacket &) override; - int write(PacketLib::BasePacket &, std::string dest) override; - void setDest(std::string dest) override {this->dest = dest;} - std::string getDest() override {return dest;} + int write(PacketLib::BasePacket&) override; + int write(PacketLib::BasePacket&, std::string dest) override; + void setDest(std::string dest) override { + this->dest = dest; + } + std::string getDest() override { + return dest; + } int close() override; int open() override; bool isOpen() override; ~RedisProvider(); - class Builder; + friend class Builder; + + class Builder { + protected: + RedisProvider *provider; + + public: + + std::string ip_key { "ip" }; + std::string port_key { "port" }; + std::string redis_key_key { "key" }; + + Builder(); + Builder(std::string ip, int port, std::string topic); + ~Builder(); + + void reset(); + + Builder* configFrom(Configurators::BaseConfigurator *conf); + + Builder* setIp(std::string ip); + + Builder* setPort(int port); + + Builder* setKey(std::string key); + + RedisProvider* getProvider(); + }; }; } diff --git a/src/Redis_Provider.cpp b/src/Redis_Provider.cpp index bd8e9b7..b17553d 100755 --- a/src/Redis_Provider.cpp +++ b/src/Redis_Provider.cpp @@ -3,7 +3,7 @@ using namespace inaf::oasbo::Providers; RedisProvider::RedisProvider() { - RedisProvider("127.0.0.1",6379,"DAQ_key"); + RedisProvider("127.0.0.1", 6379, "DAQ_key"); } RedisProvider::RedisProvider(std::string ip, int port, std::string key) { @@ -13,32 +13,36 @@ RedisProvider::RedisProvider(std::string ip, int port, std::string key) { } int RedisProvider::write(PacketLib::BasePacket &packet) { - return write(packet,this->dest); + return write(packet, this->dest); } int RedisProvider::write(PacketLib::BasePacket &packet, std::string key) { - if (!isOpen()){ - if (context) { - std::cout << "Redis Provider Error: "<< context->errstr << std::endl; - } else { - std::cout << "Redis Provider Error: Can't allocate Redis context" << std::endl; - } - return -1; + if (!isOpen()) { + if (context) { + std::cout << "Redis Provider Error: " << context->errstr + << std::endl; + } else { + std::cout << "Redis Provider Error: Can't allocate Redis context" + << std::endl; + } + return -1; } - uint size = packet.getHeaderSize() + packet.getPayloadSize() + packet.getTailSize(); - redisReply *r = (redisReply *) redisCommand(context, "LPUSH %s %b", key.c_str(), (char*) packet.getBinaryPointer(), size); + uint size = packet.getHeaderSize() + packet.getPayloadSize() + + packet.getTailSize(); + redisReply *r = (redisReply*) redisCommand(context, "LPUSH %s %b", + key.c_str(), (char*) packet.getBinaryPointer(), size); if (r == NULL) { - // Error executing Redis command - return -1; + // Error executing Redis command + return -1; } // Check the type of the Redis reply if (r->type == REDIS_REPLY_ERROR) { - // Error executing Redis command + // Error executing Redis command std::cout << r->str << std::endl; - freeReplyObject(r); - return -1; + freeReplyObject(r); + return -1; } - freeReplyObject(r); + freeReplyObject(r); return size; } @@ -47,18 +51,20 @@ int RedisProvider::open() { close(); context = redisConnect(ip.c_str(), port); if (context == nullptr || context->err) { - if (context) { - std::cout << "Redis Provider Error: "<< context->errstr << std::endl; - } else { - std::cout << "Redis Provider Error: Can't allocate Redis context" << std::endl; - } - return -1; + if (context) { + std::cout << "Redis Provider Error: " << context->errstr + << std::endl; + } else { + std::cout << "Redis Provider Error: Can't allocate Redis context" + << std::endl; + } + return -1; } return 1; } int RedisProvider::close() { - if (context != nullptr && !context->err ){ + if (context != nullptr && !context->err) { redisFree(this->context); context = nullptr; } @@ -66,69 +72,57 @@ int RedisProvider::close() { } bool RedisProvider::isOpen() { - return (context != nullptr && !context->err ); + return (context != nullptr && !context->err); } -RedisProvider::~RedisProvider(){ +RedisProvider::~RedisProvider() { close(); } +using R_B = RedisProvider::Builder; +R_B::Builder() { + this->reset(); +} +R_B::Builder(std::string ip, int port, std::string topic) { + this->provider = new RedisProvider(ip, port, topic); -class RedisProvider::Builder { -protected: - RedisProvider *provider; - -public: - - std::string ip_key{"ip"}; - std::string port_key{"port"}; - std::string redis_key_key{"key"}; - - Builder() { - this->reset(); - } - Builder(std::string ip, int port, std::string topic) { - this->provider = new RedisProvider(ip, port, topic); - - } - ~Builder() { - delete provider; - } +} +R_B::~Builder() { + delete provider; +} - void reset() { - this->provider = new RedisProvider(); - } +void R_B::reset() { + this->provider = new RedisProvider(); +} - Builder* configFrom(Configurators::BaseConfigurator *conf) { - std::map params = - conf->readConfig(); - if (params.count(ip_key) > 0) - provider->ip = params[ip_key]; - if (params.count(port_key) > 0) - provider->port = std::stoi(params[port_key]); - if (params.count(redis_key_key) > 0) - provider->setDest(params[redis_key_key]); - return this; - } +R_B* R_B::configFrom(Configurators::BaseConfigurator *conf) { + std::map params = conf->readConfig(); + if (params.count(ip_key) > 0) + provider->ip = params[ip_key]; + if (params.count(port_key) > 0) + provider->port = std::stoi(params[port_key]); + if (params.count(redis_key_key) > 0) + provider->setDest(params[redis_key_key]); + return this; +} - Builder* setIp(std::string ip) { - provider->ip = ip; - return this; - } +R_B* R_B::setIp(std::string ip) { + provider->ip = ip; + return this; +} - Builder* setPort(int port) { - provider->port = port; - return this; - } +R_B* R_B::setPort(int port) { + provider->port = port; + return this; +} - Builder* setKey(std::string key) { - provider->setDest(key); - return this; - } +R_B* R_B::setKey(std::string key) { + provider->setDest(key); + return this; +} - RedisProvider* getProvider() { - RedisProvider *result = this->provider; - this->reset(); - return result; - } -}; +RedisProvider* R_B::getProvider() { + RedisProvider *result = this->provider; + this->reset(); + return result; +} -- GitLab From a451624d6c51c6f70438b0a893a670871d9d97e9 Mon Sep 17 00:00:00 2001 From: astri Date: Sat, 3 Jun 2023 18:49:09 +0200 Subject: [PATCH 3/3] config refactorig ok --- deps/Base-DAQ | 2 +- src/Redis_Provider.cpp | 31 +++++++++++++++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/deps/Base-DAQ b/deps/Base-DAQ index a2095e5..2b4e8b0 160000 --- a/deps/Base-DAQ +++ b/deps/Base-DAQ @@ -1 +1 @@ -Subproject commit a2095e59d57271e3bef3422a67c6905fd237467c +Subproject commit 2b4e8b039ec5da9ddd53720991c1b95f034e86fb diff --git a/src/Redis_Provider.cpp b/src/Redis_Provider.cpp index b17553d..f4a8321 100755 --- a/src/Redis_Provider.cpp +++ b/src/Redis_Provider.cpp @@ -2,14 +2,13 @@ #include using namespace inaf::oasbo::Providers; -RedisProvider::RedisProvider() { - RedisProvider("127.0.0.1", 6379, "DAQ_key"); +RedisProvider::RedisProvider() : + RedisProvider("127.0.0.1", 6379, "DAQ_key") { } -RedisProvider::RedisProvider(std::string ip, int port, std::string key) { +RedisProvider::RedisProvider(std::string ip, int port, std::string key) : + ip(ip),port(port) { setDest(key); - this->port = port; - this->ip = ip; } int RedisProvider::write(PacketLib::BasePacket &packet) { @@ -96,13 +95,21 @@ void R_B::reset() { } R_B* R_B::configFrom(Configurators::BaseConfigurator *conf) { - std::map params = conf->readConfig(); - if (params.count(ip_key) > 0) - provider->ip = params[ip_key]; - if (params.count(port_key) > 0) - provider->port = std::stoi(params[port_key]); - if (params.count(redis_key_key) > 0) - provider->setDest(params[redis_key_key]); + std::string target = std::string("redisprovider"); + conf->readConfigFromSource(target); + std::map params = conf->getConfig(); + + std::string key = target+"_"+ip_key; + if (params.count(key) > 0) + provider->ip = params[key]; + + key = target+"_"+port_key; + if (params.count(key) > 0) + provider->port = std::stoi(params[key]); + + key = target+"_"+redis_key_key; + if (params.count(key) > 0) + provider->setDest(params[key]); return this; } -- GitLab