/* * Copyright 2007 T-Rank AS * * 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 no.trank.openpipe.jdbc; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.mortbay.jetty.Server; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @version $Revision$ */ public class JdbcAdmin extends HttpServlet { private static final Logger log = LoggerFactory.getLogger(JdbcAdmin.class); private transient Server server; private transient JdbcPoller jdbcPoller; private transient HtmlJdbcStats jdbcStats; private boolean jettyEnabled; private boolean pollingEnabled; private long intervalMillis; // do not rename to init - would override servlet init public void start() { if(jettyEnabled) { startJetty(); } if(pollingEnabled) { startPolling(); } } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletOutputStream out = resp.getOutputStream(); StringBuilder sb = new StringBuilder(); String cmd = req.getRequestURI().replaceAll("/", ""); String status = ""; if(cmd.equals("startpolling")) { status = startPolling(); } else if(cmd.equals("stoppolling")) { status = stopPolling(); } else if(cmd.equals("stopjetty")) { status = stopJetty(); } sb.append(jdbcStats.getHtml()); sb.append("<br/><br/>"); if(jdbcPoller.isInShutdown()) { sb.append("Polling (in shutdown) --- <a href='startpolling'>Start</a> - Stop"); } else if(jdbcPoller.isRunning()) { sb.append("Polling (running) --- Start - <a href='stoppolling'>Stop</a>"); } else { sb.append("Polling (stopped) --- <a href='startpolling'>Start</a> - Stop"); } sb.append("<br/><a href='stopjetty'>Stop jetty</a>"); if(status != null && status.length() > 0) { sb.append("<br/><br>").append(status); } byte[] b = sb.toString().getBytes(); resp.setContentType("text/html"); resp.setContentLength(b.length); out.write(b); out.flush(); } private String startPolling() { if(jdbcPoller.isInShutdown()) { return "Jdbc poller is in shutdown"; } else if(jdbcPoller.isRunning()) { return "Jdbc poller is already running"; } jdbcPoller.setIntervalMillis(intervalMillis); jdbcPoller.start(); return "Starting jdbc poller on " + intervalMillis + " ms intervals"; } private String stopPolling() { if(jdbcPoller.isInShutdown()) { return "Jdbc poller is in shutdown"; } else if(!jdbcPoller.isRunning()) { return "Jdbc poller has already been stopped"; } jdbcPoller.stop(); return "Stopping jdbc poller"; } private String startJetty() { String ret = ""; try { if(!server.isRunning()) { ret += "Attempting to start jetty."; server.start(); ret += " - Success"; } else { ret += "Jetty is already running."; } } catch (Exception e) { log.error("Error starting jetty", e); ret += " - Error: " + e.toString(); } return ret; } private String stopJetty() { String ret = ""; try { if(server.isRunning()) { ret += "Attempting to stop jetty"; server.stop(); ret += " - Success"; } else { ret += "Jetty has already been stopped."; } } catch (Exception e) { log.warn("Error stopping jetty", e); ret += " - Error: " + e.toString(); } return ret; } // spring setters public void setIntervalMillis(long intervalMillis) { this.intervalMillis = intervalMillis; } public void setJdbcPoller(JdbcPoller jdbcPoller) { this.jdbcPoller = jdbcPoller; } public void setJettyEnabled(boolean jettyEnabled) { this.jettyEnabled = jettyEnabled; } public void setPollingEnabled(boolean pollingEnabled) { this.pollingEnabled = pollingEnabled; } public void setServer(Server server) { this.server = server; } public HtmlJdbcStats getJdbcStats() { return jdbcStats; } public void setJdbcStats(HtmlJdbcStats jdbcStats) { this.jdbcStats = jdbcStats; } }