From 7fb5be32befb66de772b59e4c7b167cb7cc58aea Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Fri, 1 Jul 2022 09:41:31 -0700 Subject: [PATCH] https://telecominfraproject.atlassian.net/browse/WIFI-10040 Signed-off-by: stephb9959 --- build | 2 +- src/AutoUpdater.cpp | 1 + src/ManifestCreator.cpp | 1 + src/NewCommandHandler.cpp | 1 + src/NewConnectionHandler.cpp | 1 + src/framework/MicroService.h | 55 ++++++++++++++++++++++++++++-------- 6 files changed, 49 insertions(+), 12 deletions(-) diff --git a/build b/build index 7d37386..abc4eff 100644 --- a/build +++ b/build @@ -1 +1 @@ -45 \ No newline at end of file +46 \ No newline at end of file diff --git a/src/AutoUpdater.cpp b/src/AutoUpdater.cpp index 32dee79..30f76fd 100644 --- a/src/AutoUpdater.cpp +++ b/src/AutoUpdater.cpp @@ -38,6 +38,7 @@ namespace OpenWifi { } void AutoUpdater::onTimer([[maybe_unused]] Poco::Timer & timer) { + Utils::SetThreadName("auto-updater"); Running_ = true; std::unique_lock L(Mutex_); while(!Queue_.empty() && Running_) { diff --git a/src/ManifestCreator.cpp b/src/ManifestCreator.cpp index 1c35751..8a30228 100644 --- a/src/ManifestCreator.cpp +++ b/src/ManifestCreator.cpp @@ -17,6 +17,7 @@ namespace OpenWifi { void ManifestCreator::onTimer([[maybe_unused]] Poco::Timer &timer) { + Utils::SetThreadName("manifest"); Logger().information("Performing DB refresh"); S3BucketContent BucketList; StorageService()->FirmwaresDB().RemoveOldFirmware(); diff --git a/src/NewCommandHandler.cpp b/src/NewCommandHandler.cpp index e988e55..5d6ae55 100644 --- a/src/NewCommandHandler.cpp +++ b/src/NewCommandHandler.cpp @@ -9,6 +9,7 @@ namespace OpenWifi { void NewCommandHandler::run() { Running_ = true ; + Utils::SetThreadName("cmd-handler"); while(Running_) { Poco::Thread::trySleep(2000); diff --git a/src/NewConnectionHandler.cpp b/src/NewConnectionHandler.cpp index 29cfc1e..a5344ca 100644 --- a/src/NewConnectionHandler.cpp +++ b/src/NewConnectionHandler.cpp @@ -22,6 +22,7 @@ namespace OpenWifi { void NewConnectionHandler::run() { + Utils::SetThreadName("conn-handler"); Running_ = true ; while(Running_) { Poco::Thread::trySleep(2000); diff --git a/src/framework/MicroService.h b/src/framework/MicroService.h index 9169c10..8447a5e 100644 --- a/src/framework/MicroService.h +++ b/src/framework/MicroService.h @@ -643,6 +643,27 @@ namespace OpenWifi::RESTAPI_utils { namespace OpenWifi::Utils { + inline void SetThreadName(const char *name) { +#ifdef __linux__ + Poco::Thread::current()->setName(name); + pthread_setname_np(pthread_self(), name); +#endif +#ifdef __APPLE__ + Poco::Thread::current()->setName(name); + pthread_setname_np(name); +#endif + } + + inline void SetThreadName(Poco::Thread &thr, const char *name) { +#ifdef __linux__ + thr.setName(name); + pthread_setname_np(thr.tid(), name); +#endif +#ifdef __APPLE__ + thr.setName(name); +#endif + } + enum MediaTypeEncodings { PLAIN, BINARY, @@ -1316,7 +1337,7 @@ namespace OpenWifi { inline void Start(); inline void Stop(); private: - std::atomic_bool Running_ = false; + mutable std::atomic_bool Running_ = false; Poco::Thread Thread_; }; @@ -1847,7 +1868,8 @@ namespace OpenWifi { Request = &RequestIn; Response = &ResponseIn; - Poco::Thread::current()->setName("WebServerThread_" + std::to_string(TransactionId_)); + std::string th_name = "restsvr_" + std::to_string(TransactionId_); + Utils::SetThreadName(th_name.c_str()); if(Request->getContentLength()>0) { if(Request->getContentType().find("application/json")!=std::string::npos) { @@ -2579,7 +2601,7 @@ namespace OpenWifi { private: std::recursive_mutex Mutex_; Poco::Thread Worker_; - std::atomic_bool Running_=false; + mutable std::atomic_bool Running_=false; Poco::NotificationQueue Queue_; }; @@ -2605,7 +2627,7 @@ namespace OpenWifi { private: std::recursive_mutex Mutex_; Poco::Thread Worker_; - std::atomic_bool Running_=false; + mutable std::atomic_bool Running_=false; }; class KafkaDispatcher : public Poco::Runnable { @@ -2662,6 +2684,7 @@ namespace OpenWifi { inline void run() override { Poco::AutoPtr Note(Queue_.waitDequeueNotification()); + Utils::SetThreadName("kafka-dispatch"); while(Note && Running_) { auto Msg = dynamic_cast(Note.get()); if(Msg!= nullptr) { @@ -2687,7 +2710,7 @@ namespace OpenWifi { std::recursive_mutex Mutex_; Types::NotifyTable Notifiers_; Poco::Thread Worker_; - std::atomic_bool Running_=false; + mutable std::atomic_bool Running_=false; uint64_t FunctionId_=1; Poco::NotificationQueue Queue_; }; @@ -2882,6 +2905,7 @@ namespace OpenWifi { void handleRequest(Poco::Net::HTTPServerRequest& Request, Poco::Net::HTTPServerResponse& Response) override { + Utils::SetThreadName("alb-request"); try { if((id_ % 100) == 0) { Logger_.debug(fmt::format("ALB-REQUEST({}): ALB Request {}.", @@ -2950,7 +2974,7 @@ namespace OpenWifi { std::unique_ptr Server_; std::unique_ptr Socket_; int Port_ = 0; - std::atomic_bool Running_=false; + mutable std::atomic_bool Running_=false; }; inline auto ALBHealthCheckServer() { return ALBHealthCheckServer::instance(); } @@ -2982,7 +3006,7 @@ namespace OpenWifi { inline Poco::Net::HTTPRequestHandler *CallServer(const std::string &Path, uint64_t Id) { RESTAPIHandler::BindingMap Bindings; - Poco::Thread::current()->setName(fmt::format("RESTAPI_ExtServer_{}",Id)); + Utils::SetThreadName(fmt::format("rest_ext_{}",Id).c_str()); return RESTAPI_ExtRouter(Path, Bindings, Logger(), Server_, Id); } @@ -3006,7 +3030,7 @@ namespace OpenWifi { inline Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &Request) override { try { Poco::URI uri(Request.getURI()); - Poco::Thread::current()->setName(fmt::format("ExtWebServer_{}",TransactionId_)); + Utils::SetThreadName(fmt::format("rest_ext_{}",TransactionId_).c_str()); return RESTAPI_ExtServer()->CallServer(uri.getPath(), TransactionId_++); } catch (...) { @@ -3115,7 +3139,7 @@ namespace OpenWifi { inline Poco::Net::HTTPRequestHandler *CallServer(const std::string &Path, uint64_t Id) { RESTAPIHandler::BindingMap Bindings; - Poco::Thread::current()->setName(fmt::format("RESTAPI_IntServer_{}",Id)); + Utils::SetThreadName(fmt::format("rest_int_{}",Id).c_str()); return RESTAPI_IntRouter(Path, Bindings, Logger(), Server_, Id); } private: @@ -3524,7 +3548,9 @@ namespace OpenWifi { void DaemonPostInitialization(Poco::Util::Application &self); inline void MicroService::initialize(Poco::Util::Application &self) { - // add the default services + // Utils::SetThreadName("microservice"); + + // add the default services LoadConfigurationFile(); InitializeLoggingSystem(); @@ -3919,6 +3945,7 @@ namespace OpenWifi { inline int MicroService::main([[maybe_unused]] const ArgVec &args) { + // Utils::SetThreadName("main"); MyErrorHandler ErrorHandler(*this); Poco::ErrorHandler::set(&ErrorHandler); @@ -4034,6 +4061,7 @@ namespace OpenWifi { inline void BusEventManager::run() { Running_ = true; + Utils::SetThreadName("BusEventManager"); auto Msg = MicroService::instance().MakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_JOIN); KafkaManager()->PostMessage(KafkaTopics::SERVICE_EVENTS,MicroService::instance().PrivateEndPoint(),Msg, false); while(Running_) { @@ -4119,6 +4147,8 @@ namespace OpenWifi { } inline void KafkaProducer::run() { + + Utils::SetThreadName("KafkaProducer"); cppkafka::Configuration Config({ { "client.id", MicroService::instance().ConfigGetString("openwifi.kafka.client.id") }, { "metadata.broker.list", MicroService::instance().ConfigGetString("openwifi.kafka.brokerlist") } @@ -4157,6 +4187,8 @@ namespace OpenWifi { } inline void KafkaConsumer::run() { + Utils::SetThreadName("KafkaConsumer"); + cppkafka::Configuration Config({ { "client.id", MicroService::instance().ConfigGetString("openwifi.kafka.client.id") }, { "metadata.broker.list", MicroService::instance().ConfigGetString("openwifi.kafka.brokerlist") }, @@ -4815,7 +4847,7 @@ namespace OpenWifi { [[nodiscard]] bool SendToUser(const std::string &userName, const std::string &Payload); void SendToAll(const std::string &Payload); private: - std::atomic_bool Running_ = false; + mutable std::atomic_bool Running_ = false; Poco::Thread Thr_; // std::unique_ptr ReactorPool_; Poco::Net::SocketReactor Reactor_; @@ -4912,6 +4944,7 @@ namespace OpenWifi { inline void WebSocketClientServer::run() { Running_ = true ; + Utils::SetThreadName("ws:clnt-svr"); while(Running_) { Poco::Thread::trySleep(2000);