Adding options for returning statistics and points.

This commit is contained in:
stephb9959
2022-03-27 09:27:03 -07:00
parent cbb40a4938
commit 5fb0dc7ffa
2 changed files with 64 additions and 51 deletions

View File

@@ -81,9 +81,7 @@ namespace OpenWifi {
}
void RESTAPI_board_timepoint_handler::DoGet() {
auto id = GetBinding("id","");
if(id.empty()) {
return BadRequest(RESTAPI::Errors::MissingUUID);
}
@@ -96,9 +94,11 @@ namespace OpenWifi {
auto fromDate = GetParameter("fromDate",0);
auto endDate = GetParameter("endDate",0);
auto maxRecords = GetParameter("maxRecords",100);
auto stats = GetBoolParameter("stats");
auto statsOnly = GetBoolParameter("statsOnly");
auto pointsOnly = GetBoolParameter("pointsOnly");
auto pointsStatsOnly = GetBoolParameter("pointsStatsOnly");
if(stats) {
if(statsOnly) {
AnalyticsObjects::DeviceTimePointStats DTPS;
Poco::JSON::Object Answer;
DB_.GetStats(id,DTPS);
@@ -106,8 +106,8 @@ namespace OpenWifi {
return ReturnObject(Answer);
}
AnalyticsObjects::DeviceTimePointList Points;
StorageService()->TimePointsDB().SelectRecords(id,fromDate, endDate, maxRecords, Points.points);
auto Points = std::make_unique<AnalyticsObjects::DeviceTimePointList>();
StorageService()->TimePointsDB().SelectRecords(id,fromDate, endDate, maxRecords, Points->points);
// sort by timestamp & serial number.
struct {
@@ -133,13 +133,13 @@ namespace OpenWifi {
}
} Association_sort;
std::sort( Points.points.begin(), Points.points.end(), DeviceTimePoint_sort);
auto BucketsNeeded = find_number_of_buckets(Points.points);
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);
auto sp = std::make_unique<split_points>();
split_in_buckets(BucketsNeeded,Points->points, *sp);
// must sort each bucket according to serial number.
for(auto &i:sp) {
for(auto &i: *sp) {
std::sort(i.begin(),i.end(),DeviceTimePoint_sort);
// now sort according to UEs within a block
for(auto &j:i) {
@@ -150,56 +150,57 @@ namespace OpenWifi {
}
}
Poco::JSON::Object Answer;
Poco::JSON::Array Points_OuterArray;
for(const auto &point_list:sp) {
Poco::JSON::Array Points_InnerArray;
for(const auto &point:point_list) {
Poco::JSON::Object O;
point.to_json(O);
Points_InnerArray.add(O);
auto Answer = std::make_unique<Poco::JSON::Object>();
if(!pointsStatsOnly) {
auto Points_OuterArray = std::make_unique<Poco::JSON::Array>();
for (const auto &point_list:*sp) {
Poco::JSON::Array Points_InnerArray;
for (const auto &point: point_list) {
Poco::JSON::Object O;
point.to_json(O);
Points_InnerArray.add(O);
}
Points_OuterArray->add(Points_InnerArray);
}
Points_OuterArray.add(Points_InnerArray);
Answer->set("points",*Points_OuterArray);
}
// calculate the stats for each time slot
Poco::JSON::Array Stats_Array;
for(const auto &point_list:sp) {
AnalyticsObjects::DeviceTimePointAnalysis DTPA;
if(!pointsOnly) {
auto Stats_Array = std::make_unique<Poco::JSON::Array>();
for (const auto &point_list:*sp) {
AnalyticsObjects::DeviceTimePointAnalysis DTPA;
DTPA.timestamp = point_list[0].timestamp;
AverageAPData(&AnalyticsObjects::APTimePoint::tx_bytes_bw,point_list,DTPA.tx_bytes_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_bytes_bw,point_list,DTPA.rx_bytes_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_dropped_pct,point_list,DTPA.rx_dropped_pct);
AverageAPData(&AnalyticsObjects::APTimePoint::tx_dropped_pct,point_list,DTPA.tx_dropped_pct);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_packets_bw,point_list,DTPA.rx_packets_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::tx_packets_bw,point_list,DTPA.tx_packets_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_errors_pct,point_list,DTPA.rx_errors_pct);
AverageAPData(&AnalyticsObjects::APTimePoint::tx_errors_pct,point_list,DTPA.tx_errors_pct);
DTPA.timestamp = point_list[0].timestamp;
AverageAPData(&AnalyticsObjects::APTimePoint::tx_bytes_bw, point_list, DTPA.tx_bytes_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_bytes_bw, point_list, DTPA.rx_bytes_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_dropped_pct, point_list, DTPA.rx_dropped_pct);
AverageAPData(&AnalyticsObjects::APTimePoint::tx_dropped_pct, point_list, DTPA.tx_dropped_pct);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_packets_bw, point_list, DTPA.rx_packets_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::tx_packets_bw, point_list, DTPA.tx_packets_bw);
AverageAPData(&AnalyticsObjects::APTimePoint::rx_errors_pct, point_list, DTPA.rx_errors_pct);
AverageAPData(&AnalyticsObjects::APTimePoint::tx_errors_pct, point_list, DTPA.tx_errors_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::noise, point_list, DTPA.noise);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::tx_power, point_list, DTPA.tx_power);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::active_pct, point_list, DTPA.active_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::busy_pct, point_list, DTPA.busy_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::receive_pct, point_list, DTPA.receive_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::transmit_pct, point_list, DTPA.transmit_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::noise, point_list, DTPA.noise);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::tx_power, point_list, DTPA.tx_power);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::active_pct, point_list, DTPA.active_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::busy_pct, point_list, DTPA.busy_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::receive_pct, point_list, DTPA.receive_pct);
AverageRadioData(&AnalyticsObjects::RadioTimePoint::transmit_pct, point_list, DTPA.transmit_pct);
Poco::JSON::Object Stats_point;
DTPA.to_json(Stats_point);
Stats_Array.add(Stats_point);
Poco::JSON::Object Stats_point;
DTPA.to_json(Stats_point);
Stats_Array->add(Stats_point);
}
Answer->set("stats", *Stats_Array);
}
Answer.set("points",Points_OuterArray);
Answer.set("stats",Stats_Array);
/* static int f=0;
std::ostringstream OO;
Answer.stringify(OO);
std::ofstream of("msg"+std::to_string(f++)+".json", std::ios_base::trunc );
of << OO.str();
*/
return ReturnObject(Answer);
return ReturnObject(*Answer);
}
}