Merge pull request #32 from Telecominfraproject/WIFI-10004

Fix: https://telecominfraproject.atlassian.net/browse/WIFI-10004
This commit is contained in:
Stephane Bourque
2022-07-01 09:21:12 -07:00
committed by GitHub
12 changed files with 96 additions and 41 deletions

2
build
View File

@@ -1 +1 @@
129
130

View File

@@ -26,6 +26,7 @@ namespace OpenWifi {
void AutoDiscovery::run() {
Poco::AutoPtr<Poco::Notification> Note(Queue_.waitDequeueNotification());
Utils::SetThreadName("auto-discovery");
while(Note && Running_) {
auto Msg = dynamic_cast<DiscoveryMessage *>(Note.get());
if(Msg!= nullptr) {

View File

@@ -26,6 +26,8 @@ namespace OpenWifi {
{"https://ucentral.io/ucentral.schema.pretty.json", "ucentral.schema.pretty.json" }
};
Utils::SetThreadName("file-dmnldr");
for(const auto &[url,filename]:Files) {
try {
std::string FileContent;

View File

@@ -27,7 +27,7 @@ namespace OpenWifi {
void JobController::run() {
Running_ = true ;
Utils::SetThreadName("job-controller");
while(Running_) {
Poco::Thread::trySleep(2000);
}

View File

@@ -42,6 +42,7 @@ namespace OpenWifi {
void Signup::run() {
Running_ = true;
Utils::SetThreadName("signup-mgr");
while(Running_) {
Poco::Thread::trySleep(5000);

View File

@@ -105,6 +105,7 @@ namespace OpenWifi {
}
void Storage::onTimer([[maybe_unused]] Poco::Timer &timer) {
Utils::SetThreadName("strg-janitor");
}
void Storage::Stop() {

View File

@@ -21,7 +21,7 @@ namespace OpenWifi {
}
void TagServer::run() {
Utils::SetThreadName("tag-server");
}
}

View File

@@ -37,6 +37,7 @@ namespace OpenWifi {
void run() final {
ProvObjects::InventoryTag Device;
started_=true;
Utils::SetThreadName("venue-cfg");
if(StorageService()->InventoryDB().GetRecord("id",uuid_,Device)) {
SerialNumber = Device.serialNumber;
// std::cout << "Starting push for " << Device.serialNumber << std::endl;
@@ -66,6 +67,7 @@ namespace OpenWifi {
}
done_ = true;
// std::cout << "Done push for " << Device.serialNumber << std::endl;
Utils::SetThreadName("free");
}
uint64_t updated_=0, failed_=0, bad_config_=0;
@@ -110,6 +112,8 @@ namespace OpenWifi {
inline void run() final {
Utils::SetThreadName("venue-update");
if(When_ && When_>OpenWifi::Now())
Poco::Thread::trySleep( (long) (When_ - OpenWifi::Now()) * 1000 );
@@ -206,6 +210,8 @@ namespace OpenWifi {
WebSocketClientNotificationVenueUpdateJobCompletionToUser(UI_.email, N);
Logger().information(fmt::format("Job {} Completed: {} updated, {} failed to update , {} bad configurations.",
JobId_, Updated ,Failed, BadConfigs));
Utils::SetThreadName("free");
delete this;
}
};

View File

@@ -78,6 +78,8 @@ namespace OpenWifi {
inline void run() final {
Utils::SetThreadName("venue-reboot");
if(When_ && When_>OpenWifi::Now())
Poco::Thread::trySleep( (long) (When_ - OpenWifi::Now()) * 1000 );
@@ -170,6 +172,9 @@ namespace OpenWifi {
WebSocketClientNotificationVenueRebootCompletionToUser(UI_.email,N);
Logger().information(fmt::format("Job {} Completed: {} rebooted, {} failed to reboot.",
JobId_, rebooted_ ,failed_));
Utils::SetThreadName("free");
delete this;
}
};

View File

@@ -99,6 +99,8 @@ namespace OpenWifi {
inline void run() final {
Utils::SetThreadName("venue-upgr");
if(When_ && When_>OpenWifi::Now())
Poco::Thread::trySleep( (long) (When_ - OpenWifi::Now()) * 1000 );
@@ -194,6 +196,8 @@ namespace OpenWifi {
WebSocketClientNotificationVenueRebootCompletionToUser(UI_.email,N);
Logger().information(fmt::format("Job {} Completed: {} upgraded, {} failed to upgrade.",
JobId_, upgraded_ ,failed_));
Utils::SetThreadName("free");
delete this;
}
};

View File

@@ -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<Poco::Notification> Note(Queue_.waitDequeueNotification());
Utils::SetThreadName("kafka-dispatch");
while(Note && Running_) {
auto Msg = dynamic_cast<KafkaMessage*>(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<Poco::Net::HTTPServer> Server_;
std::unique_ptr<Poco::Net::ServerSocket> 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<MyParallelSocketReactor> 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);

View File

@@ -96,40 +96,42 @@ namespace OpenWifi {
void EntityDB::AddVenues(Poco::JSON::Object &Tree, const std::string & Node) {
ProvObjects::Venue E;
// std::cout << "Adding venue:" << Node << std::endl;
StorageService()->VenueDB().GetRecord("id",Node,E);
Poco::JSON::Array Venues;
for(const auto &i:E.children) {
Poco::JSON::Object Venue;
AddVenues(Venue, i);
Venues.add(Venue);
if(StorageService()->VenueDB().GetRecord("id",Node,E)) {
Poco::JSON::Array Venues;
for (const auto &i: E.children) {
Poco::JSON::Object Venue;
AddVenues(Venue, i);
Venues.add(Venue);
}
Tree.set("type", "venue");
Tree.set("name", E.info.name);
Tree.set("uuid", E.info.id);
Tree.set("children", Venues);
}
Tree.set("type","venue");
Tree.set("name",E.info.name);
Tree.set("uuid",E.info.id);
Tree.set("children",Venues);
}
void EntityDB::BuildTree(Poco::JSON::Object &Tree, const std::string & Node) {
ProvObjects::Entity E;
// std::cout << "Adding node:" << Node << std::endl;
StorageService()->EntityDB().GetRecord("id",Node,E);
Poco::JSON::Array Children;
for(const auto &i:E.children) {
Poco::JSON::Object Child;
BuildTree(Child,i);
Children.add(Child);
if(StorageService()->EntityDB().GetRecord("id",Node,E)) {
Poco::JSON::Array Children;
for (const auto &i: E.children) {
Poco::JSON::Object Child;
BuildTree(Child, i);
Children.add(Child);
}
Poco::JSON::Array Venues;
for (const auto &i: E.venues) {
Poco::JSON::Object Venue;
AddVenues(Venue, i);
Venues.add(Venue);
}
Tree.set("type", "entity");
Tree.set("name", E.info.name);
Tree.set("uuid", E.info.id);
Tree.set("children", Children);
Tree.set("venues", Venues);
}
Poco::JSON::Array Venues;
for(const auto &i:E.venues) {
Poco::JSON::Object Venue;
AddVenues(Venue, i);
Venues.add(Venue);
}
Tree.set("type","entity");
Tree.set("name",E.info.name);
Tree.set("uuid",E.info.id);
Tree.set("children",Children);
Tree.set("venues", Venues);
}
void EntityDB::ImportVenues(const Poco::JSON::Object::Ptr &O, const std::string &Parent) {