package ru.yandex.market.graphouse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.springframework.beans.factory.annotation.Value;
import ru.yandex.market.graphouse.data.MetricDataServiceServlet;
import ru.yandex.market.graphouse.search.MetricSearchServlet;
/**
* @author Dmitry Andreev <a href="mailto:AndreevDm@yandex-team.ru"></a>
* @date 08/04/15
*/
public class GraphouseWebServer {
private static final Logger log = LogManager.getLogger();
@Value("${graphouse.http.port}")
private int httpPort;
@Value("${graphouse.http.threads}")
private int threadCount;
private final MetricSearchServlet metricSearchServlet;
private final MonitoringServlet monitoringServlet;
private final MetricDataServiceServlet metricDataServiceServlet;
public GraphouseWebServer(MetricSearchServlet metricSearchServlet,
MonitoringServlet monitoringServlet,
MetricDataServiceServlet metricDataServiceServlet) {
this.metricSearchServlet = metricSearchServlet;
this.monitoringServlet = monitoringServlet;
this.metricDataServiceServlet = metricDataServiceServlet;
}
private void startServer() throws Exception {
log.info("Starting http server on port " + httpPort);
Server server = new Server(new QueuedThreadPool(threadCount));
ServerConnector serverConnector = new ServerConnector(server);
serverConnector.setPort(httpPort);
server.setConnectors(new Connector[]{serverConnector});
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
ServletHolder metricSearchServletHolder = new ServletHolder(metricSearchServlet);
context.addServlet(metricSearchServletHolder, "/search/*");
context.addServlet(metricSearchServletHolder, "/ban/*");
context.addServlet(metricSearchServletHolder, "/multiBan/*");
context.addServlet(metricSearchServletHolder, "/approve/*");
context.addServlet(metricSearchServletHolder, "/multiApprove/*");
context.addServlet(metricSearchServletHolder, "/hide/*");
context.addServlet(metricSearchServletHolder, "/multiHide/*");
ServletHolder monitoringServletHolder = new ServletHolder(monitoringServlet);
context.addServlet(monitoringServletHolder, "/ping");
context.addServlet(monitoringServletHolder, "/monitoring");
ServletHolder metricDataServletHolder = new ServletHolder(metricDataServiceServlet);
context.addServlet(metricDataServletHolder, "/metricData");
HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
server.setHandler(handlers);
server.start();
log.info("Web server started on port " + httpPort);
}
}