|
@@ -1,119 +1,49 @@
|
|
package benchmark;
|
|
package benchmark;
|
|
|
|
|
|
-import benchmark.model.Fortune;
|
|
|
|
import benchmark.repository.DbFactory;
|
|
import benchmark.repository.DbFactory;
|
|
-import benchmark.repository.DbService;
|
|
|
|
|
|
+import gg.jte.ContentType;
|
|
|
|
+import gg.jte.TemplateEngine;
|
|
import io.javalin.Javalin;
|
|
import io.javalin.Javalin;
|
|
-import io.javalin.core.compression.CompressionStrategy;
|
|
|
|
-import io.javalin.http.Context;
|
|
|
|
-import io.javalin.plugin.rendering.template.JavalinPebble;
|
|
|
|
-
|
|
|
|
|
|
+import io.javalin.rendering.template.JavalinJte;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
-import java.util.Map;
|
|
|
|
|
|
+import io.javalin.http.servlet.DefaultTasks;
|
|
|
|
|
|
public class Main {
|
|
public class Main {
|
|
|
|
|
|
- public static final int MIN_QUERIES = 1;
|
|
|
|
- public static final int MAX_QUERIES = 500;
|
|
|
|
- public static final int SERVICE_UNAVAILABLE_CODE = 503;
|
|
|
|
- public static final String SERVICE_UNAVAILABLE_TEXT = "503 Service Unavailable";
|
|
|
|
-
|
|
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
|
|
|
|
- Javalin app = Javalin
|
|
|
|
- .create(config -> config.compressionStrategy(CompressionStrategy.NONE))
|
|
|
|
- .start(8080);
|
|
|
|
-
|
|
|
|
- app.get("/plaintext", Main::handlePlainText);
|
|
|
|
- app.get("/json", Main::handleJson);
|
|
|
|
-
|
|
|
|
- // PostgreSQL
|
|
|
|
- app.get("/db", Main::handleSingleDbQuery);
|
|
|
|
- app.get("/queries", Main::handleMultipleDbQueries);
|
|
|
|
- app.get("/fortunes", Main::handleFortunes);
|
|
|
|
- app.get("/updates", Main::handleUpdates);
|
|
|
|
-
|
|
|
|
- // MongoDb
|
|
|
|
- app.get("/mongo/db", Main::handleSingleDbQuery);
|
|
|
|
- app.get("/mongo/queries", Main::handleMultipleDbQueries);
|
|
|
|
- app.get("/mongo/fortunes", Main::handleFortunes);
|
|
|
|
- app.get("/mongo/updates", Main::handleUpdates);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- private static void handlePlainText(Context ctx) {
|
|
|
|
- ctx.result("Hello, World!");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static void handleJson(Context ctx) {
|
|
|
|
- ctx.json(Collections.singletonMap("message", "Hello, World!"));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static void handleSingleDbQuery(Context ctx) {
|
|
|
|
|
|
+ TemplateEngine templateEngine = TemplateEngine.createPrecompiled(ContentType.Html);
|
|
|
|
+ templateEngine.setTrimControlStructures(true);
|
|
|
|
+ JavalinJte.init(templateEngine, c -> false);
|
|
|
|
|
|
- DbService dbService = getDbServiceFromPath(ctx.path());
|
|
|
|
|
|
+ DslJsonMapper jsonMapper = new DslJsonMapper();
|
|
|
|
|
|
- try {
|
|
|
|
- ctx.json(dbService.getWorld(1).get(0));
|
|
|
|
- } catch (Throwable t) {
|
|
|
|
- ctx.status(SERVICE_UNAVAILABLE_CODE).result(SERVICE_UNAVAILABLE_TEXT);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static void handleMultipleDbQueries(Context ctx) {
|
|
|
|
-
|
|
|
|
- int num = getBoundedRowNumber(ctx.queryParam("queries", String.class).getOrNull());
|
|
|
|
- DbService dbService = getDbServiceFromPath(ctx.path());
|
|
|
|
-
|
|
|
|
- try {
|
|
|
|
- ctx.json(dbService.getWorld(num));
|
|
|
|
- } catch (Throwable t) {
|
|
|
|
- ctx.status(SERVICE_UNAVAILABLE_CODE).result(SERVICE_UNAVAILABLE_TEXT);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static void handleFortunes(Context ctx) {
|
|
|
|
-
|
|
|
|
- DbService dbService = getDbServiceFromPath(ctx.path());
|
|
|
|
|
|
+ DatabaseController postgres = new DatabaseController(jsonMapper, DbFactory.INSTANCE.getDbService(DbFactory.DbType.POSTGRES));
|
|
|
|
+ DatabaseController mongo = new DatabaseController(jsonMapper, DbFactory.INSTANCE.getDbService(DbFactory.DbType.MONGODB));
|
|
|
|
|
|
- try {
|
|
|
|
- List<Fortune> fortuneList = dbService.getFortune();
|
|
|
|
- Map<String, List<Fortune>> map = Collections.singletonMap("list", fortuneList);
|
|
|
|
- ctx.html(JavalinPebble.INSTANCE.render("fortune.html", map, ctx))
|
|
|
|
- .header("Content-Type", "text/html; charset=utf-8");
|
|
|
|
- } catch (Throwable t) {
|
|
|
|
- ctx.status(SERVICE_UNAVAILABLE_CODE).result(SERVICE_UNAVAILABLE_TEXT);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static void handleUpdates(Context ctx) {
|
|
|
|
|
|
+ Javalin app = Javalin.create(config -> {
|
|
|
|
+ config.compression.none();
|
|
|
|
+ config.jetty.server(ServerUtil::createServer);
|
|
|
|
+ config.pvt.servletRequestLifecycle = List.of(DefaultTasks.INSTANCE.getHTTP());
|
|
|
|
+ }).start(8080);
|
|
|
|
|
|
- int num = getBoundedRowNumber(ctx.queryParam("queries", String.class).getOrNull());
|
|
|
|
- DbService dbService = getDbServiceFromPath(ctx.path());
|
|
|
|
|
|
+ app.get("/plaintext", ctx -> ctx.result("Hello, World!"));
|
|
|
|
+ app.get("/json", ctx -> jsonMapper.writeJson(Collections.singletonMap("message", "Hello, World!"), ctx));
|
|
|
|
|
|
- try {
|
|
|
|
- ctx.json(dbService.updateWorld(num));
|
|
|
|
- } catch (Throwable t) {
|
|
|
|
- ctx.status(SERVICE_UNAVAILABLE_CODE).result(SERVICE_UNAVAILABLE_TEXT);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ // PostgreSQL
|
|
|
|
+ app.get("/db", postgres::handleSingleDbQuery);
|
|
|
|
+ app.get("/queries", postgres::handleMultipleDbQueries);
|
|
|
|
+ app.get("/fortunes", postgres::handleFortunes);
|
|
|
|
+ app.get("/updates", postgres::handleUpdates);
|
|
|
|
|
|
- private static DbService getDbServiceFromPath(String path) {
|
|
|
|
|
|
+ // MongoDb
|
|
|
|
+ app.get("/mongo/db", mongo::handleSingleDbQuery);
|
|
|
|
+ app.get("/mongo/queries", mongo::handleMultipleDbQueries);
|
|
|
|
+ app.get("/mongo/fortunes", mongo::handleFortunes);
|
|
|
|
+ app.get("/mongo/updates", mongo::handleUpdates);
|
|
|
|
|
|
- return (path.contains("mongo")) ?
|
|
|
|
- DbFactory.INSTANCE.getDbService(DbFactory.DbType.MONGODB) :
|
|
|
|
- DbFactory.INSTANCE.getDbService(DbFactory.DbType.POSTGRES);
|
|
|
|
|
|
+ app.exception(Exception.class, (exception, ctx) -> ctx.status(503).result("503 Service Unavailable"));
|
|
}
|
|
}
|
|
|
|
|
|
- private static int getBoundedRowNumber(String number) {
|
|
|
|
-
|
|
|
|
- int num;
|
|
|
|
- try {
|
|
|
|
- num = Integer.parseInt(number);
|
|
|
|
- } catch (NumberFormatException e) {
|
|
|
|
- num = MIN_QUERIES;
|
|
|
|
- }
|
|
|
|
- return Math.max(MIN_QUERIES, Math.min(num, MAX_QUERIES));
|
|
|
|
- }
|
|
|
|
}
|
|
}
|