From a31ee31f2049dedbfe3056805683e095877a30aa Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Thu, 24 Mar 2022 09:07:45 -0700 Subject: [PATCH] Fix timepoint --- .../RESTAPI_board_timepoint_handler.cpp | 32 +++++++++++++++++-- src/storage/storage_timepoints.cpp | 8 ++--- src/storage/storage_timepoints.h | 2 +- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/RESTAPI/RESTAPI_board_timepoint_handler.cpp b/src/RESTAPI/RESTAPI_board_timepoint_handler.cpp index ad1d3f1..05f2412 100644 --- a/src/RESTAPI/RESTAPI_board_timepoint_handler.cpp +++ b/src/RESTAPI/RESTAPI_board_timepoint_handler.cpp @@ -81,7 +81,7 @@ namespace OpenWifi { } AnalyticsObjects::DeviceTimePointList Points; - StorageService()->TimePointsDB().SelectRecords(fromDate, endDate, maxRecords, Points.points); + StorageService()->TimePointsDB().SelectRecords(id,fromDate, endDate, maxRecords, Points.points); // sort by timestamp & serial number. struct { @@ -90,13 +90,39 @@ namespace OpenWifi { if(lhs.device_info.serialNumber > rhs.device_info.serialNumber) return false; return lhs.timestamp < rhs.timestamp; } - } custom_sort; + } DeviceTimePoint_sort; - std::sort( Points.points.begin(), Points.points.end(), custom_sort); + struct { + bool operator()(const AnalyticsObjects::SSIDTimePoint &lhs, const AnalyticsObjects::SSIDTimePoint &rhs) const { + if(lhs.ssid < rhs.ssid) return true; + if(lhs.ssid > rhs.ssid) return false; + return lhs.bssid < rhs.bssid; + } + } SSID_sort; + + struct { + bool operator()(const AnalyticsObjects::UETimePoint &lhs, const AnalyticsObjects::UETimePoint &rhs) const { + if(lhs.station < rhs.station) return true; + return false; + } + } Association_sort; + + std::sort( Points.points.begin(), Points.points.end(), DeviceTimePoint_sort); auto BucketsNeeded = find_number_of_buckets(Points.points); split_points sp; split_in_buckets(BucketsNeeded,Points.points,sp); + // must sort each bucket according to serial number. + for(auto &i:sp) { + std::sort(i.begin(),i.end(),DeviceTimePoint_sort); + // now sort according to UEs within a block + for(auto &j:i) { + std::sort(j.ssid_data.begin(),j.ssid_data.end(),SSID_sort); + for(auto &k:j.ssid_data) { + std::sort(k.associations.begin(),k.associations.end(),Association_sort); + } + } + } Poco::JSON::Object Answer; Poco::JSON::Array Outer; diff --git a/src/storage/storage_timepoints.cpp b/src/storage/storage_timepoints.cpp index 25d8e00..d4c170c 100644 --- a/src/storage/storage_timepoints.cpp +++ b/src/storage/storage_timepoints.cpp @@ -51,15 +51,15 @@ namespace OpenWifi { return true; } - bool TimePointDB::SelectRecords(uint64_t FromDate, uint64_t LastDate, uint64_t MaxRecords, std::vector & Recs ) { + bool TimePointDB::SelectRecords(const std::string &boardId, uint64_t FromDate, uint64_t LastDate, uint64_t MaxRecords, std::vector & Recs ) { std::string WhereClause; if(FromDate && LastDate) { - WhereClause = " (timestamp >= " + std::to_string(FromDate) + ") and ( timestamp <= " + std::to_string(LastDate) + " ) "; + WhereClause = fmt::format(" where boardId='{}' and (timestamp >= {} ) and ( timestamp <= {} ) ", boardId, FromDate, LastDate); } else if (FromDate) { - WhereClause = " (timestamp >= " + std::to_string(FromDate) + ") "; + WhereClause = fmt::format(" where boardId='{}' and (timestamp >= {}) ", boardId, FromDate); } else if (LastDate) { - WhereClause = " ( timestamp <= " + std::to_string(LastDate) + " ) "; + WhereClause = fmt::format(" where boardId='{}' and (timestamp <= {}) ", boardId, LastDate); } GetRecords(0,MaxRecords,Recs,WhereClause," order by timestamp ASC "); return true; diff --git a/src/storage/storage_timepoints.h b/src/storage/storage_timepoints.h index 2fe5ffa..95ba1f0 100644 --- a/src/storage/storage_timepoints.h +++ b/src/storage/storage_timepoints.h @@ -22,7 +22,7 @@ namespace OpenWifi { public: TimePointDB( OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L); bool GetStats(const std::string &id, AnalyticsObjects::DeviceTimePointStats &S); - bool SelectRecords(uint64_t FromDate, uint64_t LastDate, uint64_t MaxRecords, DB::RecordVec & Recs); + bool SelectRecords(const std::string &boardId, uint64_t FromDate, uint64_t LastDate, uint64_t MaxRecords, DB::RecordVec & Recs); private: bool Upgrade(uint32_t from, uint32_t &to) override; };