Access to Measures from REST API

Part 4 of #2588
This commit is contained in:
Alejandro Martinez
2017-11-19 00:13:28 -03:00
parent b984c340ba
commit 83340aa148
3 changed files with 86 additions and 0 deletions

View File

@@ -31,3 +31,8 @@ http://localhost:12021 Default base URL
before=yyyy/mm/dd
series=xxx where xxx is one of watts,hr,cad,speed,nm,vam.xPower,NP
Returns an aggregate of the best mean maximal values over the date range
/<athlete>/measures List supported measures groups (Body/Hrv for now)
/<athlete>/measures/<group> Fetch Measures from <group> for a Date Range
since=yyyy/mm/dd
before=yyyy/mm/dd

View File

@@ -29,6 +29,7 @@
#include "Zones.h"
#include "HrZones.h"
#include "PaceZones.h"
#include "Measures.h"
#include <QTemporaryFile>
#include <QFile>
@@ -98,6 +99,15 @@ APIWebService::athleteData(QStringList &paths, HttpRequest &request, HttpRespons
return;
}
// GET Measures
if (paths[0] == "measures") {
// http://localhost:12021/athlete/measures
paths.removeFirst();
listMeasures(athlete, paths, request, response);
return;
}
} else if (paths.count() == 3) {
QString athlete = paths[0];
@@ -131,6 +141,16 @@ APIWebService::athleteData(QStringList &paths, HttpRequest &request, HttpRespons
return;
}
// GET Measures
if (paths[0] == "measures") {
// http://localhost:12021/athlete/measures/Body
// http://localhost:12021/athlete/measures/Hrv
paths.removeFirst();
listMeasures(athlete, paths, request, response);
return;
}
}
// GET HERE ITS BAD!
@@ -606,3 +626,63 @@ APIWebService::listZones(QString athlete, QStringList, HttpRequest &request, Htt
return;
}
}
void
APIWebService::listMeasures(QString athlete, QStringList paths, HttpRequest &request, HttpResponse &response)
{
// list activities and associated metrics
response.setHeader("Content-Type", "text; charset=ISO-8859-1");
if (paths.isEmpty()) {
foreach (QString group, Measures().getGroupSymbols()) {
response.write(group.toLocal8Bit());
response.write("\n");
}
return;
}
Measures measures = Measures(QDir(home.absolutePath() + "/" + athlete + "/config"), true);
int group_index = measures.getGroupSymbols().indexOf(paths[0]);
MeasuresGroup* measuresGroup = measures.getGroup(group_index);
if (group_index < 0 || measuresGroup == NULL) {
// unknown group
response.setStatus(500);
response.write("unknown measures group requested.\n");
return;
}
response.write("Date");
QStringList field_symbols = measuresGroup->getFieldSymbols();
for (int i=0; i<field_symbols.count(); i++) {
response.write(", ");
response.write(field_symbols[i].toLocal8Bit());
}
// honour the since parameter
QString sincep(request.getParameter("since"));
QDate since(1900,01,01);
if (sincep != "") since = QDate::fromString(sincep,"yyyy/MM/dd");
QDate date = measuresGroup->getStartDate();
if (since > date) date = since;
// before parameter
QString beforep(request.getParameter("before"));
QDate before(3000,01,01);
if (beforep != "") before = QDate::fromString(beforep,"yyyy/MM/dd");
QDate endDate = measuresGroup->getEndDate();
if (before < endDate) endDate = before;
while (date <= endDate) {
response.write("\n");
response.write(date.toString("yyyy/MM/dd").toLocal8Bit());
for (int i=0; i<field_symbols.count(); i++)
response.write(QString(", %1").arg(measuresGroup->getFieldValue(date, i)).toLocal8Bit());
date = date.addDays(1);
}
response.write("\n");
}

View File

@@ -49,6 +49,7 @@ class APIWebService : public HttpRequestHandler
void listActivity(QString athlete, QStringList paths, HttpRequest &request, HttpResponse &response);
void listMMP(QString athlete, QStringList paths, HttpRequest &request, HttpResponse &response);
void listZones(QString athlete, QStringList paths, HttpRequest &request, HttpResponse &response);
void listMeasures(QString athlete, QStringList paths, HttpRequest &request, HttpResponse &response);
// utility
void writeRideLine(RideItem &item, HttpRequest *request, HttpResponse *response);