package ru.yandex.market.graphouse; import ru.yandex.market.graphouse.monitoring.Monitoring; import ru.yandex.market.graphouse.search.MetricSearch; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author Dmitry Andreev <a href="mailto:AndreevDm@yandex-team.ru"></a> * @date 27/04/15 */ public class MonitoringServlet extends HttpServlet { private final Monitoring monitoring; private final MetricSearch metricSearch; private final boolean allowColdRun; public MonitoringServlet(Monitoring monitoring, MetricSearch metricSearch, boolean allowColdRun) { this.monitoring = monitoring; this.metricSearch = metricSearch; this.allowColdRun = allowColdRun; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { switch (req.getRequestURI()) { case "/ping": ping(resp); break; case "/monitoring": monitoring(resp); break; default: resp.getWriter().print("Bad request"); resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); break; } } private void ping(HttpServletResponse resp) throws IOException { if (allowColdRun || metricSearch.isMetricTreeLoaded()) { resp.setStatus(HttpServletResponse.SC_OK); resp.getWriter().print("0;OK"); return; } resp.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); resp.getWriter().println("2;Metric tree not loaded "); } private void monitoring(HttpServletResponse resp) throws IOException { Monitoring.Result result = monitoring.getResult(); switch (result.getStatus()) { case OK: case WARNING: resp.setStatus(HttpServletResponse.SC_OK); break; case CRITICAL: resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); break; default: throw new IllegalStateException(); } resp.getWriter().print(result.toString()); } }