mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-11 07:25:13 +00:00
Add http endpoint to print out native memory diagnostics
This commit is contained in:
parent
f51b8139e9
commit
ad8fafc5b4
2 changed files with 72 additions and 0 deletions
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server
|
@ -0,0 +1,71 @@
|
|||
package uk.ac.ic.wlgitbridge.server;
|
||||
|
||||
import org.eclipse.jetty.server.HttpConnection;
|
||||
import org.eclipse.jetty.server.Request;
|
||||
import org.eclipse.jetty.server.handler.AbstractHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import uk.ac.ic.wlgitbridge.bridge.Bridge;
|
||||
import uk.ac.ic.wlgitbridge.util.Log;
|
||||
|
||||
import javax.management.JMException;
|
||||
import javax.management.ObjectName;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
||||
public class DiagnosticsHandler extends AbstractHandler {
|
||||
|
||||
public DiagnosticsHandler() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(
|
||||
String target,
|
||||
Request baseRequest,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response
|
||||
) throws IOException, ServletException {
|
||||
String method = baseRequest.getMethod();
|
||||
if (
|
||||
("GET".equals(method))
|
||||
&& target != null
|
||||
&& target.matches("^/diags/?$")
|
||||
) {
|
||||
baseRequest.setHandled(true);
|
||||
|
||||
Log.info(method + " <- /diags");
|
||||
|
||||
String detail;
|
||||
String summary;
|
||||
|
||||
try {
|
||||
detail = execute("vmNativeMemory", "detail");
|
||||
summary = execute("vmNativeMemory", "summary");
|
||||
} catch(JMException e) {
|
||||
Log.error("Failed to get native memory detail: " + e.getMessage());
|
||||
response.setStatus(500);
|
||||
return;
|
||||
}
|
||||
|
||||
response.setContentType("text/plain");
|
||||
response.setStatus(200);
|
||||
|
||||
response.getWriter().write(summary);
|
||||
response.getWriter().write("\n----------\n\n");
|
||||
response.getWriter().write(detail);
|
||||
response.getWriter().flush();
|
||||
}
|
||||
}
|
||||
|
||||
public static String execute(String command, String... args) throws JMException {
|
||||
return (String) ManagementFactory.getPlatformMBeanServer().invoke(
|
||||
new ObjectName("com.sun.management:type=DiagnosticCommand"),
|
||||
command,
|
||||
new Object[]{args},
|
||||
new String[]{"[Ljava.lang.String;"});
|
||||
}
|
||||
}
|
|
@ -128,6 +128,7 @@ public class GitBridgeServer {
|
|||
handlers.addHandler(new HealthCheckHandler(bridge));
|
||||
handlers.addHandler(new GitLfsHandler(bridge));
|
||||
handlers.addHandler(new PrometheusHandler());
|
||||
handlers.addHandler(new DiagnosticsHandler());
|
||||
base.setHandler(handlers);
|
||||
return base;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue