Skip to content

Commit

Permalink
changes into exec time measurement
Browse files Browse the repository at this point in the history
  • Loading branch information
vershov committed Feb 19, 2014
1 parent 4efcca3 commit 0f15054
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 94 deletions.
3 changes: 2 additions & 1 deletion Descriptors/GPXDescriptor.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,9 @@ class GPXDescriptor : public BaseDescriptor<DataFacadeT> {
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
"xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 gpx.xsd"
"\">");
reply.content.push_back("<metadata>");
reply.content.push_back(
"<metadata><copyright author=\"Project OSRM\"><license>Data (c)"
"<copyright author=\"Project OSRM\"><license>Data (c)"
" OpenStreetMap contributors (ODbL)</license></copyright>"
"</metadata>");
reply.content.push_back("<rte>");
Expand Down
5 changes: 2 additions & 3 deletions Descriptors/JSONDescriptor.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,8 @@ class JSONDescriptor : public BaseDescriptor<DataFacadeT> {
http::Reply & reply
) {
facade = f;
reply.content.push_back(
"{\"status\":"
);
reply.content.push_back("{");
reply.content.push_back("\"status\":");

if(INT_MAX == raw_route.lengthOfShortestPath) {
//We do not need to do much, if there is no route ;-)
Expand Down
9 changes: 5 additions & 4 deletions Include/osrm/RouteParameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ struct RouteParameters {
geometry(true),
compression(true),
deprecatedAPI(false),
exec_time(false),
measurement(false),
checkSum(-1)
{ }
Expand All @@ -55,7 +56,7 @@ struct RouteParameters {
bool geometry;
bool compression;
bool deprecatedAPI;
bool measurement;
bool exec_time;
unsigned checkSum;
std::string service;
std::string outputFormat;
Expand All @@ -78,9 +79,9 @@ struct RouteParameters {
deprecatedAPI = true;
}

void setMeasurementFlag(const bool b) {
measurement = b;
}
void setExecTimeFlag(const bool b) {
exec_time = b;
}

void setChecksum(const unsigned c) {
checkSum = c;
Expand Down
17 changes: 9 additions & 8 deletions Plugins/NearestPlugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "BasePlugin.h"
#include "../DataStructures/PhantomNodes.h"
#include "../Util/StringUtil.h"
#include "../Util/TimeMeasurement.h"
#include "../Util/TimingUtil.h"

#include <boost/unordered_map.hpp>

Expand Down Expand Up @@ -66,15 +66,15 @@ class NearestPlugin : public BasePlugin {
return;
}

TimeMeasurement measure;
TimeMeasurement exec_time;
PhantomNode result;
facade->FindPhantomNodeForCoordinate(
routeParameters.coordinates[0],
result,
routeParameters.zoomLevel
);

int64_t time_ms = measure.toNow();
int64_t time_ms = exec_time.toNowInMs();

std::string temp_string;
//json
Expand All @@ -85,16 +85,17 @@ class NearestPlugin : public BasePlugin {
}

reply.status = http::Reply::ok;
reply.content.push_back("{\"status\":");
reply.content.push_back("{");
if (routeParameters.exec_time) {
int64ToString(time_ms, temp_string);
reply.content.push_back("\"exec_time_ms\":" + temp_string + ",");
}
reply.content.push_back("\"status\":");
if(UINT_MAX != result.edgeBasedNode) {
reply.content.push_back("0,");
} else {
reply.content.push_back("207,");
}
if (routeParameters.measurement) {
int64ToString(time_ms, temp_string);
reply.content.push_back("\"measurement_ms\":" + temp_string + ",");
}
reply.content.push_back("\"mapped_coordinate\":[");
if(UINT_MAX != result.edgeBasedNode) {
FixedPointCoordinate::convertInternalLatLonToString(result.location.lat, temp_string);
Expand Down
48 changes: 24 additions & 24 deletions Plugins/ViaRoutePlugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "../Descriptors/JSONDescriptor.h"
#include "../Util/SimpleLogger.h"
#include "../Util/StringUtil.h"
#include "../Util/TimeMeasurement.h"
#include "../Util/TimingUtil.h"

#include <boost/unordered_map.hpp>

Expand All @@ -47,14 +47,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <string>
#include <vector>

static bool IsTransactionStr (const std::string &s) {
static std::string trans("transactionId");
if (s.size() < trans.size()) {
return false;
}
return (0 == s.compare(1, trans.size(), trans));
}

template<class DataFacadeT>
class ViaRoutePlugin : public BasePlugin {
private:
Expand Down Expand Up @@ -90,7 +82,7 @@ class ViaRoutePlugin : public BasePlugin {
return;
}

TimeMeasurement measure;
TimeMeasurement exec_time;
RawRouteData rawRoute;
rawRoute.checkSum = facade->GetCheckSum();
const bool checksumOK = (routeParameters.checkSum == rawRoute.checkSum);
Expand Down Expand Up @@ -166,17 +158,16 @@ class ViaRoutePlugin : public BasePlugin {
descriptorConfig.geometry = routeParameters.geometry;
descriptorConfig.encode_geometry = routeParameters.compression;

std::string exec_time_token;
switch(descriptorType){
case 0:
desc = new JSONDescriptor<DataFacadeT>();

break;
case 1:
desc = new GPXDescriptor<DataFacadeT>();

exec_time_token = "<metadata>";
break;
case 0:
default:
desc = new JSONDescriptor<DataFacadeT>();
exec_time_token = "{";

break;
}
Expand All @@ -188,15 +179,24 @@ class ViaRoutePlugin : public BasePlugin {

desc->Run(rawRoute, phantomNodes, facade, reply);

if (routeParameters.measurement) {
int64_t time_ms = measure.toNow();
std::vector<std::string>::iterator it = std::find_if(reply.content.begin(), reply.content.end(), IsTransactionStr);
if (it != reply.content.end()) {
std::string temp_string;
int64ToString(time_ms, temp_string);
reply.content.insert(it, "\"measurement_ms\":" + temp_string + ",");
}
}
if (routeParameters.exec_time) {
int64_t time_ms = exec_time.toNowInMs();
std::vector<std::string>::iterator it = reply.content.begin();
for (; it != reply.content.end(); ++it) {
if (0 == (*it).compare(0, exec_time_token.size(), exec_time_token)) {
break; // we have found place to insert exec time metric
}
}
if (it != reply.content.end()) {
std::string temp_string;
int64ToString(time_ms, temp_string);
reply.content.insert(++it, (1 == descriptorType)?
"<exec_time_ms>" + temp_string + "</exec_time_ms>" : "\"exec_time_ms\":" + temp_string + ","
);
} else {
SimpleLogger().Write(logDEBUG) << "Can't find place to insert exec time metric";
}
}
if("" != routeParameters.jsonpParameter) {
reply.content.push_back(")\n");
}
Expand Down
6 changes: 3 additions & 3 deletions Server/APIGrammar.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ template <typename Iterator, class HandlerT>
struct APIGrammar : qi::grammar<Iterator> {
APIGrammar(HandlerT * h) : APIGrammar::base_type(api_call), handler(h) {
api_call = qi::lit('/') >> string[boost::bind(&HandlerT::setService, handler, ::_1)] >> *(query);
query = ('?') >> (+(zoom | output | jsonp | checksum | location | hint | cmp | language | instruction | geometry | alt_route | old_API | measurement) ) ;
query = ('?') >> (+(zoom | output | jsonp | checksum | location | hint | cmp | language | instruction | geometry | alt_route | old_API | exec_time) ) ;

zoom = (-qi::lit('&')) >> qi::lit('z') >> '=' >> qi::short_[boost::bind(&HandlerT::setZoomLevel, handler, ::_1)];
output = (-qi::lit('&')) >> qi::lit("output") >> '=' >> string[boost::bind(&HandlerT::setOutputFormat, handler, ::_1)];
Expand All @@ -52,7 +52,7 @@ struct APIGrammar : qi::grammar<Iterator> {
language = (-qi::lit('&')) >> qi::lit("hl") >> '=' >> string[boost::bind(&HandlerT::setLanguage, handler, ::_1)];
alt_route = (-qi::lit('&')) >> qi::lit("alt") >> '=' >> qi::bool_[boost::bind(&HandlerT::setAlternateRouteFlag, handler, ::_1)];
old_API = (-qi::lit('&')) >> qi::lit("geomformat") >> '=' >> string[boost::bind(&HandlerT::setDeprecatedAPIFlag, handler, ::_1)];
measurement = (-qi::lit('&')) >> qi::lit("measurement") >> '=' >> qi::bool_[boost::bind(&HandlerT::setMeasurementFlag, handler, ::_1)];
exec_time = (-qi::lit('&')) >> qi::lit("exec_time") >> '=' >> qi::bool_[boost::bind(&HandlerT::setExecTimeFlag, handler, ::_1)];

string = +(qi::char_("a-zA-Z"));
stringwithDot = +(qi::char_("a-zA-Z0-9_.-"));
Expand All @@ -62,7 +62,7 @@ struct APIGrammar : qi::grammar<Iterator> {
qi::rule<Iterator> api_call, query;
qi::rule<Iterator, std::string()> service, zoom, output, string, jsonp, checksum, location, hint,
stringwithDot, stringwithPercent, language, instruction, geometry,
cmp, alt_route, old_API, measurement;
cmp, alt_route, old_API, exec_time;

HandlerT * handler;
};
Expand Down
51 changes: 0 additions & 51 deletions Util/TimeMeasurement.h

This file was deleted.

25 changes: 25 additions & 0 deletions Util/TimingUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef TIMINGUTIL_H_
#define TIMINGUTIL_H_

#include "../typedefs.h"

#include <boost/date_time/posix_time/posix_time.hpp>

// excluded as this requires boost 1.47 (for now)
// #include <boost/chrono.hpp>
// #include <boost/timer/timer.hpp>
Expand Down Expand Up @@ -68,4 +72,25 @@ static inline double get_timestamp() {
return double(tp.tv_sec) + tp.tv_usec / 1000000.;
}

class TimeMeasurement {
public:
TimeMeasurement() throw() { fromNow(); }
inline void fromNow() throw() {
m_from = boost::posix_time::microsec_clock::local_time();
}
// get time period from the fromNow() func. calling to now in milliseconds
inline int64_t toNowInMs() const throw() {
boost::posix_time::time_duration diff = boost::posix_time::microsec_clock::local_time() - m_from;
return diff.total_milliseconds();
}
// get time period from the fromNow() func. calling to now in seconds
inline int64_t toNowInSec() const throw() {
boost::posix_time::time_duration diff = boost::posix_time::microsec_clock::local_time() - m_from;
return diff.total_seconds();
}

private:
boost::posix_time::ptime m_from;
};

#endif /* TIMINGUTIL_H_ */

0 comments on commit 0f15054

Please sign in to comment.