From bb2333e7e0d6e74b99518faefa8334c4577221f1 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 19 Jun 2023 13:15:33 +0200 Subject: Move fetchStatusPage --- .../clustercontroller/core/FleetController.java | 45 ++------------------- .../core/status/StatusHandler.java | 46 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 42 deletions(-) (limited to 'clustercontroller-core/src/main') diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java index 8027cec4e3c..a5fa0d08bb8 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.clustercontroller.core; import com.yahoo.document.FixedBucketSpaces; -import com.yahoo.exception.ExceptionUtils; import com.yahoo.vdslib.distribution.ConfiguredNode; import com.yahoo.vdslib.state.ClusterState; import com.yahoo.vdslib.state.Node; @@ -22,10 +21,9 @@ import com.yahoo.vespa.clustercontroller.core.status.LegacyIndexPageRequestHandl import com.yahoo.vespa.clustercontroller.core.status.LegacyNodePageRequestHandler; import com.yahoo.vespa.clustercontroller.core.status.NodeHealthRequestHandler; import com.yahoo.vespa.clustercontroller.core.status.StatusHandler; -import com.yahoo.vespa.clustercontroller.core.status.statuspage.StatusPageResponse; import com.yahoo.vespa.clustercontroller.core.status.statuspage.StatusPageServer; import com.yahoo.vespa.clustercontroller.utils.util.MetricReporter; -import java.io.FileNotFoundException; + import java.time.Duration; import java.time.Instant; import java.util.ArrayDeque; @@ -37,7 +35,6 @@ import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Set; -import java.util.TimeZone; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; @@ -508,43 +505,6 @@ public class FleetController implements NodeListener, SlobrokListener, SystemSta } } - public StatusPageResponse fetchStatusPage(StatusPageServer.HttpRequest httpRequest) { - verifyInControllerThread(); - StatusPageResponse.ResponseCode responseCode; - String message; - final String hiddenMessage; - try { - StatusPageServer.RequestHandler handler = statusRequestRouter.resolveHandler(httpRequest); - if (handler == null) { - throw new FileNotFoundException("No handler found for request: " + httpRequest.getPath()); - } - return handler.handle(httpRequest); - } catch (FileNotFoundException e) { - responseCode = StatusPageResponse.ResponseCode.NOT_FOUND; - message = e.getMessage(); - hiddenMessage = ""; - } catch (Exception e) { - responseCode = StatusPageResponse.ResponseCode.INTERNAL_SERVER_ERROR; - message = "Internal Server Error"; - hiddenMessage = ExceptionUtils.getStackTraceAsString(e); - context.log(logger, Level.FINE, () -> "Unknown exception thrown for request " + httpRequest.getRequest() + ": " + hiddenMessage); - } - - TimeZone tz = TimeZone.getTimeZone("UTC"); - long currentTime = timer.getCurrentTimeInMillis(); - StatusPageResponse response = new StatusPageResponse(); - StringBuilder content = new StringBuilder(); - response.setContentType("text/html"); - response.setResponseCode(responseCode); - content.append("\n"); - content.append("

UTC time when creating this page: ").append(RealTimer.printDateNoMilliSeconds(currentTime, tz)).append("

"); - response.writeHtmlHeader(content, message); - response.writeHtmlFooter(content, hiddenMessage); - response.writeContent(content.toString()); - - return response; - } - public void tick() throws Exception { synchronized (monitor) { boolean didWork; @@ -635,7 +595,8 @@ public class FleetController implements NodeListener, SlobrokListener, SystemSta private boolean processAnyPendingStatusPageRequest() { StatusPageServer.HttpRequest statusRequest = statusPageServer.getCurrentHttpRequest(); if (statusRequest != null) { - statusPageServer.answerCurrentStatusRequest(fetchStatusPage(statusRequest)); + verifyInControllerThread(); + statusPageServer.fetchStatusPage(statusRequest, statusRequestRouter, timer); return true; } return false; diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/status/StatusHandler.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/status/StatusHandler.java index 65b06afb0c5..6ed121284b6 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/status/StatusHandler.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/status/StatusHandler.java @@ -1,14 +1,20 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.clustercontroller.core.status; +import com.yahoo.exception.ExceptionUtils; +import com.yahoo.vespa.clustercontroller.core.RealTimer; +import com.yahoo.vespa.clustercontroller.core.Timer; import com.yahoo.vespa.clustercontroller.core.status.statuspage.StatusPageResponse; import com.yahoo.vespa.clustercontroller.core.status.statuspage.StatusPageServer; import com.yahoo.vespa.clustercontroller.utils.communication.http.HttpRequest; import com.yahoo.vespa.clustercontroller.utils.communication.http.HttpRequestHandler; import com.yahoo.vespa.clustercontroller.utils.communication.http.HttpResult; + +import java.io.FileNotFoundException; import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.util.Map; +import java.util.TimeZone; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,6 +48,46 @@ public class StatusHandler implements HttpRequestHandler { return r; } } + + public void fetchStatusPage(StatusPageServer.HttpRequest httpRequest, + StatusPageServer.PatternRequestRouter statusRequestRouter, + Timer timer) { + StatusPageResponse.ResponseCode responseCode; + String message; + final String hiddenMessage; + try { + StatusPageServer.RequestHandler handler = statusRequestRouter.resolveHandler(httpRequest); + if (handler == null) { + throw new FileNotFoundException("No handler found for request: " + httpRequest.getPath()); + } + answerCurrentStatusRequest(handler.handle(httpRequest)); + return; + } catch (FileNotFoundException e) { + responseCode = StatusPageResponse.ResponseCode.NOT_FOUND; + message = e.getMessage(); + hiddenMessage = ""; + } catch (Exception e) { + responseCode = StatusPageResponse.ResponseCode.INTERNAL_SERVER_ERROR; + message = "Internal Server Error"; + hiddenMessage = ExceptionUtils.getStackTraceAsString(e); + } + + TimeZone tz = TimeZone.getTimeZone("UTC"); + long currentTime = timer.getCurrentTimeInMillis(); + StatusPageResponse response = new StatusPageResponse(); + StringBuilder content = new StringBuilder(); + response.setContentType("text/html"); + response.setResponseCode(responseCode); + content.append("\n"); + content.append("

UTC time when creating this page: ").append(RealTimer.printDateNoMilliSeconds(currentTime, tz)).append("

"); + response.writeHtmlHeader(content, message); + response.writeHtmlFooter(content, hiddenMessage); + response.writeContent(content.toString()); + + + answerCurrentStatusRequest(response); + } + public void answerCurrentStatusRequest(StatusPageResponse r) { synchronized (answerMonitor) { response = r; -- cgit v1.2.3