From afc8b942cbcd1f8ff2b213533aef15331e78363f Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Fri, 10 Dec 2021 10:31:42 -0800 Subject: [PATCH] Fixing https://telecominfraproject.atlassian.net/browse/WIFI-6149 --- Dockerfile | 2 +- build | 2 +- src/framework/MicroService.h | 71 +++++++++++++++++++----------------- 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Dockerfile b/Dockerfile index a6f6bbd..0f1f801 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,7 +56,7 @@ RUN make install ADD CMakeLists.txt build /owfms/ ADD cmake /owfms/cmake ADD src /owfms/src -ADD .git /owgw/.git +ADD .git /owfms/.git WORKDIR /owfms RUN mkdir cmake-build diff --git a/build b/build index b74e882..1758ddd 100644 --- a/build +++ b/build @@ -1 +1 @@ -31 \ No newline at end of file +32 \ No newline at end of file diff --git a/src/framework/MicroService.h b/src/framework/MicroService.h index 47c74f1..4e0bc90 100644 --- a/src/framework/MicroService.h +++ b/src/framework/MicroService.h @@ -2395,10 +2395,10 @@ namespace OpenWifi { Poco::Logger & L, RESTAPI_GenericServer & S); - class RESTAPI_server : public SubSystemServer { + class RESTAPI_ExtServer : public SubSystemServer { public: - static RESTAPI_server *instance() { - static RESTAPI_server *instance_ = new RESTAPI_server; + static RESTAPI_ExtServer *instance() { + static RESTAPI_ExtServer *instance_ = new RESTAPI_ExtServer; return instance_; } int Start() override; @@ -2412,7 +2412,7 @@ namespace OpenWifi { inline void reinitialize(Poco::Util::Application &self) override; - inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path) { + inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path, uint64_t Id) { RESTAPIHandler::BindingMap Bindings; return RESTAPI_external_server(Path, Bindings, Logger_, Server_); } @@ -2422,19 +2422,19 @@ namespace OpenWifi { Poco::ThreadPool Pool_; RESTAPI_GenericServer Server_; - RESTAPI_server() noexcept: + RESTAPI_ExtServer() noexcept: SubSystemServer("RESTAPIServer", "RESTAPIServer", "openwifi.restapi") { } }; - inline RESTAPI_server * RESTAPI_server() { return RESTAPI_server::instance(); }; + inline RESTAPI_ExtServer * RESTAPI_ExtServer() { return RESTAPI_ExtServer::instance(); }; - class RequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { + class ExtRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { public: - RequestHandlerFactory(RESTAPI_GenericServer & Server) : - Logger_(RESTAPI_server::instance()->Logger()), - Server_(Server) + explicit ExtRequestHandlerFactory(RESTAPI_GenericServer & Server) : + Logger_(RESTAPI_ExtServer::instance()->Logger()), + Server_(Server) { } @@ -2442,15 +2442,16 @@ namespace OpenWifi { inline Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &Request) override { Poco::URI uri(Request.getURI()); auto *Path = uri.getPath().c_str(); - return RESTAPI_server()->CallServer(Path); + return RESTAPI_ExtServer()->CallServer(Path, TransactionId_++); } private: - Poco::Logger &Logger_; - RESTAPI_GenericServer &Server_; + static inline std::atomic_uint64_t TransactionId_ = 1; + Poco::Logger &Logger_; + RESTAPI_GenericServer &Server_; }; - inline int RESTAPI_server::Start() { + inline int RESTAPI_ExtServer::Start() { Logger_.information("Starting."); Server_.InitLogging(); @@ -2469,7 +2470,7 @@ namespace OpenWifi { Params->setMaxQueued(200); Params->setKeepAlive(true); - auto NewServer = std::make_unique(new RequestHandlerFactory(Server_), Pool_, Sock, Params); + auto NewServer = std::make_unique(new ExtRequestHandlerFactory(Server_), Pool_, Sock, Params); NewServer->start(); RESTServers_.push_back(std::move(NewServer)); } @@ -2477,11 +2478,11 @@ namespace OpenWifi { return 0; } - class RESTAPI_InternalServer : public SubSystemServer { + class RESTAPI_IntServer : public SubSystemServer { public: - static RESTAPI_InternalServer *instance() { - static RESTAPI_InternalServer *instance_ = new RESTAPI_InternalServer; + static RESTAPI_IntServer *instance() { + static RESTAPI_IntServer *instance_ = new RESTAPI_IntServer; return instance_; } @@ -2490,12 +2491,13 @@ namespace OpenWifi { Logger_.information("Stopping "); for( const auto & svr : RESTServers_ ) svr->stop(); - Pool_.stopAll(); + Pool_.joinAll(); + RESTServers_.clear(); } inline void reinitialize(Poco::Util::Application &self) override; - inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path) { + inline Poco::Net::HTTPRequestHandler *CallServer(const char *Path, uint64_t Id) { RESTAPIHandler::BindingMap Bindings; return RESTAPI_internal_server(Path, Bindings, Logger_, Server_); } @@ -2504,30 +2506,31 @@ namespace OpenWifi { Poco::ThreadPool Pool_; RESTAPI_GenericServer Server_; - RESTAPI_InternalServer() noexcept: SubSystemServer("RESTAPIInternalServer", "REST-ISRV", "openwifi.internal.restapi") + RESTAPI_IntServer() noexcept: SubSystemServer("RESTAPIInternalServer", "REST-ISRV", "openwifi.internal.restapi") { } }; - inline RESTAPI_InternalServer * RESTAPI_InternalServer() { return RESTAPI_InternalServer::instance(); }; + inline RESTAPI_IntServer * RESTAPI_IntServer() { return RESTAPI_IntServer::instance(); }; - class InternalRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { + class IntRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory { public: - InternalRequestHandlerFactory(RESTAPI_GenericServer & Server) : - Logger_(RESTAPI_InternalServer()->Logger()), + explicit IntRequestHandlerFactory(RESTAPI_GenericServer & Server) : + Logger_(RESTAPI_IntServer()->Logger()), Server_(Server){} inline Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &Request) override { Poco::URI uri(Request.getURI()); auto *Path = uri.getPath().c_str(); - return RESTAPI_InternalServer()->CallServer(Path); + return RESTAPI_IntServer()->CallServer(Path, TransactionId_++); } private: + static inline std::atomic_uint64_t TransactionId_ = 1; Poco::Logger & Logger_; RESTAPI_GenericServer & Server_; }; - inline int RESTAPI_InternalServer::Start() { + inline int RESTAPI_IntServer::Start() { Logger_.information("Starting."); Server_.InitLogging(); @@ -2545,7 +2548,7 @@ namespace OpenWifi { Params->setMaxQueued(200); Params->setKeepAlive(true); - auto NewServer = std::make_unique(new InternalRequestHandlerFactory(Server_), Pool_, Sock, Params); + auto NewServer = std::make_unique(new IntRequestHandlerFactory(Server_), Pool_, Sock, Params); NewServer->start(); RESTServers_.push_back(std::move(NewServer)); } @@ -2826,8 +2829,8 @@ namespace OpenWifi { // add the default services SubSystems_.push_back(KafkaManager()); SubSystems_.push_back(ALBHealthCheckServer()); - SubSystems_.push_back(RESTAPI_server()); - SubSystems_.push_back(RESTAPI_InternalServer()); + SubSystems_.push_back(RESTAPI_ExtServer()); + SubSystems_.push_back(RESTAPI_IntServer()); Poco::Net::initializeSSL(); Poco::Net::HTTPStreamFactory::registerFactory(); @@ -3397,14 +3400,14 @@ namespace OpenWifi { Consumer.unsubscribe(); } - inline void RESTAPI_server::reinitialize(Poco::Util::Application &self) { + inline void RESTAPI_ExtServer::reinitialize(Poco::Util::Application &self) { MicroService::instance().LoadConfigurationFile(); Logger_.information("Reinitializing."); Stop(); Start(); } - void RESTAPI_InternalServer::reinitialize(Poco::Util::Application &self) { + void RESTAPI_IntServer::reinitialize(Poco::Util::Application &self) { MicroService::instance().LoadConfigurationFile(); Logger_.information("Reinitializing."); Stop(); @@ -3728,7 +3731,7 @@ namespace OpenWifi { if (AuthClient()->IsAuthorized( SessionToken_, UserInfo_, Expired)) { #endif if(Server_.LogIt(Request->getMethod(),true)) { - Logger_.debug(Poco::format("X-REQ-ALLOWED(%s): User='%s@%s' Method='%s' Path='%s", + Logger_.debug(Poco::format("X-REQ-ALLOWED(%s): User='%s@%s' Method='%s' Path='%s'", UserInfo_.userinfo.email, Utils::FormatIPv6(Request->clientAddress().toString()), Request->clientAddress().toString(), @@ -3738,7 +3741,7 @@ namespace OpenWifi { return true; } else { if(Server_.LogBadTokens(true)) { - Logger_.debug(Poco::format("X-REQ-DENIED(%s): Method='%s' Path='%s", + Logger_.debug(Poco::format("X-REQ-DENIED(%s): Method='%s' Path='%s'", Utils::FormatIPv6(Request->clientAddress().toString()), Request->getMethod(), Request->getURI())); }