Improve CMS start up and status reporting.
[lgpl/argeo-commons.git] / org.argeo.cms.ee / src / org / argeo / cms / websocket / server / StatusHandler.java
diff --git a/org.argeo.cms.ee/src/org/argeo/cms/websocket/server/StatusHandler.java b/org.argeo.cms.ee/src/org/argeo/cms/websocket/server/StatusHandler.java
new file mode 100644 (file)
index 0000000..a8466fe
--- /dev/null
@@ -0,0 +1,55 @@
+package org.argeo.cms.websocket.server;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringJoiner;
+
+import org.argeo.api.cms.CmsState;
+import org.argeo.cms.CmsDeployProperty;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+
+public class StatusHandler implements WebsocketEndpoints, HttpHandler {
+       private CmsState cmsState;
+
+       @Override
+       public Set<Class<?>> getEndPoints() {
+               Set<Class<?>> res = new HashSet<>();
+               res.add(PingEndpoint.class);
+               res.add(EventEndpoint.class);
+               res.add(TestEndpoint.class);
+               return res;
+       }
+
+       @Override
+       public void handle(HttpExchange exchange) throws IOException {
+
+               StringJoiner sb = new StringJoiner("\n");
+               CmsDeployProperty[] deployProperties = CmsDeployProperty.values();
+               Arrays.sort(deployProperties, (o1, o2) -> o1.name().compareTo(o2.name()));
+               for (CmsDeployProperty deployProperty : deployProperties) {
+                       List<String> values = cmsState.getDeployProperties(deployProperty.getProperty());
+                       for (int i = 0; i < values.size(); i++) {
+                               String value = values.get(i);
+                               if (value != null) {
+                                       String line = deployProperty.getProperty() + (i == 0 ? "" : "." + i) + "=" + value;
+                                       sb.add(line);
+                               }
+                       }
+               }
+
+               byte[] msg = sb.toString().getBytes(StandardCharsets.UTF_8);
+               exchange.sendResponseHeaders(200, msg.length);
+               exchange.getResponseBody().write(msg);
+       }
+
+       public void setCmsState(CmsState cmsState) {
+               this.cmsState = cmsState;
+       }
+
+}