stephb9959
2022-08-10 23:07:05 -07:00
parent 8dc3e53fc0
commit d5b4d15307
5 changed files with 37 additions and 12 deletions

2
build
View File

@@ -1 +1 @@
5
6

View File

@@ -90,7 +90,7 @@ namespace OpenWifi {
}
if(StorageService()->BoardsDB().UpdateRecord("id",Existing.info.id,Existing)) {
VenueCoordinator()->ModifyBoard(Existing.info.id);
VenueCoordinator()->UpdateBoard(Existing.info.id);
AnalyticsObjects::BoardInfo NewBoard;
StorageService()->BoardsDB().GetRecord("id",Existing.info.id,NewBoard);
Poco::JSON::Object Answer;

View File

@@ -13,9 +13,25 @@ namespace OpenWifi {
int VenueCoordinator::Start() {
GetBoardList();
Worker_.start(*this);
ReconcileTimerCallback_ = std::make_unique<Poco::TimerCallback<VenueCoordinator>>(*this,&VenueCoordinator::onReconcileTimer);
ReconcileTimerTimer_.setStartInterval( 3 * 60 * 1000 );
ReconcileTimerTimer_.setPeriodicInterval(3 * 60 * 1000); // 1 hours
ReconcileTimerTimer_.start(*ReconcileTimerCallback_, MicroService::instance().TimerPool());
return 0;
}
void VenueCoordinator::onReconcileTimer([[maybe_unused]] Poco::Timer &timer) {
std::lock_guard G(Mutex_);
Logger().information("Starting to reconcile board information.");
for(const auto &[board_id, watcher]:Watchers_) {
UpdateBoard(board_id);
}
Logger().information("Finished reconciling board information.");
}
void VenueCoordinator::GetBoardList() {
BoardsToWatch_.clear();
auto F = [&](const AnalyticsObjects::BoardInfo &B) ->bool {
@@ -121,7 +137,7 @@ namespace OpenWifi {
}
}
void VenueCoordinator::ModifyBoard(const std::string &id) {
void VenueCoordinator::UpdateBoard(const std::string &id) {
AnalyticsObjects::BoardInfo B;
if(StorageService()->BoardsDB().GetRecord("id",id,B)) {
std::vector<uint64_t> Devices;

View File

@@ -3,9 +3,12 @@
//
#pragma once
#include "framework/MicroService.h"
#include "VenueWatcher.h"
#include "Poco/Timer.h"
namespace OpenWifi {
class VenueCoordinator : public SubSystemServer, Poco::Runnable {
@@ -21,7 +24,7 @@ namespace OpenWifi {
void run() override;
void StopBoard(const std::string &id);
void ModifyBoard(const std::string &id);
void UpdateBoard(const std::string &id);
void AddBoard(const std::string &id);
bool GetDevicesForBoard(const AnalyticsObjects::BoardInfo &B, std::vector<uint64_t> & Devices, bool & VenueExists);
@@ -30,13 +33,17 @@ namespace OpenWifi {
bool Watching(const std::string &id);
void RetireBoard(const AnalyticsObjects::BoardInfo &B);
private:
Poco::Thread Worker_;
std::atomic_bool Running_=false;
std::set<AnalyticsObjects::BoardInfo> BoardsToWatch_;
std::map<std::string,std::shared_ptr<VenueWatcher>> Watchers_;
void onReconcileTimer(Poco::Timer & timer);
std::map<std::string,std::vector<uint64_t>> ExistingBoards_;
private:
Poco::Thread Worker_;
std::atomic_bool Running_=false;
std::set<AnalyticsObjects::BoardInfo> BoardsToWatch_;
std::map<std::string,std::shared_ptr<VenueWatcher>> Watchers_;
std::unique_ptr<Poco::TimerCallback<VenueCoordinator>> ReconcileTimerCallback_;
Poco::Timer ReconcileTimerTimer_;
std::map<std::string,std::vector<uint64_t>> ExistingBoards_;
VenueCoordinator() noexcept:
SubSystemServer("VenueCoordinator", "VENUE-COORD", "venue.coordinator")

View File

@@ -69,9 +69,11 @@ namespace OpenWifi {
void GetDevices(std::vector<AnalyticsObjects::DeviceInfo> & DI);
void GetBandwidth(uint64_t start, uint64_t end, uint64_t interval , AnalyticsObjects::BandwidthAnalysis & BW);
inline std::string Venue() const {
return venue_id_;
}
private:
std::recursive_mutex Mutex_;
std::mutex Mutex_;
std::string boardId_;
std::string venue_id_;
Poco::NotificationQueue Queue_;