aurora-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zma...@apache.org
Subject [42/51] [partial] aurora git commit: Move packages from com.twitter.common to org.apache.aurora.common
Date Wed, 26 Aug 2015 21:00:32 GMT
http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/GuiceServletConfig.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/GuiceServletConfig.java b/commons/src/main/java/com/twitter/common/net/http/GuiceServletConfig.java
deleted file mode 100644
index ab2f110..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/GuiceServletConfig.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.servlet.GuiceServletContextListener;
-
-import javax.servlet.ServletContextEvent;
-import java.util.logging.Logger;
-
-/**
- * A wrapper around the GuiceServletContextListener that has access to the injector.
- *
- * @author Florian Leibert
- */
-public class GuiceServletConfig extends GuiceServletContextListener {
-  private final Injector injector;
-
-  @Inject
-  public GuiceServletConfig(Injector injector) {
-    this.injector = Preconditions.checkNotNull(injector);
-  }
-
-  @Override
-  protected Injector getInjector() {
-    return injector;
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/HttpServerDispatch.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/HttpServerDispatch.java b/commons/src/main/java/com/twitter/common/net/http/HttpServerDispatch.java
deleted file mode 100644
index d5221a4..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/HttpServerDispatch.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-import javax.servlet.Filter;
-import javax.servlet.ServletContextAttributeListener;
-import javax.servlet.ServletContextListener;
-import javax.servlet.ServletRequestAttributeListener;
-import javax.servlet.ServletRequestListener;
-import javax.servlet.http.HttpServlet;
-
-/**
- * A HTTP server dispatcher. Supports registering handlers for different
- * URI paths, which will be called when a request is received.
- *
- * @author Florian Leibert
- */
-public interface HttpServerDispatch {
-
-  /**
-   * Opens the HTTP server on the given port.
-   *
-   * @param port The port to listen on.
-   * @return {@code true} if the server started successfully on the port, {@code false} otherwise.
-   */
-  boolean listen(int port);
-
-  /**
-   * Opens the HTTP server on random port within the given range.
-   *
-   * @param minPort The minimum port number to listen on.
-   * @param maxPort The maximum port number to listen on.
-   * @return {@code true} if the server started successfully on the port, {@code false} otherwise.
-   */
-  boolean listen(int minPort, int maxPort);
-
-  /**
-   * @return true if the underlying HttpServer is started, false otherwise.
-   */
-  boolean isStarted();
-
-  /**
-   * @return the port the underlying HttpServer is listening on, which requires
-   *         the underlying HttpServer to be started and listening.
-   */
-  int getPort();
-
-  /**
-   * Stops the HTTP server.
-   */
-  void stop();
-
-  /**
-   * Adds an arbitrary endpoint to the root servlet.
-   * This can be used to include convenience links, or references to endpoints served by
-   * a different servlet container under this HTTP server.
-   *
-   * @param path The URI path of the endpoint.
-   */
-  void registerIndexLink(String path);
-
-  /**
-   * Registers a URI handler, replacing the existing handler if it exists.
-   *
-   * @param path       The URI path that the handler should be called for.
-   * @param handler    The handler to call.
-   * @param initParams An optional map of servlet init parameter names and their values.
-   * @param silent     Whether to display the registered handler in the root "/" response.
-   *                   Useful for handlers that you want to avoid accidental clicks on.
-   */
-  void registerHandler(String path, HttpServlet handler,
-                       @Nullable Map<String, String> initParams, boolean silent);
-
-  /**
-   * Registers a servlet filter.
-   *
-   * @param filterClass Filter class to register.
-   * @param pathSpec Path spec that the filter should be activated on.
-   */
-  void registerFilter(Class<? extends Filter> filterClass, String pathSpec);
-
-  /**
-   * Registers a context listener.
-   *
-   * @param servletContextListener Listener to register.
-   */
-  void registerListener(ServletContextListener servletContextListener);
-
-  /**
-   * Registers a context attribute listener.
-   *
-   * @param servletContextAttributeListener Listener to register.
-   */
-  void registerListener(ServletContextAttributeListener servletContextAttributeListener);
-
-  /**
-   * Registers a request listener.
-   *
-   * @param servletRequestListener Listener to register.
-   */
-  void registerListener(ServletRequestListener servletRequestListener);
-
-  /**
-   * Registers a request attribute listener.
-   *
-   * @param servletRequestAttributeListener Listener to register.
-   */
-  void registerListener(ServletRequestAttributeListener servletRequestAttributeListener);
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/JettyHttpServerDispatch.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/JettyHttpServerDispatch.java b/commons/src/main/java/com/twitter/common/net/http/JettyHttpServerDispatch.java
deleted file mode 100644
index 378cc0d..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/JettyHttpServerDispatch.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http;
-
-import java.io.IOException;
-import java.util.EventListener;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.annotation.Nullable;
-import javax.servlet.Filter;
-import javax.servlet.ServletContextAttributeListener;
-import javax.servlet.ServletContextListener;
-import javax.servlet.ServletRequestAttributeListener;
-import javax.servlet.ServletRequestListener;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
-
-import org.mortbay.jetty.AbstractConnector;
-import org.mortbay.jetty.Connector;
-import org.mortbay.jetty.Handler;
-import org.mortbay.jetty.RequestLog;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.handler.RequestLogHandler;
-import org.mortbay.jetty.nio.SelectChannelConnector;
-import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.ServletHolder;
-
-import com.twitter.common.base.MorePreconditions;
-import com.twitter.common.net.http.handlers.TextResponseHandler;
-
-/**
- * A simple multi-threaded HTTP server dispatcher.  Supports registering handlers for different
- * URI paths, which will be called when a request is received.
- *
- * @author William Farner
- */
-public class JettyHttpServerDispatch implements HttpServerDispatch {
-  private static final Logger LOG = Logger.getLogger(JettyHttpServerDispatch.class.getName());
-
-  // Registered endpoints. Used only for display.
-  private final Set<String> registeredEndpoints = Sets.newHashSet();
-
-  private final Optional<RequestLog> requestLog;
-  private Server server;
-  private Context context;
-  private int port;
-
-  /**
-   * Creates an HTTP server.
-   */
-  public JettyHttpServerDispatch() {
-    this.requestLog = Optional.absent();
-  }
-
-  /**
-   * Creates an HTTP server which will be configured to log requests to the provided request log.
-   *
-   * @param requestLog HTTP request log.
-   */
-  @Inject
-  public JettyHttpServerDispatch(RequestLog requestLog) {
-    this.requestLog = Optional.of(requestLog);
-  }
-
-  /**
-   * Opens the HTTP server on the given port.
-   *
-   * @param port The port to listen on.
-   * @return {@code true} if the server started successfully on the port, {@code false} otherwise.
-   */
-  public boolean listen(int port) {
-    return listen(port, port);
-  }
-
-  @Override
-  public synchronized boolean listen(int minPort, int maxPort) {
-    boolean state = !isStarted();
-    Preconditions.checkState(state,
-        "HttpServerDispatch has already been started on port: %d", port);
-
-    Connector connector = openConnector(minPort, maxPort);
-    if (connector == null) return false; // Couldn't open a server port.
-    port = connector.getLocalPort();
-
-    server = new Server();
-    server.addConnector(connector);
-    context = new Context(server, "/", Context.NO_SESSIONS);
-    if (requestLog.isPresent()) {
-      RequestLogHandler logHandler = new RequestLogHandler();
-      logHandler.setRequestLog(requestLog.get());
-      context.addHandler(logHandler);
-    }
-
-    context.addServlet(new ServletHolder(new RootHandler()), "/");
-
-    try {
-      server.start();
-      LOG.info("HTTP server is listening on port " + port);
-      return true;
-    } catch (Exception e) {
-      LOG.log(Level.SEVERE, "HTTP server failed to start on port " + connector.getLocalPort(), e);
-      return false;
-    }
-  }
-
-  @Override
-  public synchronized boolean isStarted() {
-    return (server != null) && server.isStarted();
-  }
-
-  @Override
-  public synchronized int getPort() {
-    Preconditions.checkState(isStarted(), "HttpServer must be started before port can be determined");
-    return port;
-  }
-
-  /**
-   * Opens a new Connector which is a Jetty specific way of handling the
-   * lifecycle and configuration of the Jetty server. The connector will
-   * open a Socket on an available port between minPort and maxPort.
-   * A subclass can override this method to modify connector configurations
-   * such as queue-size or header-buffer-size.
-   * @param minPort the minimum port number to bind to.
-   * @param maxPort the maximum port number to bind to.
-   * @return
-   */
-  protected Connector openConnector(int minPort, int maxPort) {
-    if (minPort != 0 || maxPort != 0) {
-      Preconditions.checkState(minPort > 0, "Invalid port range.");
-      Preconditions.checkState(maxPort > 0, "Invalid port range.");
-      Preconditions.checkState(minPort <= maxPort, "Invalid port range.");
-    }
-    int attempts = 0;
-    int port;
-
-    int maxAttempts = minPort == maxPort ? 1 : 5;
-    while (++attempts <= maxAttempts) {
-      if (minPort == maxPort) {
-        port = minPort;
-      } else {
-        port = minPort + new Random().nextInt(maxPort - minPort);
-      }
-      LOG.info("Attempting to listen on port " + port);
-
-      try {
-        // TODO(John Sirois): consider making Connector impl parametrizable
-        AbstractConnector connector = new SelectChannelConnector();
-        connector.setPort(port);
-        // Create the server with a maximum TCP backlog of 50, meaning that when the request queue
-        // exceeds 50, subsequent connections may be rejected.
-        connector.setAcceptQueueSize(50);
-        connector.open();
-        return connector;
-      } catch (IOException e) {
-        LOG.log(Level.WARNING, "Failed to create HTTP server on port " + port, e);
-      }
-    }
-    return null;
-  }
-
-  @Override
-  public synchronized void stop() {
-    if (isStarted()) {
-      try {
-        server.stop();
-      } catch (Exception e) {
-        LOG.log(Level.SEVERE, "Error stopping HTTPServer on " + port, e);
-      }
-    }
-  }
-
-  @Override
-  public synchronized void registerHandler(
-      String path,
-      HttpServlet handler,
-      @Nullable Map<String, String> initParams,
-      boolean silent) {
-
-    Preconditions.checkNotNull(path);
-    Preconditions.checkNotNull(handler);
-    Preconditions.checkState(path.length() > 0);
-    Preconditions.checkState(path.charAt(0) == '/');
-
-    if (silent) {
-      registeredEndpoints.remove(path);
-    } else {
-      registeredEndpoints.add(path);
-    }
-
-    ServletHolder servletHolder = new ServletHolder(handler);
-    if (initParams != null) {
-      servletHolder.setInitParameters(initParams);
-    }
-    getRootContext().addServlet(servletHolder, path.replaceFirst("/?$", "/*"));
-  }
-
-  @Override
-  public synchronized void registerFilter(Class<? extends Filter> filterClass, String pathSpec) {
-    MorePreconditions.checkNotBlank(pathSpec);
-    Preconditions.checkNotNull(filterClass);
-    getRootContext().addFilter(filterClass, pathSpec, Handler.REQUEST);
-  }
-
-  @Override
-  public synchronized void registerIndexLink(String path) {
-    MorePreconditions.checkNotBlank(path);
-    registeredEndpoints.add(path);
-  }
-
-  @Override
-  public void registerListener(ServletContextListener servletContextListener) {
-    registerEventListener(servletContextListener);
-  }
-
-  @Override
-  public void registerListener(ServletContextAttributeListener servletContextAttributeListener) {
-    registerEventListener(servletContextAttributeListener);
-  }
-
-  @Override
-  public void registerListener(ServletRequestListener servletRequestListener) {
-    registerEventListener(servletRequestListener);
-  }
-
-  @Override
-  public void registerListener(ServletRequestAttributeListener servletRequestAttributeListener) {
-    registerEventListener(servletRequestAttributeListener);
-  }
-
-  private synchronized void registerEventListener(EventListener eventListener) {
-    Preconditions.checkNotNull(eventListener);
-    getRootContext().addEventListener(eventListener);
-  }
-
-  public synchronized Context getRootContext() {
-    Preconditions.checkState(context != null, "Context is not yet available. " +
-        "Ensure that listen(...) is called prior to calling this method.");
-    return context;
-  }
-
-  /**
-   * The root handler, which will display the paths at which all handlers are registered.
-   */
-  private class RootHandler extends TextResponseHandler {
-    public RootHandler() {
-      super("text/html");
-    }
-
-    @Override
-    public Iterable<String> getLines(HttpServletRequest request) {
-      List<String> lines = Lists.newArrayList();
-      lines.add("<html>");
-      for (String handler : Ordering.natural().sortedCopy(registeredEndpoints)) {
-        lines.add(String.format("<a href='%s'>%s</a><br />", handler, handler));
-      }
-      lines.add("</html>");
-      return lines;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/RequestLogger.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/RequestLogger.java b/commons/src/main/java/com/twitter/common/net/http/RequestLogger.java
deleted file mode 100644
index 62e03de..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/RequestLogger.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http;
-
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import org.mortbay.component.AbstractLifeCycle;
-import org.mortbay.jetty.HttpHeaders;
-import org.mortbay.jetty.Request;
-import org.mortbay.jetty.RequestLog;
-import org.mortbay.jetty.Response;
-import org.mortbay.util.DateCache;
-
-import com.twitter.common.util.Clock;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A request logger that borrows formatting code from {@link org.mortbay.jetty.NCSARequestLog},
- * but removes unneeded features (writing to file) and logging to java.util.logging.
- */
-public class RequestLogger extends AbstractLifeCycle implements RequestLog {
-
-  private static final Logger LOG = Logger.getLogger(RequestLogger.class.getName());
-
-  private final Clock clock;
-  private final LogSink sink;
-  private final DateCache logDateCache;
-
-  interface LogSink {
-    boolean isLoggable(Level level);
-    void log(Level level, String messagge);
-  }
-
-  RequestLogger() {
-    this(Clock.SYSTEM_CLOCK, new LogSink() {
-      @Override
-      public boolean isLoggable(Level level) {
-        return LOG.isLoggable(level);
-      }
-
-      @Override public void log(Level level, String message) {
-        LOG.log(level, message);
-      }
-    });
-  }
-
-  @VisibleForTesting
-  RequestLogger(Clock clock, LogSink sink) {
-    this.clock = checkNotNull(clock);
-    this.sink = checkNotNull(sink);
-    logDateCache = new DateCache("dd/MMM/yyyy:HH:mm:ss Z", Locale.getDefault());
-    logDateCache.setTimeZoneID("GMT");
-  }
-
-  private String formatEntry(Request request, Response response) {
-    StringBuilder buf = new StringBuilder();
-
-    buf.append(request.getServerName());
-    buf.append(' ');
-
-    String addr = request.getHeader(HttpHeaders.X_FORWARDED_FOR);
-    if (addr == null) {
-      addr = request.getRemoteAddr();
-    }
-
-    buf.append(addr);
-    buf.append(" [");
-    buf.append(logDateCache.format(request.getTimeStamp()));
-    buf.append("] \"");
-    buf.append(request.getMethod());
-    buf.append(' ');
-    buf.append(request.getUri().toString());
-    buf.append(' ');
-    buf.append(request.getProtocol());
-    buf.append("\" ");
-    buf.append(response.getStatus());
-    buf.append(' ');
-    buf.append(response.getContentCount());
-    buf.append(' ');
-
-    String referer = request.getHeader(HttpHeaders.REFERER);
-    if (referer == null) {
-      buf.append("\"-\" ");
-    } else {
-      buf.append('"');
-      buf.append(referer);
-      buf.append("\" ");
-    }
-
-    String agent = request.getHeader(HttpHeaders.USER_AGENT);
-    if (agent == null) {
-      buf.append("\"-\" ");
-    } else {
-      buf.append('"');
-      buf.append(agent);
-      buf.append('"');
-    }
-
-    buf.append(' ');
-    buf.append(clock.nowMillis() - request.getTimeStamp());
-    return buf.toString();
-  }
-
-  @Override
-  public void log(Request request, Response response) {
-    int statusCategory = response.getStatus() / 100;
-    Level level = ((statusCategory == 2) || (statusCategory == 3)) ? Level.FINE : Level.INFO;
-    if (!sink.isLoggable(level)) {
-      return;
-    }
-
-    sink.log(level, formatEntry(request, response));
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/filters/AbstractHttpFilter.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/filters/AbstractHttpFilter.java b/commons/src/main/java/com/twitter/common/net/http/filters/AbstractHttpFilter.java
deleted file mode 100644
index adb53ae..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/filters/AbstractHttpFilter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.filters;
-
-import java.io.IOException;
-
-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;
-
-/**
- * A filter that allows subclass to omit implementations of {@link #init(FilterConfig)} and
- * {@link #destroy()}.
- */
-public abstract class AbstractHttpFilter implements Filter {
-
-  @Override
-  public void init(FilterConfig filterConfig) throws ServletException {
-    // No-op by default.
-  }
-
-  @Override
-  public final void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-      throws IOException, ServletException {
-    doFilter((HttpServletRequest) request, (HttpServletResponse) response, chain);
-  }
-
-  /**
-   * Convenience method to allow subclasses to avoid type casting that may be necessary when
-   * implementing {@link #doFilter(ServletRequest, ServletResponse, FilterChain)}.
-   *
-   * @param request HTTP request.
-   * @param response HTTP response.
-   * @param chain Filter chain.
-   * @throws IOException If there is an error reading the request or writing the response.
-   * @throws ServletException If the filter or chain encounters an error handling the request.
-   */
-  public abstract void doFilter(
-      HttpServletRequest request,
-      HttpServletResponse response,
-      FilterChain chain) throws IOException, ServletException;
-
-  @Override
-  public void destroy() {
-    // No-op by default.
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/filters/HttpStatsFilter.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/filters/HttpStatsFilter.java b/commons/src/main/java/com/twitter/common/net/http/filters/HttpStatsFilter.java
deleted file mode 100644
index a1d80fe..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/filters/HttpStatsFilter.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.filters;
-
-import java.io.IOException;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.reflect.Method;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.logging.Logger;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.Context;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.inject.Inject;
-import com.sun.jersey.api.core.ExtendedUriInfo;
-import com.sun.jersey.api.model.AbstractResourceMethod;
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerResponse;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-
-import com.twitter.common.collections.Pair;
-import com.twitter.common.stats.SlidingStats;
-import com.twitter.common.stats.Stats;
-import com.twitter.common.util.Clock;
-
-/**
- * An HTTP filter that exports counts and timing for requests based on response code.
- */
-public class HttpStatsFilter extends AbstractHttpFilter implements ContainerResponseFilter {
-  /**
-   * Methods tagged with this annotation will be intercepted and stats will be tracked accordingly.
-   */
-  @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD)
-  public @interface TrackRequestStats {
-    /**
-     * Indicates the identifier to use when tracking requests with this annotation.
-     */
-    String value();
-  }
-
-  private static final Logger LOG = Logger.getLogger(HttpStatsFilter.class.getName());
-
-  @VisibleForTesting
-  static final String REQUEST_START_TIME = "request_start_time";
-
-  private final Clock clock;
-  @Context private ExtendedUriInfo extendedUriInfo;
-
-  @VisibleForTesting
-  final LoadingCache<Pair<String, Integer>, SlidingStats> requestCounters =
-      CacheBuilder.newBuilder()
-          .build(new CacheLoader<Pair<String, Integer>, SlidingStats>() {
-            @Override
-            public SlidingStats load(Pair<String, Integer> identifierAndStatus) {
-              return new SlidingStats("http_" + identifierAndStatus.getFirst() + "_"
-                  + identifierAndStatus.getSecond() + "_responses", "nanos");
-            }
-          });
-
-  @Context private HttpServletRequest servletRequest;
-
-  @VisibleForTesting
-  final LoadingCache<Integer, SlidingStats> statusCounters = CacheBuilder.newBuilder()
-      .build(new CacheLoader<Integer, SlidingStats>() {
-        @Override
-        public SlidingStats load(Integer status) {
-          return new SlidingStats("http_" + status + "_responses", "nanos");
-        }
-      });
-
-  @VisibleForTesting
-  final AtomicLong exceptionCount = Stats.exportLong("http_request_exceptions");
-
-  @Inject
-  public HttpStatsFilter(Clock clock) {
-    this.clock = Preconditions.checkNotNull(clock);
-  }
-
-  private void trackStats(int status) {
-    long endTime = clock.nowNanos();
-
-    Object startTimeAttribute = servletRequest.getAttribute(REQUEST_START_TIME);
-    if (startTimeAttribute == null) {
-      LOG.fine("No start time attribute was found on the request, this filter should be wired"
-          + " as both a servlet filter and a container filter.");
-      return;
-    }
-
-    long elapsed = endTime - ((Long) startTimeAttribute).longValue();
-    statusCounters.getUnchecked(status).accumulate(elapsed);
-
-    AbstractResourceMethod matchedMethod =  extendedUriInfo.getMatchedMethod();
-    // It's possible for no method to have matched, e.g. in the case of a 404, don't let those
-    // cases lead to an exception and a 500 response.
-    if (matchedMethod == null) {
-      return;
-    }
-
-    TrackRequestStats trackRequestStats = matchedMethod.getAnnotation(TrackRequestStats.class);
-
-    if (trackRequestStats == null) {
-      Method method = matchedMethod.getMethod();
-      LOG.fine("The method that handled this request (" + method.getDeclaringClass() + "#"
-          + method.getName() + ") is not annotated with " + TrackRequestStats.class.getSimpleName()
-          + ". No request stats will recorded.");
-      return;
-    }
-
-    requestCounters.getUnchecked(Pair.of(trackRequestStats.value(), status)).accumulate(elapsed);
-  }
-
-  @Override
-  public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
-    trackStats(response.getStatus());
-
-    return response;
-  }
-
-  @Override
-  public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
-      throws IOException, ServletException {
-
-    long startTime = clock.nowNanos();
-    request.setAttribute(REQUEST_START_TIME, startTime);
-
-    try {
-      chain.doFilter(request, response);
-    } catch (IOException e) {
-      exceptionCount.incrementAndGet();
-      throw e;
-    } catch (ServletException e) {
-      exceptionCount.incrementAndGet();
-      throw e;
-    }
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/AbortHandler.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/AbortHandler.java b/commons/src/main/java/com/twitter/common/net/http/handlers/AbortHandler.java
deleted file mode 100644
index cf6d25c..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/AbortHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
-/**
- * A servlet that provides a way to remotely terminate the running process immediately.
- */
-public class AbortHandler extends HttpServlet {
-
-  /**
-   * A {@literal @Named} binding key for the QuitHandler listener.
-   */
-  public static final String ABORT_HANDLER_KEY =
-      "com.twitter.common.net.http.handlers.AbortHandler.listener";
-
-  private static final Logger LOG = Logger.getLogger(AbortHandler.class.getName());
-
-  private final Runnable abortListener;
-
-  /**
-   * Constructs a new AbortHandler that will notify the given {@code abortListener} when the servlet
-   * is accessed.  It is the responsibility of the listener to initiate an immediate shutdown of
-   * the system.
-   *
-   * @param abortListener Runnable to notify when the servlet is accessed.
-   */
-  @Inject
-  public AbortHandler(@Named(ABORT_HANDLER_KEY) Runnable abortListener) {
-    this.abortListener = Preconditions.checkNotNull(abortListener);
-  }
-
-  @Override
-  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-    LOG.info(String.format("Received abort HTTP signal from %s (%s)",
-        req.getRemoteAddr(), req.getRemoteHost()));
-
-    resp.setContentType("text/plain");
-    PrintWriter writer = resp.getWriter();
-    try {
-      writer.println("Aborting process NOW!");
-      writer.close();
-      abortListener.run();
-    } catch (Exception e) {
-      LOG.log(Level.WARNING, "Abort failed.", e);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/AssetHandler.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/AssetHandler.java b/commons/src/main/java/com/twitter/common/net/http/handlers/AssetHandler.java
deleted file mode 100644
index 83d139b..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/AssetHandler.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Closeables;
-import com.google.common.io.InputSupplier;
-
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Time;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.digest.DigestUtils;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Servlet that is responsible for serving an asset.
- *
- * @author William Farner
- */
-public class AssetHandler extends HttpServlet {
-
-  @VisibleForTesting
-  static final Amount<Integer, Time> CACHE_CONTROL_MAX_AGE_SECS = Amount.of(30, Time.DAYS);
-  private static final String GZIP_ENCODING = "gzip";
-
-  private final StaticAsset staticAsset;
-
-  public static class StaticAsset {
-    private final InputSupplier<? extends InputStream> inputSupplier;
-    private final String contentType;
-    private final boolean cacheLocally;
-
-    private byte[] gzipData = null;
-    private String hash = null;
-
-    /**
-     * Creates a new static asset.
-     *
-     * @param inputSupplier Supplier of the input stream from which to load the asset.
-     * @param contentType HTTP content type of the asset.
-     * @param cacheLocally If {@code true} the asset will be loaded once and stored in memory, if
-     *    {@code false} it will be loaded on each request.
-     */
-    public StaticAsset(InputSupplier<? extends InputStream> inputSupplier,
-        String contentType, boolean cacheLocally) {
-      this.inputSupplier = checkNotNull(inputSupplier);
-      this.contentType = checkNotNull(contentType);
-      this.cacheLocally = cacheLocally;
-    }
-
-    public String getContentType() {
-      return contentType;
-    }
-
-    public synchronized byte[] getRawData() throws IOException {
-      byte[] zipData = getGzipData();
-      GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(zipData));
-      return ByteStreams.toByteArray(in);
-    }
-
-    public synchronized byte[] getGzipData() throws IOException {
-      byte[] data = gzipData;
-      // Ensure we don't double-read after a call to getChecksum().
-      if (!cacheLocally || gzipData == null) {
-        load();
-        data = gzipData;
-      }
-      if (!cacheLocally) {
-        gzipData = null;
-      }
-
-      return data;
-    }
-
-    public synchronized String getChecksum() throws IOException {
-      if (hash == null) {
-        load();
-      }
-      return hash;
-    }
-
-    private void load() throws IOException {
-      ByteArrayOutputStream gzipBaos = new ByteArrayOutputStream();
-      GZIPOutputStream gzipStream = new GZIPOutputStream(gzipBaos);
-      ByteStreams.copy(inputSupplier, gzipStream);
-      gzipStream.flush();  // copy() does not flush or close output stream.
-      gzipStream.close();
-      gzipData = gzipBaos.toByteArray();
-
-      // Calculate a checksum of the gzipped data.
-      hash = Base64.encodeBase64String(DigestUtils.md5(gzipData)).trim();
-    }
-  }
-
-  /**
-   * Creates a new asset handler.
-   *
-   * @param staticAsset The asset to serve.
-   */
-  public AssetHandler(StaticAsset staticAsset) {
-    this.staticAsset = checkNotNull(staticAsset);
-  }
-
-  @Override
-  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-
-    OutputStream responseBody = resp.getOutputStream();
-
-    if (checksumMatches(req)) {
-      resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-    } else {
-      setPayloadHeaders(resp);
-
-      boolean gzip = supportsGzip(req);
-      if (gzip) {
-        resp.setHeader("Content-Encoding", GZIP_ENCODING);
-      }
-
-      InputStream in = new ByteArrayInputStream(
-          gzip ? staticAsset.getGzipData() : staticAsset.getRawData());
-      ByteStreams.copy(in, responseBody);
-    }
-
-    Closeables.close(responseBody, /* swallowIOException */ true);
-  }
-
-  private void setPayloadHeaders(HttpServletResponse resp) throws IOException {
-    resp.setStatus(HttpServletResponse.SC_OK);
-    resp.setContentType(staticAsset.getContentType());
-    resp.setHeader("Cache-Control", "public,max-age=" + CACHE_CONTROL_MAX_AGE_SECS);
-
-    String checksum = staticAsset.getChecksum();
-    if (checksum != null) {
-      resp.setHeader("ETag", checksum);
-    }
-  }
-
-  private boolean checksumMatches(HttpServletRequest req) throws IOException {
-    // TODO(William Farner): Change this to more fully comply with
-    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26
-    // Specifically - a response to 'If-None-Match: *' should include ETag as well as other
-    // cache-related headers.
-    String suppliedETag = req.getHeader("If-None-Match");
-    if ("*".equals(suppliedETag)) {
-      return true;
-    }
-
-    String checksum = staticAsset.getChecksum();
-    // Note - this isn't a completely accurate check since the tag we end up matching against could
-    // theoretically be the actual tag with some extra characters appended.
-    return (checksum != null) && (suppliedETag != null) && suppliedETag.contains(checksum);
-  }
-
-  private static boolean supportsGzip(HttpServletRequest req) {
-    String header = req.getHeader("Accept-Encoding");
-    return (header != null)
-        && Iterables.contains(Splitter.on(",").trimResults().split(header), GZIP_ENCODING);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/ContentionPrinter.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/ContentionPrinter.java b/commons/src/main/java/com/twitter/common/net/http/handlers/ContentionPrinter.java
deleted file mode 100644
index edde43c..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/ContentionPrinter.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.common.primitives.Longs;
-
-import javax.servlet.http.HttpServletRequest;
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadInfo;
-import java.lang.management.ThreadMXBean;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * HTTP request handler that prints information about blocked threads.
- *
- * @author William Farner
- */
-public class ContentionPrinter extends TextResponseHandler {
-  public ContentionPrinter() {
-    ManagementFactory.getThreadMXBean().setThreadContentionMonitoringEnabled(true);
-  }
-
-  @Override
-  public Iterable<String> getLines(HttpServletRequest request) {
-    List<String> lines = Lists.newLinkedList();
-    ThreadMXBean bean = ManagementFactory.getThreadMXBean();
-
-    Map<Long, StackTraceElement[]> threadStacks = Maps.newHashMap();
-    for (Map.Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces().entrySet()) {
-      threadStacks.put(entry.getKey().getId(), entry.getValue());
-    }
-
-    Set<Long> lockOwners = Sets.newHashSet();
-
-    lines.add("Locked threads:");
-    for (ThreadInfo t : bean.getThreadInfo(bean.getAllThreadIds())) {
-      switch (t.getThreadState()) {
-        case BLOCKED:
-        case WAITING:
-        case TIMED_WAITING:
-          lines.addAll(getThreadInfo(t, threadStacks.get(t.getThreadId())));
-          if (t.getLockOwnerId() != -1) lockOwners.add(t.getLockOwnerId());
-          break;
-      }
-    }
-
-    if (lockOwners.size() > 0) {
-      lines.add("\nLock Owners");
-      for (ThreadInfo t : bean.getThreadInfo(Longs.toArray(lockOwners))) {
-        lines.addAll(getThreadInfo(t, threadStacks.get(t.getThreadId())));
-      }
-    }
-
-    return lines;
-  }
-
-  private static List<String> getThreadInfo(ThreadInfo t, StackTraceElement[] stack) {
-    List<String> lines = Lists.newLinkedList();
-
-    lines.add(String.format("'%s' Id=%d %s",
-        t.getThreadName(), t.getThreadId(), t.getThreadState()));
-    lines.add("Waiting for lock: " + t.getLockName());
-    lines.add("Lock is currently held by thread: " + t.getLockOwnerName());
-    lines.add("Wait time: " + t.getBlockedTime() + " ms.");
-    for (StackTraceElement s : stack) {
-      lines.add(String.format("    " + s.toString()));
-    }
-    lines.add("\n");
-
-    return lines;
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/HealthHandler.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/HealthHandler.java b/commons/src/main/java/com/twitter/common/net/http/handlers/HealthHandler.java
deleted file mode 100644
index 30509fc..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/HealthHandler.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-import com.twitter.common.base.ExceptionalSupplier;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A servlet that provides a crude mechanism for monitoring a service's health.  If the servlet
- * returns {@link #IS_HEALTHY} then the containing service should be deemed healthy.
- *
- * @author John Sirois
- */
-public class HealthHandler extends HttpServlet {
-
-  /**
-   * A {@literal @Named} binding key for the Healthz servlet health checker.
-   */
-  public static final String HEALTH_CHECKER_KEY =
-      "com.twitter.common.net.http.handlers.Healthz.checker";
-
-  /**
-   * The plain text response string this servlet returns in the body of its responses to health
-   * check requests when its containing service is healthy.
-   */
-  public static final String IS_HEALTHY = "OK";
-
-  private static final String IS_NOT_HEALTHY = "SICK";
-
-  private static final Logger LOG = Logger.getLogger(HealthHandler.class.getName());
-
-  private final ExceptionalSupplier<Boolean, ?> healthChecker;
-
-  /**
-   * Constructs a new Healthz that uses the given {@code healthChecker} to determine current health
-   * of the service for at the point in time of each GET request.  The given {@code healthChecker}
-   * should return {@code true} if the service is healthy and {@code false} otherwise.  If the
-   * {@code healthChecker} returns null or throws the service is considered unhealthy.
-   *
-   * @param healthChecker a supplier that is called to perform a health check
-   */
-  @Inject
-  public HealthHandler(@Named(HEALTH_CHECKER_KEY) ExceptionalSupplier<Boolean, ?> healthChecker) {
-    this.healthChecker = Preconditions.checkNotNull(healthChecker);
-  }
-
-  @Override
-  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-
-    resp.setContentType("text/plain");
-    PrintWriter writer = resp.getWriter();
-    try {
-      writer.println(Boolean.TRUE.equals(healthChecker.get()) ? IS_HEALTHY : IS_NOT_HEALTHY);
-    } catch (Exception e) {
-      writer.println(IS_NOT_HEALTHY);
-      LOG.log(Level.WARNING, "Health check failed.", e);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/HttpServletRequestParams.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/HttpServletRequestParams.java b/commons/src/main/java/com/twitter/common/net/http/handlers/HttpServletRequestParams.java
deleted file mode 100644
index 6e75b8d..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/HttpServletRequestParams.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import java.util.logging.Logger;
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Simple utility for parsing HttpServletRequest parameters by type.
- */
-public class HttpServletRequestParams {
-  private static final Logger LOG = Logger.getLogger(HttpServletRequestParams.class.getName());
-
-  /**
-   * Parses an int param from an HttpServletRequest, returns a default value
-   * if the parameter is not set or is not a valid int.
-   */
-  public static int getInt(HttpServletRequest request, String param, int defaultValue) {
-    final String value = request.getParameter(param);
-    int result = defaultValue;
-    if (value != null) {
-      try {
-        result = Integer.parseInt(value);
-      } catch (NumberFormatException e) {
-        LOG.warning("Invalid int for " + param + ": " + value);
-      }
-    }
-    return result;
-  }
-
-  /**
-   * Parses a long param from an HttpServletRequest, returns a defualt value
-   * if the parameter is not set or is not a valid long.
-   */
-  public static long getLong(HttpServletRequest request, String param, long defaultValue) {
-    final String value = request.getParameter(param);
-    long result = defaultValue;
-    if (value != null) {
-      try {
-        result = Long.parseLong(value);
-      } catch (NumberFormatException e) {
-        LOG.warning("Invalid long for " + param + ": " + value);
-      }
-    }
-    return result;
-  }
-
-  /**
-   * Parses a bool param from an HttpServletRequest, returns a default value
-   * if the parameter is not set.  Note that any value that is set will be
-   * considered a legal bool by Boolean.valueOf, defualting to false if not
-   * understood.
-   */
-  public static boolean getBool(HttpServletRequest request, String param, boolean defaultValue) {
-    if (request.getParameter(param) != null) {
-      return Boolean.valueOf(request.getParameter(param));
-    } else {
-      return defaultValue;
-    }
-  }
-
-  /**
-   * Returns a string param from an HttpServletRequest if set, returns a defualt value
-   * if the parameter is not set.
-   */
-  @Nullable
-  public static String getString(HttpServletRequest request, String param,
-                                 @Nullable String defaultValue) {
-    if (request.getParameter(param) != null) {
-      return request.getParameter(param);
-    } else {
-      return defaultValue;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/LogConfig.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/LogConfig.java b/commons/src/main/java/com/twitter/common/net/http/handlers/LogConfig.java
deleted file mode 100644
index b7a30a6..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/LogConfig.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogManager;
-import java.util.logging.Logger;
-import java.util.logging.LoggingMXBean;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import com.google.inject.Inject;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.apache.commons.lang.StringUtils;
-
-import com.twitter.common.base.Closure;
-
-/**
- * Servlet that allows for dynamic adjustment of the logging configuration.
- *
- * @author William Farner
- */
-public class LogConfig extends StringTemplateServlet {
-  private static final List<String> LOG_LEVELS = Lists.newArrayList(
-      Level.SEVERE.getName(),
-      Level.WARNING.getName(),
-      Level.INFO.getName(),
-      Level.CONFIG.getName(),
-      Level.FINE.getName(),
-      Level.FINER.getName(),
-      Level.FINEST.getName(),
-      "INHERIT" // Display value for a null level, the logger inherits from its ancestor.
-  );
-
-  @Inject
-  public LogConfig(@CacheTemplates boolean cacheTemplates) {
-    super("logconfig", cacheTemplates);
-  }
-
-  @Override
-  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-    displayPage(req, resp, true);
-  }
-
-  @Override
-  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-    displayPage(req, resp, false);
-  }
-
-  protected void displayPage(final HttpServletRequest req, HttpServletResponse resp,
-      final boolean posted) throws ServletException, IOException {
-    writeTemplate(resp, new Closure<StringTemplate>() {
-      @Override public void execute(StringTemplate stringTemplate) {
-        LoggingMXBean logBean = LogManager.getLoggingMXBean();
-
-        if (posted) {
-          String loggerName = req.getParameter("logger");
-          String loggerLevel = req.getParameter("level");
-          if (loggerName != null && loggerLevel != null) {
-            Logger logger = Logger.getLogger(loggerName);
-            Level newLevel = loggerLevel.equals("INHERIT") ? null : Level.parse(loggerLevel);
-            logger.setLevel(newLevel);
-            if (newLevel != null) {
-              maybeAdjustHandlerLevels(logger, newLevel);
-            }
-
-            stringTemplate.setAttribute("configChange",
-                String.format("%s level changed to %s", loggerName, loggerLevel));
-          }
-        }
-
-        List<LoggerConfig> loggerConfigs = Lists.newArrayList();
-        for (String logger : Ordering.natural().immutableSortedCopy(logBean.getLoggerNames())) {
-          loggerConfigs.add(new LoggerConfig(logger, logBean.getLoggerLevel(logger)));
-        }
-
-        stringTemplate.setAttribute("loggers", loggerConfigs);
-        stringTemplate.setAttribute("levels", LOG_LEVELS);
-      }
-    });
-  }
-
-  private void maybeAdjustHandlerLevels(Logger logger, Level newLevel) {
-    do {
-      for (Handler handler : logger.getHandlers()) {
-        Level handlerLevel = handler.getLevel();
-        if (newLevel.intValue() < handlerLevel.intValue()) {
-          handler.setLevel(newLevel);
-        }
-      }
-    } while (logger.getUseParentHandlers() && (logger = logger.getParent()) != null);
-  }
-
-  private class LoggerConfig {
-    private final String name;
-    private final String level;
-
-    public LoggerConfig(String name, String level) {
-      this.name = name;
-      this.level = StringUtils.isBlank(level) ? "INHERIT" : level;
-    }
-
-    public String getName() {
-      return name;
-    }
-
-    public String getLevel() {
-      return level;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/LogPrinter.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/LogPrinter.java b/commons/src/main/java/com/twitter/common/net/http/handlers/LogPrinter.java
deleted file mode 100644
index 3c69df2..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/LogPrinter.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.RandomAccessFile;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Charsets;
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.io.Files;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
-import org.antlr.stringtemplate.StringTemplate;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-
-import com.twitter.common.base.Closure;
-import com.twitter.common.base.MorePreconditions;
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Data;
-
-/**
- * HTTP handler to page through log files. Supports GET and POST requests.  GET requests are
- * responsible for fetching chrome and javascript, while the POST requests are used to fetch actual
- * log data.
- */
-public class LogPrinter extends StringTemplateServlet {
-  private static final Logger LOG = Logger.getLogger(LogPrinter.class.getName());
-
-  /**
-   * A {@literal @Named} binding key for the log directory to display by default.
-   */
-  public static final String LOG_DIR_KEY =
-        "com.twitter.common.net.http.handlers.LogPrinter.log_dir";
-
-  private static final int DEFAULT_PAGE = 0;
-
-  private static final int PAGE_CHUNK_SIZE_BYTES = Amount.of(512, Data.KB).as(Data.BYTES);
-  private static final int TAIL_START_BYTES = Amount.of(10, Data.KB).as(Data.BYTES);
-  private static final int PAGE_END_BUFFER_SIZE_BYTES = Amount.of(1, Data.KB).as(Data.BYTES);
-
-  private static final String XML_RESP_FORMAT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-                                              + "<logchunk text=\"%s\""
-                                              + " end_pos=\"%d\">"
-                                              + "</logchunk>";
-  private final File logDir;
-
-  @Inject
-  public LogPrinter(@Named(LOG_DIR_KEY) File logDir, @CacheTemplates boolean cacheTemplates) {
-    super("logprinter", cacheTemplates);
-    this.logDir = Preconditions.checkNotNull(logDir);
-  }
-
-  /**
-   * A POST request is made from javascript, to request the contents of a log file.  In order to
-   * fulfill the request, the 'file' parameter must be set in the request.
-   *
-   * If file starts with a '/' then the file parameter will be treated as an absolute file path.
-   * If file does not start with a '/' then the path will be assumed to be
-   * relative to the log directory.
-   *
-   * @param req Servlet request.
-   * @param resp Servlet response.
-   * @throws ServletException If there is a problem with the servlet.
-   * @throws IOException If there is a problem reading/writing data to the client.
-   */
-  @Override
-  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-    resp.setContentType("text/xml; charset=utf-8");
-
-    try {
-      LogViewRequest request = new LogViewRequest(req);
-
-      if (request.file == null) {
-        // The log file is a required parameter for POST requests.
-        resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
-        return;
-      }
-
-      resp.setStatus(HttpServletResponse.SC_OK);
-      PrintWriter responseBody = resp.getWriter();
-
-      String responseXml = fetchXmlLogContents(request);
-      responseBody.write(responseXml);
-      responseBody.close();
-    } catch (Exception e) {
-      LOG.log(Level.SEVERE, "Unknown exception.", e);
-      resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-    }
-  }
-
-  /**
-   * Fetches the chrome for the page.  If a file is requested, a page will be returned that uses an
-   * AJAX request to fetch the log contents.  If no file is specified, then a file listing is
-   * displayed.
-   *
-   * @param req Servlet request.
-   * @param resp Servlet response.
-   * @throws ServletException If there is a problem with the servlet.
-   * @throws IOException If there is a problem reading/writing data to the client.
-   */
-  @Override
-  protected void doGet(final HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-    final LogViewRequest request = new LogViewRequest(req);
-
-    if (request.download) {
-      if (request.file == null) {
-        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "No file requested for download.");
-        return;
-      }
-
-      if (!request.file.isRegularFile()) {
-        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Only regular files may be downloaded.");
-        return;
-      }
-
-      try {
-        OutputStream out = resp.getOutputStream();
-        ServletContext context  = getServletConfig().getServletContext();
-        String mimetype = context.getMimeType(request.file.getName());
-
-        resp.setContentType(mimetype != null ? mimetype : "application/octet-stream" );
-        resp.setContentLength((int) request.file.getFile().length());
-        resp.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"",
-            request.file.getName()));
-
-        Files.copy(request.file.getFile(), out);
-      } catch (Exception e) {
-        resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to fetch file.");
-        LOG.warning("Failed to download file " + request.file.getPath() + ": " + e.getMessage());
-      }
-    } else {
-      writeTemplate(resp, new Closure<StringTemplate>() {
-        @Override public void execute(StringTemplate template) {
-
-          // TODO(William Farner): Consider using unix file utility to check if the requested file is a
-          //    text file, and allow the user to download the file if it is not.
-          if (request.isFileViewRequest()) {
-            request.sendToTemplate(template);
-
-            if (!request.tailing) {
-              long readStartPos = getReadStartPos(request.file.getFile(), request.page);
-
-              if (readStartPos > 0) template.setAttribute("prev", request.page + 1);
-              if (request.page > 0) template.setAttribute("next", request.page - 1);
-            }
-          } else {
-            // If a file was not requested, show a list of files.
-            File dir = request.getListingDir();
-
-            List<LogFile> logFiles = Lists.newArrayList();
-            for (File file : dir.listFiles()) {
-              logFiles.add(new LogFile(file));
-            }
-
-            // Sort by dir/file, subsort by name.
-            Collections.sort(logFiles, new Comparator<LogFile>() {
-              @Override public int compare(LogFile fileA, LogFile fileB) {
-                if (fileA.isDir() == fileB.isDir()) {
-                  return fileA.file.getName().compareTo(fileB.file.getName());
-                } else {
-                  return fileA.isDir() ? -1 : 1;
-                }
-              }
-            });
-
-            template.setAttribute("dir", dir);
-            template.setAttribute("parent", dir.getParentFile());
-            template.setAttribute("files", logFiles);
-          }
-        }
-      });
-    }
-  }
-
-  /**
-   * Gets the starting position for reading a page from a file.
-   *
-   * @param file The file to find a page within.
-   * @param page The page index, where page 0 is the last page (at the end of the file).
-   * @return The byte index that the page begins on, or 0 if an invalid page number was provided.
-   */
-  private long getReadStartPos(File file, int page) {
-    return page < 0 ? 0 : Math.max(0, file.length() - (page + 1) * PAGE_CHUNK_SIZE_BYTES);
-  }
-
-  /**
-   * Stores request parameters and assigns default values.
-   */
-  private class LogViewRequest {
-    public static final String DIR_PARAM = "dir";
-    public static final String FILE_PARAM = "file";
-    public static final String PAGE_PARAM = "page";
-    public static final String FILTER_PARAM = "filter";
-    public static final String TAIL_PARAM = "tail";
-    public static final String START_POS_PARAM = "start_pos";
-    public static final String DOWNLOAD_PARAM = "download";
-
-    public final File dir;
-    public final LogFile file;
-    public final boolean download;
-    public final int page;
-    public final long startPos;
-    public final String filter;
-    public final boolean tailing;
-
-    public LogViewRequest(HttpServletRequest req) {
-      dir = req.getParameter(DIR_PARAM) == null ? null : new File(req.getParameter(DIR_PARAM));
-      file = req.getParameter(FILE_PARAM) ==  null ? null
-          : new LogFile(req.getParameter(FILE_PARAM));
-      download = HttpServletRequestParams.getBool(req, DOWNLOAD_PARAM, false);
-      tailing = HttpServletRequestParams.getBool(req, TAIL_PARAM, false);
-      page = HttpServletRequestParams.getInt(req, PAGE_PARAM, DEFAULT_PAGE);
-      Preconditions.checkArgument(page >= 0);
-
-      startPos = HttpServletRequestParams.getLong(req, START_POS_PARAM, -1);
-      if (file != null) {
-        Preconditions.checkArgument(startPos >= -1 && startPos <= file.getFile().length());
-      }
-      filter = HttpServletRequestParams.getString(req, FILTER_PARAM, "");
-    }
-
-    public boolean isFileViewRequest() {
-      return file != null && file.isRegularFile();
-    }
-
-    public File getListingDir() {
-      if (file != null && file.getFile().isDirectory()) {
-        return file.getFile();
-      } else if (dir != null) {
-        return dir;
-      } else {
-        return logDir;
-      }
-    }
-
-    public void sendToTemplate(StringTemplate template) {
-      template.setAttribute(FILE_PARAM, file);
-      template.setAttribute(PAGE_PARAM, page);
-      template.setAttribute(FILTER_PARAM, filter);
-      template.setAttribute(TAIL_PARAM, tailing);
-    }
-  }
-
-  /**
-   * Class to wrap a log file and offer functions to StringTemplate via reflection.
-   */
-   @VisibleForTesting
-   class LogFile {
-    private final File file;
-
-    public LogFile(File file) {
-      this.file = file;
-    }
-
-    public LogFile(String filePath) {
-      MorePreconditions.checkNotBlank(filePath, "filePath must not be null or empty");
-      this.file = filePath.startsWith("/") ? new File(filePath) : new File(logDir, filePath);
-    }
-
-    public File getFile() {
-      return file;
-    }
-
-    public boolean isDir() {
-      return !isRegularFile();
-    }
-
-    public boolean isRegularFile() {
-      return file.isFile();
-    }
-
-    public String getPath() {
-      return file.getAbsolutePath();
-    }
-
-    public String getName() {
-      return file.getName();
-    }
-
-    public String getUrlpath() throws UnsupportedEncodingException {
-      return URLEncoder.encode(getPath(), Charsets.UTF_8.name());
-    }
-
-    public String getSize() {
-      Amount<Long, Data> length = Amount.of(file.length(), Data.BYTES);
-
-      if (length.as(Data.GB) > 0) {
-        return length.as(Data.GB) + " GB";
-      } else if (length.as(Data.MB) > 0) {
-        return length.as(Data.MB) + " MB";
-      } else if (length.as(Data.KB) > 0) {
-        return length.as(Data.KB) + " KB";
-      } else {
-        return length.getValue() + " bytes";
-      }
-    }
-  }
-
-  /**
-   * Reads data from a log file and prepares an XML response which includes the (sanitized) log text
-   * and the last position read from the file.
-   *
-   * @param request The request parameters.
-   * @return A string containing the XML-formatted response.
-   * @throws IOException If there was a problem reading the file.
-   */
-  private String fetchXmlLogContents(LogViewRequest request) throws IOException {
-    RandomAccessFile seekFile = new RandomAccessFile(request.file.getFile(), "r");
-    try {
-      // Move to the approximate start of the page.
-      if (!request.tailing) {
-        seekFile.seek(getReadStartPos(request.file.getFile(), request.page));
-      } else {
-        if (request.startPos < 0) {
-          seekFile.seek(Math.max(0, request.file.getFile().length() - TAIL_START_BYTES));
-        } else {
-          seekFile.seek(request.startPos);
-        }
-      }
-
-      byte[] buffer = new byte[PAGE_CHUNK_SIZE_BYTES];
-      int bytesRead = seekFile.read(buffer);
-      long chunkStop = seekFile.getFilePointer();
-      StringBuilder fileChunk = new StringBuilder();
-      if (bytesRead > 0) {
-        fileChunk.append(new String(buffer, 0, bytesRead));
-
-        // Read at most 1 KB more while searching for another line break.
-        buffer = new byte[PAGE_END_BUFFER_SIZE_BYTES];
-        int newlinePos = 0;
-        bytesRead = seekFile.read(buffer);
-        if (bytesRead > 0) {
-          for (byte b : buffer) {
-            newlinePos++;
-            if (b == '\n') break;
-          }
-
-          fileChunk.append(new String(buffer, 0, newlinePos));
-          chunkStop = seekFile.getFilePointer() - (bytesRead - newlinePos);
-        }
-      }
-
-      return logChunkXml(filterLines(fileChunk.toString(), request.filter), chunkStop);
-    } finally {
-      seekFile.close();
-    }
-  }
-
-  private static String sanitize(String text) {
-    text = StringEscapeUtils.escapeHtml(text);
-
-    StringBuilder newString = new StringBuilder();
-    for (char ch : text.toCharArray()) {
-      if ((ch > 0x001F && ch < 0x00FD) || ch == '\t' || ch == '\r') {
-        // Directly include anything from 0x1F (SPACE) to 0xFD (tilde)
-        // as well as tab and carriage-return.
-        newString.append(ch);
-      } else {
-        // Encode everything else.
-        newString.append("&#").append((int) ch).append(";");
-      }
-    }
-    return StringEscapeUtils.escapeXml(newString.toString());
-  }
-
-  private String logChunkXml(String text, long lastBytePosition) {
-    return String.format(XML_RESP_FORMAT, sanitize(text) , lastBytePosition);
-  }
-
-  @VisibleForTesting
-  protected static String filterLines(String text, String filterRegexp) {
-    if (StringUtils.isEmpty(filterRegexp)) return text;
-
-    List<String> lines = Lists.newArrayList(text.split("\n"));
-    final Pattern pattern = Pattern.compile(filterRegexp);
-
-    Iterable<String> filtered = Iterables.filter(lines, new Predicate<String>() {
-      @Override public boolean apply(String line) {
-        return pattern.matcher(line).matches();
-      }
-    });
-
-    return Joiner.on("\n").join(filtered);
-  }
-
-  private class LogConfigException extends Exception {
-    public LogConfigException(String message) {
-      super(message);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/QuitHandler.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/QuitHandler.java b/commons/src/main/java/com/twitter/common/net/http/handlers/QuitHandler.java
deleted file mode 100644
index 38f1596..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/QuitHandler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
-/**
- * A servlet that provides a way to remotely signal the process to initiate a clean shutdown
- * sequence.
- */
-public class QuitHandler extends HttpServlet {
-  private static final Logger LOG = Logger.getLogger(QuitHandler.class.getName());
-
-  /**
-   * A {@literal @Named} binding key for the QuitHandler listener.
-   */
-  public static final String QUIT_HANDLER_KEY =
-      "com.twitter.common.net.http.handlers.QuitHandler.listener";
-
-  private final Runnable quitListener;
-
-  /**
-   * Constructs a new QuitHandler that will notify the given {@code quitListener} when the servlet
-   * is accessed.  It is the responsibility of the listener to initiate a clean shutdown of the
-   * process.
-   *
-   * @param quitListener Runnable to notify when the servlet is accessed.
-   */
-  @Inject
-  public QuitHandler(@Named(QUIT_HANDLER_KEY) Runnable quitListener) {
-    this.quitListener = Preconditions.checkNotNull(quitListener);
-  }
-
-  @Override
-  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
-    LOG.info(String.format("Received quit HTTP signal from %s (%s)",
-        req.getRemoteAddr(), req.getRemoteHost()));
-
-    resp.setContentType("text/plain");
-    PrintWriter writer = resp.getWriter();
-    try {
-      writer.println("Notifying quit listener.");
-      writer.close();
-      new Thread(quitListener).start();
-    } catch (Exception e) {
-      LOG.log(Level.WARNING, "Quit failed.", e);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/StringTemplateServlet.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/StringTemplateServlet.java b/commons/src/main/java/com/twitter/common/net/http/handlers/StringTemplateServlet.java
deleted file mode 100644
index d00e7e5..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/StringTemplateServlet.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.BindingAnnotation;
-
-import com.twitter.common.base.Closure;
-import com.twitter.common.base.MorePreconditions;
-import com.twitter.common.util.templating.StringTemplateHelper;
-import com.twitter.common.util.templating.StringTemplateHelper.TemplateException;
-
-import org.antlr.stringtemplate.StringTemplate;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A base class for servlets that render using the string template templating system.  Subclasses
- * can call one of the {@link #writeTemplate} methods to render their content with the associated
- * template.
- */
-public abstract class StringTemplateServlet extends HttpServlet {
-  private static final String CONTENT_TYPE_TEXT_HTML = "text/html";
-
-  /**
-   * A {@literal @BindingAnnotation} that allows configuration of whether or not
-   * StringTemplateServlets should cache their templates.
-   */
-  @BindingAnnotation
-  @Retention(RetentionPolicy.RUNTIME)
-  @Target({ElementType.PARAMETER, ElementType.METHOD})
-  public @interface CacheTemplates {}
-
-  private static final Logger LOG = Logger.getLogger(StringTemplateServlet.class.getName());
-
-  private final StringTemplateHelper templateHelper;
-
-  /**
-   * Creates a new StringTemplateServlet that expects to find its template located in the same
-   * package on the classpath at '{@code templateName}.st'.
-   *
-   * @param templateName The name of the string template to use.
-   * @param cacheTemplates {@code true} to re-use loaded templates, {@code false} to reload the
-   *     template for each request.
-   */
-  protected StringTemplateServlet(String templateName, boolean cacheTemplates) {
-    templateHelper = new StringTemplateHelper(getClass(), templateName, cacheTemplates);
-  }
-
-  protected final void writeTemplate(
-      HttpServletResponse response,
-      Closure<StringTemplate> parameterSetter) throws IOException {
-
-    writeTemplate(response, CONTENT_TYPE_TEXT_HTML, HttpServletResponse.SC_OK, parameterSetter);
-  }
-
-  protected final void writeTemplate(
-      HttpServletResponse response,
-      String contentType,
-      int status,
-      Closure<StringTemplate> parameterSetter) throws IOException {
-
-    Preconditions.checkNotNull(response);
-    MorePreconditions.checkNotBlank(contentType);
-    Preconditions.checkArgument(status > 0);
-    Preconditions.checkNotNull(parameterSetter);
-
-    try {
-      templateHelper.writeTemplate(response.getWriter(), parameterSetter);
-      response.setStatus(status);
-      response.setContentType(contentType);
-    } catch (TemplateException e) {
-      LOG.log(Level.SEVERE, "Unknown exception.", e);
-      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/TextResponseHandler.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/TextResponseHandler.java b/commons/src/main/java/com/twitter/common/net/http/handlers/TextResponseHandler.java
deleted file mode 100644
index 514e04f..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/TextResponseHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/**
- * A handler that responds to all requests in HTML format.
- *
- * @author William Farner
- */
-public abstract class TextResponseHandler extends HttpServlet {
-  private final String textContentType;
-
-  public TextResponseHandler() {
-    this("text/plain");
-  }
-
-  public TextResponseHandler(String textContentType) {
-    this.textContentType = textContentType;
-  }
-
-  /**
-   * Returns the lines to be printed as the body of the response.
-   *
-   * @return An iterable collection of lines to respond to the request with.
-   */
-  public abstract Iterable<String> getLines(HttpServletRequest request);
-
-  @Override
-  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-
-    resp.setContentType(textContentType);
-    resp.setStatus(HttpServletResponse.SC_OK);
-    PrintWriter responseBody = resp.getWriter();
-    for (String line : getLines(req)) {
-      responseBody.println(line);
-    }
-    responseBody.close();
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/ThreadStackPrinter.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/ThreadStackPrinter.java b/commons/src/main/java/com/twitter/common/net/http/handlers/ThreadStackPrinter.java
deleted file mode 100644
index e5eded4..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/ThreadStackPrinter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import com.google.common.collect.Lists;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-import java.util.Map;
-
-/**
- * HTTP handler to print the stacks of all live threads.
- *
- * @author William Farner
- */
-public class ThreadStackPrinter extends TextResponseHandler {
-  @Override
-  public Iterable<String> getLines(HttpServletRequest request) {
-    List<String> lines = Lists.newLinkedList();
-    for (Map.Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces().entrySet()) {
-      Thread t = entry.getKey();
-      lines.add(String.format("Name: %s\nState: %s\nDaemon: %s\nID: %d",
-          t.getName(), t.getState(), t.isDaemon(), t.getId()));
-      for (StackTraceElement s : entry.getValue()) {
-        lines.add("    " + s.toString());
-      }
-    }
-    return lines;
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/net/http/handlers/ThriftServlet.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/net/http/handlers/ThriftServlet.java b/commons/src/main/java/com/twitter/common/net/http/handlers/ThriftServlet.java
deleted file mode 100644
index bb74fcf..0000000
--- a/commons/src/main/java/com/twitter/common/net/http/handlers/ThriftServlet.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.twitter.common.net.http.handlers;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-import com.twitter.common.base.Closure;
-import com.twitter.common.net.monitoring.TrafficMonitor;
-import org.antlr.stringtemplate.StringTemplate;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Set;
-
-/**
- * Servlet to display live information about registered thrift clients and servers.
- *
- * @author William Farner
- */
-public class ThriftServlet extends StringTemplateServlet {
-
-  /**
-   * {@literal @Named} binding key for client monitor.
-   */
-  public static final String THRIFT_CLIENT_MONITORS =
-      "com.twitter.common.net.http.handlers.ThriftServlet.THRIFT_CLIENT_MONITORS";
-
-  /**
-   * {@literal @Named} binding key for server monitor.
-   */
-  public static final String THRIFT_SERVER_MONITORS =
-      "com.twitter.common.net.http.handlers.ThriftServlet.THRIFT_SERVER_MONITORS";
-
-  private Set<TrafficMonitor> clientMonitors;
-  private Set<TrafficMonitor> serverMonitors;
-
-  @Inject
-  public ThriftServlet(
-      @Named(ThriftServlet.THRIFT_CLIENT_MONITORS) Set<TrafficMonitor> clientMonitors,
-      @Named(ThriftServlet.THRIFT_SERVER_MONITORS) Set<TrafficMonitor> serverMonitors) {
-    super("thrift", true);
-    this.clientMonitors = Preconditions.checkNotNull(clientMonitors);
-    this.serverMonitors = Preconditions.checkNotNull(serverMonitors);
-  }
-
-  @Override
-  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
-      throws ServletException, IOException {
-    writeTemplate(resp, new Closure<StringTemplate>() {
-      @Override public void execute(StringTemplate template) {
-        template.setAttribute("clientMonitors", clientMonitors);
-        template.setAttribute("serverMonitors", serverMonitors);
-      }
-    });
-  }
-}


Mime
View raw message