package net.juniper.contrail.sandesh; import java.io.IOException; import java.net.InetSocketAddress; import java.util.Properties; import org.apache.log4j.Logger; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import com.google.common.base.Throwables; @SuppressWarnings("restriction") public class VCenterHttpServer implements HttpService { private HttpServer server; private int port = 8234; private final static String webRoot = "/usr/share/contrail-vcenter-plugin/webs"; private final Logger s_logger = Logger.getLogger(VCenterHttpServer.class); public static String getWebRoot() { return webRoot; } public VCenterHttpServer(Properties configProps) { String portStr = configProps.getProperty("introspect.port"); int portConfig = port; if (portStr != null && portStr.length() > 0) { try { portConfig = Integer.parseInt(portStr); if (portConfig < 0 || portConfig > 0xFFFF) { s_logger.error(" Bad HTTP server port " + portStr + " specified in the config file. Reverting to default " + port); } else { port = portConfig; } } catch (NumberFormatException e) { s_logger.error(" Bad HTTP server port " + portStr + " specified in the config file. Reverting to default " + port); } } // register shutdown hook Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { if (server != null) { s_logger.info("Stopping HTTP server on port " + port + " ..."); server.stop(0); } } }, "shutdownHook")); try { server = HttpServer.create(new InetSocketAddress(port), 0); server.setExecutor(null); // creates a default executor server.start(); } catch (IOException e) { s_logger.error(" Cannot start HTTP server on port " + port + " due to exception " + e); s_logger.error(Throwables.getStackTraceAsString(e)); } if (server == null) { s_logger.error(" Cannot start HTTP server on port " + port); } else { s_logger.info("HTTP server on port " + port + " started."); } } @Override public void registerHandler(String path, HttpHandler h) { if (server != null) { server.createContext(path, h); } } }