package net.johnewart.gearman.server.web; import com.fasterxml.jackson.core.JsonFactory; import freemarker.template.Configuration; import freemarker.template.TemplateException; import net.johnewart.gearman.engine.metrics.QueueMetrics; import net.johnewart.gearman.server.util.JobQueueMonitor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.OutputStream; import java.io.OutputStreamWriter; public class DashboardServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html"; private JobQueueMonitor jobQueueMonitor; private QueueMetrics queueMetrics; private static final JsonFactory jsonFactory = new JsonFactory(); private final Logger LOG = LoggerFactory.getLogger(DashboardServlet.class); private static Configuration cfg = new Configuration(); public DashboardServlet(JobQueueMonitor jobQueueMonitor, QueueMetrics queueMetrics) { this.jobQueueMonitor = jobQueueMonitor; this.queueMetrics = queueMetrics; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { cfg.setClassForTemplateLoading(DashboardServlet.class, "templates"); cfg.setTemplateUpdateDelay(0); final boolean queues = Boolean.parseBoolean(req.getParameter("queues")); final String jobQueueName = req.getParameter("jobQueue"); String templateName; try { final OutputStream output = resp.getOutputStream(); OutputStreamWriter wr = new OutputStreamWriter(output); if(queues) { cfg.getTemplate("queues.ftl").process(new StatusView(jobQueueMonitor, queueMetrics), wr); } else { if(jobQueueName != null) { cfg.getTemplate("queue.ftl").process(new JobQueueStatusView(jobQueueMonitor, queueMetrics, jobQueueName), wr); } else { cfg.getTemplate("index.ftl").process(new StatusView(jobQueueMonitor, queueMetrics), wr); } } } catch (IOException ioe) { ioe.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } } }