package bekkopen.jetty;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.webapp.WebAppContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import static bekkopen.jetty.H.POST;
import static javax.servlet.http.HttpServletResponse.SC_OK;
public class ShutdownHandler extends AbstractHandler {
private final Server server;
private final WebAppContext context;
private final String secret;
public ShutdownHandler(Server server, WebAppContext context, String secret) {
this.server = server;
this.context = context;
this.secret = secret;
}
public void handle(String target, Request serverRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// System.out.println("ShutdownHandler - handle : " + target + " - " + serverRequest + " : " + request + " - " + response);
String method = request.getMethod();
String secretParam = request.getParameter("secret");
// System.out.println("ShutdownHandler - handle " + target + " : " + method + " : " + secretParam + " - saved secret : "+ secret);
if (!target.equals("/shutdown") || !request.getMethod().equals("POST") || !secret.equals(secretParam)) {
// System.out.println(" - bail out : " + target + " - " + request.getMethod() + " - my secret : " + secret + " == " + request.getParameter("secret"));
return;
}
System.out.println(" - try shut down!");
try {
// You should probably do something clever with this if you handle a lot of transactions etc
// BigIP fortunately handles sessions to my nodes, so I haven't put much effort into this.
response.setStatus(SC_OK);
PrintWriter out = response.getWriter();
out.println("Shutting down");
try { out.close(); } catch (Exception ignored) {}
try { context.stop(); } catch (Exception ignored) {}
try { server.stop(); } catch (Exception ignored) {}
} catch (Exception ignored) {
System.err.println("Failed : " + ignored);
}
System.exit(0);
}
public static String shutdown(int port, String shutdownSecret) {
System.out.println("SHUTDOWN URL : " + "http://127.0.0.1:" + port + "/shutdown?secret=" + shutdownSecret);
return POST("http://127.0.0.1:" + port + "/shutdown?secret=" + shutdownSecret).body;
}
}