Search in sources :

Example 1 with DocsysDefaultAppPath

use of io.nosqlbench.docsys.DocsysDefaultAppPath in project nosqlbench by nosqlbench.

the class NBWebServer method run.

public void run() {
    // new InetSocketAddress("")
    Server server = new Server(bindPort);
    handlers = new HandlerList();
    if (this.basePaths.size() == 0 && this.servletClasses.size() == 0) {
        logger.warn("No service endpoints or doc paths have been added. Loading dynamically.");
    }
    RewriteHandler rh = new RewriteHandler();
    // rh.addRule(new RedirectRegexRule("/","/docs/"));
    // rh.addRule(new RedirectPatternRule("/","/docs/"));
    handlers.addHandler(rh);
    // Favicon
    for (Path basePath : basePaths) {
        Path icon = basePath.resolve("/favicon.ico");
        if (Files.exists(icon)) {
            FavIconHandler favIconHandler = new FavIconHandler(basePaths.get(0) + "/favicon.ico", false);
            handlers.addHandler(favIconHandler);
            break;
        }
    }
    if (basePaths.size() == 0) {
        Docs docs = new Docs();
        // Load static path contexts which are published within the runtime.
        docs.merge(DocsysPathLoader.loadStaticPaths());
        // default static copy of the docs app
        if (!docs.getPathMap().containsKey("docsys-app")) {
            docs.merge(new DocsysDefaultAppPath().getDocs());
        }
        basePaths.addAll(docs.getPaths());
    }
    for (Path basePath : basePaths) {
        logger.info("Adding path to server: " + basePath.toString());
        ResourceHandler resourceHandler = new ResourceHandler();
        resourceHandler.setDirAllowed(true);
        resourceHandler.setAcceptRanges(true);
        resourceHandler.setWelcomeFiles(new String[] { "index.html" });
        resourceHandler.setRedirectWelcome(false);
        Resource baseResource = new PathResource(basePath);
        if (basePath.toUri().toString().startsWith("jar:")) {
            try {
                baseResource = JarResource.newResource(basePath.toUri());
            } catch (MalformedURLException e) {
                throw new RuntimeException(e);
            }
        }
        resourceHandler.setBaseResource(baseResource);
        resourceHandler.setCacheControl("no-cache");
        handlers.addHandler(resourceHandler);
    }
    // ResourceConfig statusResourceCfg = new ResourceConfig(DocServerStatusEndpoint.class);
    // statusResourceCfg.property("server", this);
    // ServletContainer statusResourceContainer = new ServletContainer(statusResourceCfg);
    // ServletHolder statusResourceServletHolder = new ServletHolder(statusResourceContainer);
    // getContextHandler().addServlet(statusResourceServletHolder, "/_");
    logger.info("adding " + servletClasses.size() + " context handlers...");
    loadDynamicEndpoints();
    ResourceConfig rc = new ResourceConfig();
    rc.addProperties(contextParams);
    rc.property("server", this);
    ServletContainer container = new ServletContainer(rc);
    ServletHolder servlets = new ServletHolder(container);
    String classnames = this.servletClasses.stream().map(Class::getCanonicalName).collect(Collectors.joining(","));
    rc.property(ServerProperties.PROVIDER_CLASSNAMES, classnames);
    // servlets.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES,
    // classnames
    // );
    ServletContextHandler sch = new ServletContextHandler();
    sch.setContextPath("/*");
    sch.addServlet(servlets, "/*");
    FilterHolder filter = new FilterHolder();
    filter.setInitParameter("allowedOrigins", "*");
    filter.setInitParameter("allowedMethods", "POST,GET,OPTIONS,PUT,DELETE,HEAD");
    filter.setInitParameter("allowedHeaders", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept");
    filter.setInitParameter("preflightMaxAge", "1800");
    filter.setInitParameter("allowCredentials", "true");
    CrossOriginFilter corsFilter = new CrossOriginFilter();
    filter.setFilter(corsFilter);
    FilterMapping filterMapping = new FilterMapping();
    filterMapping.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST));
    filterMapping.setPathSpec("/*");
    filterMapping.setServletName("cross-origin");
    sch.addFilter(filter, "/*", EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC));
    handlers.addHandler(sch);
    // Show contexts
    DefaultHandler defaultHandler = new DefaultHandler();
    defaultHandler.setShowContexts(true);
    defaultHandler.setServeIcon(false);
    handlers.addHandler(defaultHandler);
    // FilterMapping corsMapping = new FilterMapping();
    // corsMapping.set
    // 
    // ServletHandler CorsHandler = new ServletHandler();
    // CorsHandler.setH
    server.setHandler(handlers);
    for (Connector connector : server.getConnectors()) {
        if (connector instanceof AbstractConnector) {
            logger.debug("Setting idle timeout for " + connector + " to 300,000ms");
            ((AbstractConnector) connector).setIdleTimeout(300000);
        }
    }
    try {
        List<Connector> connectors = new ArrayList<>();
        if (bindScheme.equals("http")) {
            ServerConnector sc = new ServerConnector(server);
            sc.setPort(bindPort);
            sc.setHost(bindHost);
            // sc.setDefaultProtocol(bindScheme);
            connectors.add(sc);
        } else if (bindScheme.equals("https")) {
            SslContextFactory.Server server1 = new SslContextFactory.Server();
            ServerConnector sc = new ServerConnector(server, server1);
            sc.setPort(bindPort);
            sc.setHost(bindHost);
            // sc.setDefaultProtocol(bindScheme);
            connectors.add(sc);
        }
        server.setConnectors(connectors.toArray(new Connector[0]));
        server.start();
        System.out.println("Started documentation server at " + bindScheme + "://" + bindHost + ":" + bindPort + "/");
        if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
            System.out.println("Browsing to documentation server at " + bindScheme + "://" + bindHost + ":" + bindPort + "/");
            Desktop.getDesktop().browse(new URI(bindScheme + "://" + bindHost + ":" + bindPort + "/"));
            System.out.println("If the docs app did not open automatically in your browser, open to the the url above.");
        }
        server.join();
    } catch (Exception e) {
        logger.error("error while starting doc server", e);
        e.printStackTrace(System.out);
        System.exit(2);
    }
}
Also used : HandlerList(org.eclipse.jetty.server.handler.HandlerList) MalformedURLException(java.net.MalformedURLException) FilterHolder(org.eclipse.jetty.servlet.FilterHolder) DocsysDefaultAppPath(io.nosqlbench.docsys.DocsysDefaultAppPath) ServletHolder(org.eclipse.jetty.servlet.ServletHolder) ResourceHandler(org.eclipse.jetty.server.handler.ResourceHandler) FilterMapping(org.eclipse.jetty.servlet.FilterMapping) URI(java.net.URI) SslContextFactory(org.eclipse.jetty.util.ssl.SslContextFactory) ResourceConfig(org.glassfish.jersey.server.ResourceConfig) RewriteHandler(org.eclipse.jetty.rewrite.handler.RewriteHandler) Path(java.nio.file.Path) DocsysDefaultAppPath(io.nosqlbench.docsys.DocsysDefaultAppPath) PathResource(org.eclipse.jetty.util.resource.PathResource) JarResource(org.eclipse.jetty.util.resource.JarResource) Resource(org.eclipse.jetty.util.resource.Resource) CrossOriginFilter(org.eclipse.jetty.servlets.CrossOriginFilter) FavIconHandler(io.nosqlbench.docsys.handlers.FavIconHandler) MalformedURLException(java.net.MalformedURLException) DefaultHandler(org.eclipse.jetty.server.handler.DefaultHandler) PathResource(org.eclipse.jetty.util.resource.PathResource) ServletContainer(org.glassfish.jersey.servlet.ServletContainer) Docs(io.nosqlbench.docapi.Docs) ServletContextHandler(org.eclipse.jetty.servlet.ServletContextHandler)

