Skip to content

Instantly share code, notes, and snippets.

@oc
Created April 13, 2011 18:53
Show Gist options
  • Select an option

  • Save oc/918136 to your computer and use it in GitHub Desktop.

Select an option

Save oc/918136 to your computer and use it in GitHub Desktop.
:➜ curl http://localhost:8080/booking/bigip.status
online
active sessions: 0
... Start 2 nettlesere mot appen (som bruker sessions) ...
:➜ curl -X POST http://localhost:8080/booking/bigip.status\?secret\=ABCDEFG\&state\=offline
offline
active sessions: 2
:➜ curl http://localhost:8080/booking/bigip.status
offline
active sessions: 2
➜ date
Wed Apr 13 20:45:16 CEST 2011
... vent 5 min ...
➜ date
Wed Apr 13 20:51:21 CEST 2011
:➜ curl http://localhost:8080/booking/bigip.status
offline
active sessions: 0
package bekkopen.servlet;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class BigIPStatusHandlerFilter implements Filter {
private final String secretToken = "ABCDEFG";
private boolean available = true;
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
handle((HttpServletRequest) request, (HttpServletResponse) response);
}
// don't care about chain.doFilter()
}
private void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
if ("POST".equals(request.getMethod()) && secretToken.equals(request.getParameter("secret"))) {
available = !("offline".equals(request.getParameter("state")));
}
response.setContentType("text/plain");
response.setStatus(available ? 200 : 226);
PrintWriter out = response.getWriter();
out.println(available ? "online" : "offline");
out.println("active sessions: " + HttpSessionCountListener.numberOfSessions() );
out.close();
}
@Override
public void destroy() {}
}
package bekkopen.servlet;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class HttpSessionCountListener implements HttpSessionListener {
private static volatile int numberOfSessions;
public void sessionCreated(HttpSessionEvent se) {
synchronized (HttpSessionCountListener.class) {
numberOfSessions++;
}
}
public void sessionDestroyed(HttpSessionEvent se) {
synchronized (HttpSessionCountListener.class) {
numberOfSessions--;
}
}
public static int numberOfSessions() {
return numberOfSessions;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
metadata-complete="false"
version="2.5">
<!-- ... -->
<filter>
<filter-name>BigIPStatusHandlerFilter</filter-name>
<filter-class>bekkopen.servlet.BigIPStatusHandlerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BigIPStatusHandlerFilter</filter-name>
<url-pattern>/bigip.status</url-pattern>
</filter-mapping>
<!-- ... -->
<listener>
<listener-class>bekkopen.servlet.HttpSessionCountListener</listener-class>
</listener>
<session-config>
<session-timeout>5</session-timeout>
</session-config>
</web-app>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment