diff --git a/doc/user/rest-api.txt b/doc/user/rest-api.txt index f7eed3a34..e8e03072f 100644 --- a/doc/user/rest-api.txt +++ b/doc/user/rest-api.txt @@ -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 + +//measures List supported measures groups (Body/Hrv for now) +//measures/ Fetch Measures from for a Date Range + since=yyyy/mm/dd + before=yyyy/mm/dd diff --git a/src/Core/APIWebService.cpp b/src/Core/APIWebService.cpp index 6f5b347de..1d9a51847 100644 --- a/src/Core/APIWebService.cpp +++ b/src/Core/APIWebService.cpp @@ -29,6 +29,7 @@ #include "Zones.h" #include "HrZones.h" #include "PaceZones.h" +#include "Measures.h" #include #include @@ -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; igetStartDate(); + 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; igetFieldValue(date, i)).toLocal8Bit()); + + date = date.addDays(1); + } + response.write("\n"); + +} diff --git a/src/Core/APIWebService.h b/src/Core/APIWebService.h index b757c906c..46de6daf7 100644 --- a/src/Core/APIWebService.h +++ b/src/Core/APIWebService.h @@ -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);