diff options
Diffstat (limited to 'vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java')
-rw-r--r-- | vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java b/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java deleted file mode 100644 index c10ee5416db..00000000000 --- a/vespa-testrunner-components/src/main/java/com/yahoo/vespa/hosted/testrunner/TestRunnerHandler.java +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.testrunner; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.inject.Inject; -import com.yahoo.container.jdisc.HttpRequest; -import com.yahoo.container.jdisc.HttpResponse; -import com.yahoo.container.jdisc.LoggingRequestHandler; -import com.yahoo.io.IOUtils; -import com.yahoo.restapi.MessageResponse; -import com.yahoo.restapi.SlimeJsonResponse; -import com.yahoo.slime.Cursor; -import com.yahoo.slime.JsonFormat; -import com.yahoo.slime.Slime; -import com.yahoo.vespa.testrunner.TestRunner; -import com.yahoo.yolean.Exceptions; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.util.Collection; -import java.util.concurrent.Executor; -import java.util.logging.Level; -import java.util.logging.LogRecord; - -import static com.yahoo.jdisc.Response.Status; - -/** - * @author valerijf - * @author jvenstad - */ -public class TestRunnerHandler extends LoggingRequestHandler { - - private final com.yahoo.vespa.hosted.testrunner.TestRunner testRunner; - - @Inject - public TestRunnerHandler(Executor executor, com.yahoo.vespa.hosted.testrunner.TestRunner testRunner) { - super(executor); - this.testRunner = testRunner; - } - - @Override - public HttpResponse handle(HttpRequest request) { - try { - switch (request.getMethod()) { - case GET: return handleGET(request); - case POST: return handlePOST(request); - - default: return new MessageResponse(Status.METHOD_NOT_ALLOWED, "Method '" + request.getMethod() + "' is not supported"); - } - } catch (IllegalArgumentException e) { - return new MessageResponse(Status.BAD_REQUEST, Exceptions.toMessageString(e)); - } catch (Exception e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return new MessageResponse(Status.INTERNAL_SERVER_ERROR, Exceptions.toMessageString(e)); - } - } - - private HttpResponse handleGET(HttpRequest request) { - String path = request.getUri().getPath(); - if (path.equals("/tester/v1/log")) { - return new SlimeJsonResponse(logToSlime(testRunner.getLog(request.hasProperty("after") - ? Long.parseLong(request.getProperty("after")) - : -1))); - } else if (path.equals("/tester/v1/status")) { - log.info("Responding with status " + testRunner.getStatus()); - return new MessageResponse(testRunner.getStatus().name()); - } - return new MessageResponse(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); - } - - private HttpResponse handlePOST(HttpRequest request) throws IOException { - final String path = request.getUri().getPath(); - if (path.startsWith("/tester/v1/run/")) { - String type = lastElement(path); - TestRunner.Suite suite = TestRunner.Suite.valueOf(type.toUpperCase() + "_TEST"); - byte[] config = IOUtils.readBytes(request.getData(), 1 << 16); - testRunner.test(suite, config); - log.info("Started tests of type " + type + " and status is " + testRunner.getStatus()); - return new MessageResponse("Successfully started " + type + " tests"); - } - return new MessageResponse(Status.NOT_FOUND, "Not found: " + request.getUri().getPath()); - } - - private static String lastElement(String path) { - if (path.endsWith("/")) - path = path.substring(0, path.length() - 1); - int lastSlash = path.lastIndexOf("/"); - if (lastSlash < 0) return path; - return path.substring(lastSlash + 1); - } - - static Slime logToSlime(Collection<LogRecord> log) { - Slime slime = new Slime(); - Cursor root = slime.setObject(); - Cursor recordArray = root.setArray("logRecords"); - logArrayToSlime(recordArray, log); - return slime; - } - - static void logArrayToSlime(Cursor recordArray, Collection<LogRecord> log) { - log.forEach(record -> { - Cursor recordObject = recordArray.addObject(); - recordObject.setLong("id", record.getSequenceNumber()); - recordObject.setLong("at", record.getMillis()); - recordObject.setString("type", typeOf(record.getLevel())); - String message = record.getMessage(); - if (record.getThrown() != null) { - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - record.getThrown().printStackTrace(new PrintStream(buffer)); - message += "\n" + buffer; - } - recordObject.setString("message", message); - }); - } - - public static String typeOf(Level level) { - return level.getName().equals("html") ? "html" - : level.intValue() < Level.INFO.intValue() ? "debug" - : level.intValue() < Level.WARNING.intValue() ? "info" - : level.intValue() < Level.SEVERE.intValue() ? "warning" - : "error"; - } - -} |