|
@@ -117,33 +117,43 @@ const std::string TeBkUmLpqAsyncRouter::FORTUNE_ALL_QUERY = "select id,message f
|
|
|
std::unordered_map<int, std::string> TeBkUmLpqAsyncRouter::_qC;
|
|
|
int TeBkUmLpqAsyncRouter::g_seed = 0;
|
|
|
|
|
|
-void TeBkUmLpqAsyncRouter::dbAsync(SocketInterface* sif) {
|
|
|
+void TeBkUmLpqAsyncRouter::dbAsync(BaseSocket* sif) {
|
|
|
LibpqDataSourceImpl* sqli = getDb(5);
|
|
|
int rid = CommonUtils::fastrand(g_seed) % 10000 + 1;
|
|
|
LibpqAsyncReq* areq = sqli->getAsyncRequest();
|
|
|
LibpqQuery* q = areq->getQuery();
|
|
|
q->withParamInt4(rid);
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
q->withSelectQuery(WORLD_ONE_QUERY).withContext(sif).withCb0([](void* ctx, PGresult* res) {
|
|
|
- SocketInterface* sif = (SocketInterface*)ctx;
|
|
|
+ BaseSocket* sif = (BaseSocket*)ctx;
|
|
|
|
|
|
- TeBkUmLpqAsyncWorld w;
|
|
|
+ TeBkUmLpqAsyncWorld wo;
|
|
|
int cols = PQnfields(res);
|
|
|
for (int j = 0; j < cols; ++j) {
|
|
|
- if(j==0)w.setId(ntohl(*((uint32_t *) PQgetvalue(res, 0, j))));
|
|
|
- else w.setRandomNumber(ntohl(*((uint32_t *) PQgetvalue(res, 0, j))));
|
|
|
+ if(j==0)wo.setId(ntohl(*((uint32_t *) PQgetvalue(res, 0, j))));
|
|
|
+ else wo.setRandomNumber(ntohl(*((uint32_t *) PQgetvalue(res, 0, j))));
|
|
|
}
|
|
|
|
|
|
HttpResponse r;
|
|
|
- JSONSerialize::serializeObject(&w, w_ser, r.getContentP());
|
|
|
std::string h;
|
|
|
- r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ wo.toJson(w);
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObject(&wo, w_ser, r.getContentP());
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON);
|
|
|
sif->writeDirect(h, r.getContent());
|
|
|
+#endif
|
|
|
sif->unUse();
|
|
|
});
|
|
|
+#endif
|
|
|
sqli->postAsync(areq);
|
|
|
}
|
|
|
|
|
|
-void TeBkUmLpqAsyncRouter::queriesAsync(const char* q, int ql, SocketInterface* sif) {
|
|
|
+void TeBkUmLpqAsyncRouter::queriesAsync(const char* q, int ql, BaseSocket* sif) {
|
|
|
int queryCount = 0;
|
|
|
CommonUtils::fastStrToNum(q, ql, queryCount);
|
|
|
queryCount = std::max(1, std::min(queryCount, 500));
|
|
@@ -156,8 +166,9 @@ void TeBkUmLpqAsyncRouter::queriesAsync(const char* q, int ql, SocketInterface*
|
|
|
q->withParamInt4(rid);
|
|
|
q->withSelectQuery(WORLD_ONE_QUERY);
|
|
|
}
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
areq->withFinalCb(sif, [](void* ctx, bool status, std::vector<PGresult*>* results, const std::string& q, int counter) {
|
|
|
- SocketInterface* sif = (SocketInterface*)ctx;
|
|
|
+ BaseSocket* sif = (BaseSocket*)ctx;
|
|
|
std::vector<TeBkUmLpqAsyncWorld> vec;
|
|
|
vec.reserve((int)results->size());
|
|
|
for (int i = 0; i < (int)results->size(); ++i) {
|
|
@@ -170,16 +181,25 @@ void TeBkUmLpqAsyncRouter::queriesAsync(const char* q, int ql, SocketInterface*
|
|
|
}
|
|
|
|
|
|
HttpResponse r;
|
|
|
- JSONSerialize::serializeObjectCont(&vec, wcont_ser, "vector", r.getContentP());
|
|
|
std::string h;
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ TeBkUmLpqAsyncWorld::toJson(vec, w);
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObjectCont(&vec, wcont_ser, "vector", r.getContentP());
|
|
|
r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
sif->writeDirect(h, r.getContent());
|
|
|
+#endif
|
|
|
sif->unUse();
|
|
|
});
|
|
|
+#endif
|
|
|
sqli->postAsync(areq);
|
|
|
}
|
|
|
|
|
|
-void TeBkUmLpqAsyncRouter::queriesMultiAsync(const char* q, int ql, SocketInterface* sif) {
|
|
|
+void TeBkUmLpqAsyncRouter::queriesMultiAsync(const char* q, int ql, BaseSocket* sif) {
|
|
|
int queryCount = 0;
|
|
|
CommonUtils::fastStrToNum(q, ql, queryCount);
|
|
|
queryCount = std::max(1, std::min(queryCount, 500));
|
|
@@ -195,9 +215,9 @@ void TeBkUmLpqAsyncRouter::queriesMultiAsync(const char* q, int ql, SocketInterf
|
|
|
LibpqAsyncReq* areq = sqli->getAsyncRequest();
|
|
|
LibpqQuery* qu = areq->getQuery();
|
|
|
qu->withSelectQuery(ss.str()).withMulti();
|
|
|
-
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
areq->withFinalCb(sif, [](void* ctx, bool status, std::vector<PGresult*>* results, const std::string& q, int counter) {
|
|
|
- SocketInterface* sif = (SocketInterface*)ctx;
|
|
|
+ BaseSocket* sif = (BaseSocket*)ctx;
|
|
|
std::vector<TeBkUmLpqAsyncWorld> vec;
|
|
|
vec.reserve((int)results->size());
|
|
|
for (int i = 0; i < (int)results->size(); ++i) {
|
|
@@ -212,12 +232,21 @@ void TeBkUmLpqAsyncRouter::queriesMultiAsync(const char* q, int ql, SocketInterf
|
|
|
}
|
|
|
|
|
|
HttpResponse r;
|
|
|
- JSONSerialize::serializeObjectCont(&vec, wcont_ser, "vector", r.getContentP());
|
|
|
std::string h;
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ TeBkUmLpqAsyncWorld::toJson(vec, w);
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObjectCont(&vec, wcont_ser, "vector", r.getContentP());
|
|
|
r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
sif->writeDirect(h, r.getContent());
|
|
|
+#endif
|
|
|
sif->unUse();
|
|
|
});
|
|
|
+#endif
|
|
|
sqli->postAsync(areq, queryCount);
|
|
|
}
|
|
|
|
|
@@ -239,7 +268,7 @@ void TeBkUmLpqAsyncRouter::updatesMulti(const char* q, int ql, AsyncUpdatesReq*
|
|
|
LibpqAsyncReq* areq = req->sqli->getAsyncRequest();
|
|
|
LibpqQuery* qu = areq->getQuery();
|
|
|
qu->withSelectQuery(ss.str()).withMulti();
|
|
|
-
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
areq->withFinalCb(req, [](void* ctx, bool status, std::vector<PGresult*>* results, const std::string& q, int counter) {
|
|
|
AsyncUpdatesReq* req = (AsyncUpdatesReq*)ctx;
|
|
|
if(status) {
|
|
@@ -276,10 +305,18 @@ void TeBkUmLpqAsyncRouter::updatesMulti(const char* q, int ql, AsyncUpdatesReq*
|
|
|
AsyncUpdatesReq* req = (AsyncUpdatesReq*)ctx;
|
|
|
if(status) {
|
|
|
HttpResponse r;
|
|
|
- JSONSerialize::serializeObjectCont(&req->vec, wcont_ser, "vector", r.getContentP());
|
|
|
std::string h;
|
|
|
- r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, req->httpVers, req->conn_clos);
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ TeBkUmLpqAsyncWorld::toJson(req->vec, w);
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ req->sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObjectCont(&req->vec, wcont_ser, "vector", r.getContentP());
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
req->sif->writeDirect(h, r.getContent());
|
|
|
+#endif
|
|
|
} else {
|
|
|
HttpResponse r;
|
|
|
std::string h;
|
|
@@ -292,6 +329,7 @@ void TeBkUmLpqAsyncRouter::updatesMulti(const char* q, int ql, AsyncUpdatesReq*
|
|
|
req->sqli->postAsync(areq, queryCount*3);
|
|
|
}
|
|
|
});
|
|
|
+#endif
|
|
|
req->sqli->postAsync(areq, queryCount);
|
|
|
}
|
|
|
|
|
@@ -337,6 +375,7 @@ void TeBkUmLpqAsyncRouter::updatesAsyncb(const char* q, int ql, AsyncUpdatesReq*
|
|
|
q->withParamInt4(rid);
|
|
|
q->withSelectQuery(WORLD_ONE_QUERY);
|
|
|
}
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
areq->withFinalCb(req, [](void* ctx, bool status, std::vector<PGresult*>* results, const std::string& query, int counter) {
|
|
|
AsyncUpdatesReq* req = (AsyncUpdatesReq*)ctx;
|
|
|
|
|
@@ -377,10 +416,18 @@ void TeBkUmLpqAsyncRouter::updatesAsyncb(const char* q, int ql, AsyncUpdatesReq*
|
|
|
AsyncUpdatesReq* req = (AsyncUpdatesReq*)ctx;
|
|
|
if(status) {
|
|
|
HttpResponse r;
|
|
|
- JSONSerialize::serializeObjectCont(&req->vec, wcont_ser, "vector", r.getContentP());
|
|
|
std::string h;
|
|
|
- r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, req->httpVers, req->conn_clos);
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ TeBkUmLpqAsyncWorld::toJson(req->vec, w);
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ req->sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObjectCont(&req->vec, wcont_ser, "vector", r.getContentP());
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
req->sif->writeDirect(h, r.getContent());
|
|
|
+#endif
|
|
|
} else {
|
|
|
HttpResponse r;
|
|
|
std::string h;
|
|
@@ -392,6 +439,7 @@ void TeBkUmLpqAsyncRouter::updatesAsyncb(const char* q, int ql, AsyncUpdatesReq*
|
|
|
});
|
|
|
req->sqli->postAsync(areq);
|
|
|
});
|
|
|
+#endif
|
|
|
req->sqli->postAsync(areq);
|
|
|
}
|
|
|
|
|
@@ -411,6 +459,7 @@ void TeBkUmLpqAsyncRouter::updatesAsync(const char* q, int ql, AsyncUpdatesReq*
|
|
|
qu->withParamInt4(rid);
|
|
|
qu->withSelectQuery(WORLD_ONE_QUERY);
|
|
|
}
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
areq->withFinalCb(req, [](void* ctx, bool status, std::vector<PGresult*>* results, const std::string& query, int counter) {
|
|
|
AsyncUpdatesReq* req = (AsyncUpdatesReq*)ctx;
|
|
|
LibpqAsyncReq* areq = req->sqli->getAsyncRequest();
|
|
@@ -447,10 +496,18 @@ void TeBkUmLpqAsyncRouter::updatesAsync(const char* q, int ql, AsyncUpdatesReq*
|
|
|
AsyncUpdatesReq* req = (AsyncUpdatesReq*)ctx;
|
|
|
if(status) {
|
|
|
HttpResponse r;
|
|
|
- JSONSerialize::serializeObjectCont(&req->vec, wcont_ser, "vector", r.getContentP());
|
|
|
std::string h;
|
|
|
- r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, req->httpVers, req->conn_clos);
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ TeBkUmLpqAsyncWorld::toJson(req->vec, w);
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ req->sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObjectCont(&req->vec, wcont_ser, "vector", r.getContentP());
|
|
|
+ r.httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
req->sif->writeDirect(h, r.getContent());
|
|
|
+#endif
|
|
|
} else {
|
|
|
HttpResponse r;
|
|
|
std::string h;
|
|
@@ -462,6 +519,7 @@ void TeBkUmLpqAsyncRouter::updatesAsync(const char* q, int ql, AsyncUpdatesReq*
|
|
|
});
|
|
|
req->sqli->postAsync(areq);
|
|
|
});
|
|
|
+#endif
|
|
|
req->sqli->postAsync(areq);
|
|
|
}
|
|
|
|
|
@@ -491,7 +549,7 @@ void TeBkUmLpqAsyncRouter::updateCache() {
|
|
|
}
|
|
|
CacheManager::cleanImpl(cchi);
|
|
|
delete req;
|
|
|
- CacheManager::triggerAppInitCompletion("te-benchmark-um-pq-async");
|
|
|
+ CacheManager::triggerAppInitCompletion("t4");
|
|
|
} catch(const std::exception& e) {
|
|
|
CacheManager::cleanImpl(cchi);
|
|
|
delete req;
|
|
@@ -528,12 +586,13 @@ void TeBkUmLpqAsyncRouter::cachedWorlds(const char* q, int ql, std::vector<TeBkU
|
|
|
}
|
|
|
|
|
|
|
|
|
-void TeBkUmLpqAsyncRouter::fortunes(SocketInterface* sif) {
|
|
|
+void TeBkUmLpqAsyncRouter::fortunes(BaseSocket* sif) {
|
|
|
LibpqDataSourceImpl* sqli = getDb(7);
|
|
|
LibpqAsyncReq* areq = sqli->getAsyncRequest();
|
|
|
LibpqQuery* q = areq->getQuery();
|
|
|
+#ifdef HAVE_LIBPQ
|
|
|
q->withSelectQuery(FORTUNE_ALL_QUERY).withContext(sif).withCb0([](void* ctx, PGresult* res) {
|
|
|
- SocketInterface* sif = (SocketInterface*)ctx;
|
|
|
+ BaseSocket* sif = (BaseSocket*)ctx;
|
|
|
|
|
|
std::list<TeBkUmLpqAsyncFortune> flst;
|
|
|
int cols = PQnfields(res);
|
|
@@ -565,31 +624,40 @@ void TeBkUmLpqAsyncRouter::fortunes(SocketInterface* sif) {
|
|
|
sif->writeDirect(h, out);
|
|
|
sif->unUse();
|
|
|
});
|
|
|
+#endif
|
|
|
sqli->postAsync(areq);
|
|
|
}
|
|
|
|
|
|
-bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, SocketInterface* sif) {
|
|
|
+bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, BaseSocket* sif) {
|
|
|
sif->use();
|
|
|
- if(StringUtil::endsWith(req->getPath(), "/plaintext")) {
|
|
|
+ if(StringUtil::endsWith(req->getPath(), "/plaint")) {
|
|
|
std::string h;
|
|
|
res->httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_TEXT_PLAIN, (int)HELLO_WORLD.length());
|
|
|
sif->writeDirect(h, HELLO_WORLD);
|
|
|
sif->unUse();
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/json")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/j")) {
|
|
|
TeBkUmLpqAsyncMessage msg;
|
|
|
msg.setMessage(HELLO_WORLD);
|
|
|
- JSONSerialize::serializeObject(&msg, m_ser, res->getContentP());
|
|
|
std::string h;
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ msg.toJson(w);
|
|
|
+ res->httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObject(&msg, m_ser, res->getContentP());
|
|
|
res->httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON);
|
|
|
sif->writeDirect(h, res->getContent());
|
|
|
+#endif
|
|
|
sif->unUse();
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/db")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/d")) {
|
|
|
/*AsyncDbReq* ar = new AsyncDbReq;
|
|
|
ar->sif = sif;
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();*/
|
|
|
dbAsync(sif);
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/queries")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/quer")) {
|
|
|
struct yuarel_param params[1];
|
|
|
yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
|
|
|
/*AsyncQueriesReq* ar = new AsyncQueriesReq;
|
|
@@ -597,7 +665,7 @@ bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, SocketInte
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();*/
|
|
|
queriesAsync(params[0].val, params[0].val_len, sif);
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/queriem")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/quem")) {
|
|
|
struct yuarel_param params[1];
|
|
|
yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
|
|
|
/*AsyncQueriesReq* ar = new AsyncQueriesReq;
|
|
@@ -605,7 +673,7 @@ bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, SocketInte
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();*/
|
|
|
queriesMultiAsync(params[0].val, params[0].val_len, sif);
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/updatem")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/updm")) {
|
|
|
struct yuarel_param params[1];
|
|
|
yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
|
|
|
AsyncUpdatesReq* ar = new AsyncUpdatesReq;
|
|
@@ -613,14 +681,13 @@ bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, SocketInte
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();
|
|
|
updatesMulti(params[0].val, params[0].val_len, ar);
|
|
|
- }
|
|
|
- else if(StringUtil::endsWith(req->getPath(), "/fortunes")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/fortu")) {
|
|
|
/*AsyncFortuneReq* ar = new AsyncFortuneReq;
|
|
|
ar->sif = sif;
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();*/
|
|
|
fortunes(sif);
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/bupdates") || StringUtil::endsWith(req->getPath(), "/updates")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/bupdt") || StringUtil::endsWith(req->getPath(), "/updt")) {
|
|
|
struct yuarel_param params[1];
|
|
|
yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
|
|
|
AsyncUpdatesReq* ar = new AsyncUpdatesReq;
|
|
@@ -628,7 +695,7 @@ bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, SocketInte
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();
|
|
|
updatesAsyncb(params[0].val, params[0].val_len, ar);
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/update_")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/upd_")) {
|
|
|
struct yuarel_param params[1];
|
|
|
yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
|
|
|
AsyncUpdatesReq* ar = new AsyncUpdatesReq;
|
|
@@ -636,15 +703,23 @@ bool TeBkUmLpqAsyncRouter::route(HttpRequest* req, HttpResponse* res, SocketInte
|
|
|
ar->httpVers = req->getHttpVers();
|
|
|
ar->conn_clos = req->isClose();
|
|
|
updatesAsync(params[0].val, params[0].val_len, ar);
|
|
|
- } else if(StringUtil::endsWith(req->getPath(), "/cached-worlds")) {
|
|
|
+ } else if(StringUtil::endsWith(req->getPath(), "/cached-wld")) {
|
|
|
struct yuarel_param params[1];
|
|
|
yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
|
|
|
- std::vector<TeBkUmLpqAsyncWorld> msg;
|
|
|
- cachedWorlds(params[0].val, params[0].val_len, msg);
|
|
|
- JSONSerialize::serializeObjectCont(&msg, wcont_ser, "vector", res->getContentP());
|
|
|
+ std::vector<TeBkUmLpqAsyncWorld> vec;
|
|
|
+ cachedWorlds(params[0].val, params[0].val_len, vec);
|
|
|
std::string h;
|
|
|
- res->httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON);
|
|
|
+#ifdef HAVE_RAPID_JSON
|
|
|
+ rapidjson::StringBuffer s;
|
|
|
+ rapidjson::Writer<rapidjson::StringBuffer> w(s);
|
|
|
+ TeBkUmLpqAsyncWorld::toJson(vec, w);
|
|
|
+ res->httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false, s.GetSize());
|
|
|
+ sif->writeDirect(h, s.GetString(), s.GetSize());
|
|
|
+#else
|
|
|
+ JSONSerialize::serializeObjectCont(&vec, wcont_ser, "vector", res->getContentP());
|
|
|
+ res->httpStatus(HTTPResponseStatus::Ok).generateHeadResponse(h, ContentTypes::CONTENT_TYPE_APPLICATION_JSON, 1.1, false);
|
|
|
sif->writeDirect(h, res->getContent());
|
|
|
+#endif
|
|
|
sif->unUse();
|
|
|
} else {
|
|
|
std::string h;
|
|
@@ -662,10 +737,10 @@ SerCont TeBkUmLpqAsyncRouter::wcont_ser;
|
|
|
|
|
|
TeBkUmLpqAsyncRouter::TeBkUmLpqAsyncRouter() {
|
|
|
sqli = NULL;
|
|
|
- tmplFunc = TemplateUtil::getTemplateFunc("te-benchmark-um-pq-async", "tpe/fortunes.tpe");
|
|
|
- m_ser = Serializer::getSerFuncForObject("te-benchmark-um-pq-async", "TeBkUmLpqAsyncMessage");
|
|
|
- w_ser = Serializer::getSerFuncForObject("te-benchmark-um-pq-async", "TeBkUmLpqAsyncWorld");
|
|
|
- wcont_ser = Serializer::getSerFuncForObjectCont("te-benchmark-um-pq-async", "TeBkUmLpqAsyncWorld", "std::vector");
|
|
|
+ tmplFunc = TemplateUtil::getTemplateFunc("t4", "tpe/fortunes.tpe");
|
|
|
+ m_ser = Serializer::getSerFuncForObject("t4", "TeBkUmLpqAsyncMessage");
|
|
|
+ w_ser = Serializer::getSerFuncForObject("t4", "TeBkUmLpqAsyncWorld");
|
|
|
+ wcont_ser = Serializer::getSerFuncForObjectCont("t4", "TeBkUmLpqAsyncWorld", "std::vector");
|
|
|
}
|
|
|
|
|
|
TeBkUmLpqAsyncRouter::~TeBkUmLpqAsyncRouter() {
|
|
@@ -676,7 +751,7 @@ TeBkUmLpqAsyncRouter::~TeBkUmLpqAsyncRouter() {
|
|
|
|
|
|
LibpqDataSourceImpl* TeBkUmLpqAsyncRouter::getDb(int max) {
|
|
|
if(sqli==NULL) {
|
|
|
- sqli = static_cast<LibpqDataSourceImpl*>(DataSourceManager::getRawImpl("PostgreSQL-DSN", "te-benchmark-um-pq-async"));
|
|
|
+ sqli = static_cast<LibpqDataSourceImpl*>(DataSourceManager::getRawImpl("PostgreSQL-DSN", "t4"));
|
|
|
}
|
|
|
return sqli;
|
|
|
}
|
|
@@ -695,7 +770,7 @@ LibpqDataSourceImpl* TeBkUmLpqAsyncRouterPooled::getDb(int max) {
|
|
|
}
|
|
|
} else {
|
|
|
for (int var = 0; var < maxconns; ++var) {
|
|
|
- pool.push_back(static_cast<LibpqDataSourceImpl*>(DataSourceManager::getRawImpl("PostgreSQL-DSN", "te-benchmark-um-pq-async", true)));
|
|
|
+ pool.push_back(static_cast<LibpqDataSourceImpl*>(DataSourceManager::getRawImpl("PostgreSQL-DSN", "t4", true)));
|
|
|
}
|
|
|
inited = true;
|
|
|
}
|