summaryrefslogtreecommitdiffstats
path: root/clustercontroller-core
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-06-19 13:15:33 +0200
committerHarald Musum <musum@yahooinc.com>2023-06-19 13:15:33 +0200
commitbb2333e7e0d6e74b99518faefa8334c4577221f1 (patch)
treea629cf81c4af97c333a2b5754bb0296cecd7e8b8 /clustercontroller-core
parent335ade42d91443f700c31bb3448d470a0de43cd2 (diff)
Move fetchStatusPage
Diffstat (limited to 'clustercontroller-core')
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java45
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/status/StatusHandler.java46
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateRequests.java30
3 files changed, 79 insertions, 42 deletions
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("<!-- Answer to request ").append(httpRequest.getRequest()).append(" -->\n");
- content.append("<p>UTC time when creating this page: ").append(RealTimer.printDateNoMilliSeconds(currentTime, tz)).append("</p>");
- 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("<!-- Answer to request ").append(httpRequest.getRequest()).append(" -->\n");
+ content.append("<p>UTC time when creating this page: ").append(RealTimer.printDateNoMilliSeconds(currentTime, tz)).append("</p>");
+ response.writeHtmlHeader(content, message);
+ response.writeHtmlFooter(content, hiddenMessage);
+ response.writeContent(content.toString());
+
+
+ answerCurrentStatusRequest(response);
+ }
+
public void answerCurrentStatusRequest(StatusPageResponse r) {
synchronized (answerMonitor) {
response = r;
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateRequests.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateRequests.java
new file mode 100644
index 00000000000..f0f98120d72
--- /dev/null
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateRequests.java
@@ -0,0 +1,30 @@
+package com.yahoo.vespa.clustercontroller.core;
+
+import com.yahoo.vespa.clustercontroller.utils.staterestapi.requests.UnitStateRequest;
+
+import java.util.List;
+
+public class StateRequests {
+
+ public static class Get extends StateRequests implements UnitStateRequest {
+ private final List<String> path;
+ private final int recursive;
+
+ public Get(String req, int recursive) {
+ path = req.isEmpty() ? List.of() : List.of(req.split("/"));
+ this.recursive = recursive;
+ }
+
+ @Override
+ public int getRecursiveLevels() {
+ return recursive;
+ }
+
+ @Override
+ public List<String> getUnitPath() {
+ return path;
+ }
+
+ }
+
+}