void TestHttpServer::HandleMetaRequest(IncomingHTTPRequest* _request) { if (_request->type() != BaseHTTPRequest::GET) { // We only accept get requests server_->SendErrorReply(_request, 400); return; } std::cerr << "Got a meta request" << std::endl; const HTTPKeyValuePairs& keyvalues = _request->keyvalues(); EXPECT_EQ(nkeys, keyvalues.size()); for (size_t i = 0; i < keyvalues.size(); ++i) { std::ostringstream key, value; key << "key" << i; value << "value" << i; EXPECT_EQ(key.str(), keyvalues[i].first); EXPECT_EQ(value.str(), keyvalues[i].second); } OutgoingHTTPResponse* response = new OutgoingHTTPResponse(_request); response->AddResponse("This is response for meta object\r\n"); server_->SendReply(_request, 200, response); }
void StatsInterface::HandleStatsRequest(IncomingHTTPRequest* _request) { LOG(INFO) << "Got a stats request " << _request->GetQuery(); // get the entire stuff unsigned char* pb = _request->ExtractFromPostData(0, _request->GetPayloadSize()); proto::tmaster::MetricRequest req; if (!req.ParseFromArray(pb, _request->GetPayloadSize())) { LOG(ERROR) << "Unable to deserialize post data specified in StatsRequest"; http_server_->SendErrorReply(_request, 400); delete _request; return; } proto::tmaster::MetricResponse* res = metrics_collector_->GetMetrics(req, tmaster_->getInitialTopology()); sp_string response_string; CHECK(res->SerializeToString(&response_string)); OutgoingHTTPResponse* response = new OutgoingHTTPResponse(_request); response->AddHeader("Content-Type", "application/octet-stream"); response->AddHeader("Content-Length", std::to_string(response_string.size())); response->AddResponse(response_string); http_server_->SendReply(_request, 200, response); delete res; delete _request; LOG(INFO) << "Done with stats request "; }