Browse Source

avoid an exception in the /db test where the ?queries= arg is missing.
generate the right json in both database tests.

bckfnn 11 years ago
parent
commit
0866bc91a1
2 changed files with 49 additions and 18 deletions
  1. 48 17
      vertx/WebServer.java
  2. 1 1
      vertx/benchmark_config

+ 48 - 17
vertx/WebServer.java

@@ -9,6 +9,7 @@ import org.vertx.java.core.eventbus.Message;
 import org.vertx.java.core.http.HttpServerRequest;
 import org.vertx.java.core.http.HttpServerRequest;
 import org.vertx.java.core.http.HttpServerResponse;
 import org.vertx.java.core.http.HttpServerResponse;
 import org.vertx.java.core.json.JsonObject;
 import org.vertx.java.core.json.JsonObject;
+import org.vertx.java.core.json.JsonArray;
 import org.vertx.java.core.json.impl.Json;
 import org.vertx.java.core.json.impl.Json;
 import org.vertx.java.platform.Verticle;
 import org.vertx.java.platform.Verticle;
 
 
@@ -50,6 +51,9 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
       case "/db":
       case "/db":
         handleDbMongo(req);
         handleDbMongo(req);
         break;
         break;
+      case "/queries":
+        handleQueriesMongo(req);
+        break;
       default:
       default:
         req.response().setStatusCode(404);
         req.response().setStatusCode(404);
         req.response().end();
         req.response().end();
@@ -66,17 +70,38 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
   }
   }
 
 
   private void handleJson(HttpServerRequest req) {
   private void handleJson(HttpServerRequest req) {
-    HttpServerResponse resp = req.response();
     String result = Json.encode(Collections.singletonMap("message", "Hello, world!"));
     String result = Json.encode(Collections.singletonMap("message", "Hello, world!"));
-    int contentLength = result.getBytes(StandardCharsets.UTF_8).length;
-    resp.putHeader("Content-Type", "application/json; charset=UTF-8");
-    resp.putHeader("Content-Length", String.valueOf(contentLength));
-    resp.putHeader("Server", "vert.x");
-    resp.putHeader("Date", dateString);
-    resp.end(result);
+    sendResponse(req, result);
   }
   }
 
 
   private void handleDbMongo(final HttpServerRequest req) {
   private void handleDbMongo(final HttpServerRequest req) {
+
+    final Random random = ThreadLocalRandom.current();
+
+    vertx.eventBus().send(
+        "hello.persistor",
+        new JsonObject()
+            .putString("action", "findone")
+            .putString("collection", "world")
+            .putObject("matcher", new JsonObject().putNumber("id", (random.nextInt(10000) + 1))),
+        new Handler<Message<JsonObject>>() {
+          @Override
+          public void handle(Message<JsonObject> reply) {
+            JsonObject body = reply.body();
+
+            if ("ok".equals(body.getString("status"))) {
+              JsonObject world = body.getObject("result");
+              world.removeField("_id");
+              String result = world.encode();
+              sendResponse(req, result);
+            } else {
+              System.err.println("Failed to execute query");
+            }
+          }
+        });
+  }
+
+  private void handleQueriesMongo(final HttpServerRequest req) {
     int queriesParam = 1;
     int queriesParam = 1;
     try {
     try {
       queriesParam = Integer.parseInt(req.params().get("queries"));
       queriesParam = Integer.parseInt(req.params().get("queries"));
@@ -101,12 +126,12 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
   private class MongoHandler implements Handler<Message<JsonObject>> {
   private class MongoHandler implements Handler<Message<JsonObject>> {
     private final HttpServerRequest req;
     private final HttpServerRequest req;
     private final int queries;
     private final int queries;
-    private final List<Object> worlds;
+    private final JsonArray worlds;
 
 
     public MongoHandler(HttpServerRequest request, int queriesParam) {
     public MongoHandler(HttpServerRequest request, int queriesParam) {
       req = request;
       req = request;
       queries = queriesParam;
       queries = queriesParam;
-      worlds = new ArrayList<>(queriesParam);
+      worlds = new JsonArray();
     }
     }
 
 
     @Override
     @Override
@@ -114,21 +139,27 @@ public class WebServer extends Verticle implements Handler<HttpServerRequest> {
       JsonObject body = reply.body();
       JsonObject body = reply.body();
 
 
       if ("ok".equals(body.getString("status"))) {
       if ("ok".equals(body.getString("status"))) {
+        body.getObject("result").removeField("_id");
         worlds.add(body.getObject("result"));
         worlds.add(body.getObject("result"));
         if (worlds.size() == this.queries) {
         if (worlds.size() == this.queries) {
           // All queries have completed; send the response.
           // All queries have completed; send the response.
-          String result = Json.encode(worlds);
-          int contentLength = result.getBytes(StandardCharsets.UTF_8).length;
-          HttpServerResponse resp = req.response();
-          resp.putHeader("Content-Type", "application/json; charset=UTF-8");
-          resp.putHeader("Content-Length", String.valueOf(contentLength));
-          resp.putHeader("Server", "vert.x");
-          resp.putHeader("Date", dateString);
-          resp.end(result);
+          String result = worlds.encode();
+          sendResponse(req, result);
         }
         }
       } else {
       } else {
         System.err.println("Failed to execute query");
         System.err.println("Failed to execute query");
       }
       }
     }
     }
   }
   }
+  
+  private void sendResponse(HttpServerRequest req, String result) {
+      int contentLength = result.getBytes(StandardCharsets.UTF_8).length;
+      HttpServerResponse resp = req.response();
+      resp.putHeader("Content-Type", "application/json; charset=UTF-8");
+      resp.putHeader("Content-Length", String.valueOf(contentLength));
+      resp.putHeader("Server", "vert.x");
+      resp.putHeader("Date", dateString);
+      resp.end(result);
+  }
 }
 }
+

+ 1 - 1
vertx/benchmark_config

@@ -6,7 +6,7 @@
       "json_url": "/json",
       "json_url": "/json",
       "db_url": "/db",
       "db_url": "/db",
       "plaintext_url": "/plaintext",
       "plaintext_url": "/plaintext",
-      "query_url": "/db?queries=",
+      "query_url": "/queries?queries=",
       "port": 8080,
       "port": 8080,
       "approach": "Realistic",
       "approach": "Realistic",
       "classification": "Platform",
       "classification": "Platform",