Aggregations

Docs (io.nosqlbench.docapi.Docs)1 DocsysDefaultAppPath (io.nosqlbench.docsys.DocsysDefaultAppPath)1 FavIconHandler (io.nosqlbench.docsys.handlers.FavIconHandler)1 MalformedURLException (java.net.MalformedURLException)1 URI (java.net.URI)1 Path (java.nio.file.Path)1 RewriteHandler (org.eclipse.jetty.rewrite.handler.RewriteHandler)1 DefaultHandler (org.eclipse.jetty.server.handler.DefaultHandler)1 HandlerList (org.eclipse.jetty.server.handler.HandlerList)1 ResourceHandler (org.eclipse.jetty.server.handler.ResourceHandler)1 FilterHolder (org.eclipse.jetty.servlet.FilterHolder)1 FilterMapping (org.eclipse.jetty.servlet.FilterMapping)1 ServletContextHandler (org.eclipse.jetty.servlet.ServletContextHandler)1 ServletHolder (org.eclipse.jetty.servlet.ServletHolder)1 CrossOriginFilter (org.eclipse.jetty.servlets.CrossOriginFilter)1 JarResource (org.eclipse.jetty.util.resource.JarResource)1 PathResource (org.eclipse.jetty.util.resource.PathResource)1 Resource (org.eclipse.jetty.util.resource.Resource)1 SslContextFactory (org.eclipse.jetty.util.ssl.SslContextFactory)1 ResourceConfig (org.glassfish.jersey.server.ResourceConfig)1