-/*******************************************************************************\r
- * ============LICENSE_START==================================================\r
- * * org.onap.dmaap\r
- * * ===========================================================================\r
- * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
- * * ===========================================================================\r
- * * Licensed under the Apache License, Version 2.0 (the "License");\r
- * * you may not use this file except in compliance with the License.\r
- * * You may obtain a copy of the License at\r
- * * \r
- * * http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
- * * Unless required by applicable law or agreed to in writing, software\r
- * * distributed under the License is distributed on an "AS IS" BASIS,\r
- * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * * See the License for the specific language governing permissions and\r
- * * limitations under the License.\r
- * * ============LICENSE_END====================================================\r
- * *\r
- * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
- * *\r
- ******************************************************************************/\r
-\r
-\r
-package org.onap.dmaap.datarouter.provisioning;\r
-\r
-import java.security.Security;\r
-import java.util.Properties;\r
-import java.util.Timer;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jetty.server.Connector;\r
-import org.eclipse.jetty.server.Handler;\r
-import org.eclipse.jetty.server.NCSARequestLog;\r
-import org.eclipse.jetty.server.Server;\r
-import org.eclipse.jetty.server.handler.ContextHandlerCollection;\r
-import org.eclipse.jetty.server.handler.DefaultHandler;\r
-import org.eclipse.jetty.server.handler.HandlerCollection;\r
-import org.eclipse.jetty.server.handler.RequestLogHandler;\r
-import org.eclipse.jetty.server.nio.SelectChannelConnector;\r
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;\r
-import org.eclipse.jetty.servlet.FilterHolder;\r
-import org.eclipse.jetty.servlet.FilterMapping;\r
-import org.eclipse.jetty.servlet.ServletContextHandler;\r
-import org.eclipse.jetty.servlet.ServletHolder;\r
-import org.eclipse.jetty.util.ssl.SslContextFactory;\r
-import org.eclipse.jetty.util.thread.QueuedThreadPool;\r
-import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
-import org.onap.dmaap.datarouter.provisioning.utils.LogfileLoader;\r
-import org.onap.dmaap.datarouter.provisioning.utils.PurgeLogDirTask;\r
-import org.onap.dmaap.datarouter.provisioning.utils.ThrottleFilter;\r
-\r
-/**\r
- * <p>\r
- * A main class which may be used to start the provisioning server with an "embedded" Jetty server.\r
- * Configuration is done via the properties file <i>provserver.properties</i>, which should be in the CLASSPATH.\r
- * The provisioning server may also be packaged with a web.xml and started as a traditional webapp.\r
- * </p>\r
- * <p>\r
- * Most of the work of the provisioning server is carried out within the eight servlets (configured below)\r
- * that are used to handle each of the eight types of requests the server may receive.\r
- * In addition, there are background threads started to perform other tasks:\r
- * </p>\r
- * <ul>\r
- * <li>One background Thread runs the {@link LogfileLoader} in order to process incoming logfiles.\r
- * This Thread is created as a side effect of the first successful POST to the /internal/logs/ servlet.</li>\r
- * <li>One background Thread runs the {@link SynchronizerTask} which is used to periodically\r
- * synchronize the database between active and standby servers.</li>\r
- * <li>One background Thread runs the {@link Poker} which is used to notify the nodes whenever\r
- * provisioning data changes.</li>\r
- * <li>One task is run once a day to run {@link PurgeLogDirTask} which purges older logs from the\r
- * /opt/app/datartr/logs directory.</li>\r
- * </ul>\r
- * <p>\r
- * The provisioning server is stopped by issuing a GET to the URL http://127.0.0.1/internal/halt\r
- * using <i>curl</i> or some other such tool.\r
- * </p>\r
- *\r
- * @author Robert Eby\r
- * @version $Id: Main.java,v 1.12 2014/03/12 19:45:41 eby Exp $\r
- */\r
-public class Main {\r
- /** The truststore to use if none is specified */\r
- public static final String DEFAULT_TRUSTSTORE = "/opt/java/jdk/jdk180/jre/lib/security/cacerts";\r
- public static final String KEYSTORE_TYPE_PROPERTY = "com.att.research.datarouter.provserver.keystore.type";\r
- public static final String KEYSTORE_PATH_PROPERTY = "com.att.research.datarouter.provserver.keystore.path";\r
- public static final String KEYSTORE_PASSWORD_PROPERTY = "com.att.research.datarouter.provserver.keystore.password";\r
- public static final String TRUSTSTORE_PATH_PROPERTY = "com.att.research.datarouter.provserver.truststore.path";\r
- public static final String TRUSTSTORE_PASSWORD_PROPERTY = "com.att.research.datarouter.provserver.truststore.password";\r
-\r
- /** The one and only {@link Server} instance in this JVM */\r
- private static Server server;\r
-\r
- /**\r
- * Starts the Data Router Provisioning server.\r
- * @param args not used\r
- * @throws Exception if Jetty has a problem starting\r
- */\r
- public static void main(String[] args) throws Exception {\r
- Security.setProperty("networkaddress.cache.ttl", "4");\r
- Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
-\r
- // Check DB is accessible and contains the expected tables\r
- if (! checkDatabase(logger))\r
- System.exit(1);\r
-\r
- logger.info("PROV0000 **** AT&T Data Router Provisioning Server starting....");\r
-\r
- // Get properties\r
- Properties p = (new DB()).getProperties();\r
- int http_port = Integer.parseInt(p.getProperty("com.att.research.datarouter.provserver.http.port", "8080"));\r
- int https_port = Integer.parseInt(p.getProperty("com.att.research.datarouter.provserver.https.port", "8443"));\r
-\r
- // HTTP connector\r
- SelectChannelConnector http = new SelectChannelConnector();\r
- http.setPort(http_port);\r
- http.setMaxIdleTime(300000);\r
- http.setRequestHeaderSize(2048);\r
- http.setAcceptors(2);\r
- http.setConfidentialPort(https_port);\r
- http.setLowResourcesConnections(20000);\r
-\r
- // HTTPS connector\r
- SslSelectChannelConnector https = new SslSelectChannelConnector();\r
- https.setPort(https_port);\r
- https.setMaxIdleTime(30000);\r
- https.setRequestHeaderSize(8192);\r
- https.setAcceptors(2);\r
-\r
- // SSL stuff\r
- SslContextFactory cf = https.getSslContextFactory();\r
- \r
- /**Skip SSLv3 Fixes*/\r
- cf.addExcludeProtocols("SSLv3");\r
- logger.info("Excluded protocols prov-"+cf.getExcludeProtocols());\r
- /**End of SSLv3 Fixes*/\r
-\r
- cf.setKeyStoreType(p.getProperty(KEYSTORE_TYPE_PROPERTY, "jks"));\r
- cf.setKeyStorePath(p.getProperty(KEYSTORE_PATH_PROPERTY));\r
- cf.setKeyStorePassword(p.getProperty(KEYSTORE_PASSWORD_PROPERTY));\r
- cf.setKeyManagerPassword(p.getProperty("com.att.research.datarouter.provserver.keymanager.password"));\r
- String ts = p.getProperty(TRUSTSTORE_PATH_PROPERTY);\r
- if (ts != null && ts.length() > 0) {\r
- System.out.println("@@ TS -> "+ts);\r
- cf.setTrustStore(ts);\r
- cf.setTrustStorePassword(p.getProperty(TRUSTSTORE_PASSWORD_PROPERTY));\r
- } else {\r
- cf.setTrustStore(DEFAULT_TRUSTSTORE);\r
- cf.setTrustStorePassword("changeit");\r
- }\r
- cf.setTrustStore("/opt/app/datartr/self_signed/cacerts.jks");\r
- cf.setTrustStorePassword("changeit");\r
- cf.setWantClientAuth(true);\r
-\r
- // Servlet and Filter configuration\r
- ServletContextHandler ctxt = new ServletContextHandler(0);\r
- ctxt.setContextPath("/");\r
- ctxt.addServlet(new ServletHolder(new FeedServlet()), "/feed/*");\r
- ctxt.addServlet(new ServletHolder(new FeedLogServlet()), "/feedlog/*");\r
- ctxt.addServlet(new ServletHolder(new PublishServlet()), "/publish/*");\r
- ctxt.addServlet(new ServletHolder(new SubscribeServlet()), "/subscribe/*");\r
- ctxt.addServlet(new ServletHolder(new StatisticsServlet()), "/statistics/*");\r
- ctxt.addServlet(new ServletHolder(new SubLogServlet()), "/sublog/*");\r
- ctxt.addServlet(new ServletHolder(new GroupServlet()), "/group/*"); //Provision groups - Rally US708115 -1610 \r
- ctxt.addServlet(new ServletHolder(new SubscriptionServlet()), "/subs/*");\r
- ctxt.addServlet(new ServletHolder(new InternalServlet()), "/internal/*");\r
- ctxt.addServlet(new ServletHolder(new RouteServlet()), "/internal/route/*");\r
- ctxt.addServlet(new ServletHolder(new DRFeedsServlet()), "/");\r
- ctxt.addFilter (new FilterHolder (new ThrottleFilter()), "/publish/*", FilterMapping.REQUEST);\r
-\r
- ContextHandlerCollection contexts = new ContextHandlerCollection();\r
- contexts.addHandler(ctxt);\r
-\r
- // Request log configuration\r
- NCSARequestLog nrl = new NCSARequestLog();\r
- nrl.setFilename(p.getProperty("com.att.research.datarouter.provserver.accesslog.dir") + "/request.log.yyyy_mm_dd");\r
- nrl.setFilenameDateFormat("yyyyMMdd");\r
- nrl.setRetainDays(90);\r
- nrl.setAppend(true);\r
- nrl.setExtended(false);\r
- nrl.setLogCookies(false);\r
- nrl.setLogTimeZone("GMT");\r
-\r
- RequestLogHandler reqlog = new RequestLogHandler();\r
- reqlog.setRequestLog(nrl);\r
-\r
- // Server's Handler collection\r
- HandlerCollection hc = new HandlerCollection();\r
- hc.setHandlers(new Handler[] { contexts, new DefaultHandler() });\r
- hc.addHandler(reqlog);\r
-\r
- // Server's thread pool\r
- QueuedThreadPool pool = new QueuedThreadPool();\r
- pool.setMinThreads(10);\r
- pool.setMaxThreads(200);\r
- pool.setDetailedDump(false);\r
-\r
- // Daemon to clean up the log directory on a daily basis\r
- Timer rolex = new Timer();\r
- rolex.scheduleAtFixedRate(new PurgeLogDirTask(), 0, 86400000L); // run once per day\r
-\r
- // Start LogfileLoader\r
- LogfileLoader.getLoader();\r
-\r
- // The server itself\r
- server = new Server();\r
- server.setThreadPool(pool);\r
- server.setConnectors(new Connector[] { http, https });\r
- server.setHandler(hc);\r
- server.setStopAtShutdown(true);\r
- server.setSendServerVersion(true);\r
- server.setSendDateHeader(true);\r
- server.setGracefulShutdown(5000); // allow 5 seconds for servlets to wrap up\r
- server.setDumpAfterStart(false);\r
- server.setDumpBeforeStop(false);\r
-\r
- server.start();\r
- server.join();\r
- logger.info("PROV0001 **** AT&T Data Router Provisioning Server halted.");\r
- }\r
-\r
- private static boolean checkDatabase(Logger logger) {\r
- DB db = new DB();\r
- return db.runRetroFits();\r
- }\r
-\r
- /**\r
- * Stop the Jetty server.\r
- */\r
- public static void shutdown() {\r
- new Thread() {\r
- @Override\r
- public void run() {\r
- try {\r
- server.stop();\r
- Thread.sleep(5000L);\r
- System.exit(0);\r
- } catch (Exception e) {\r
- // ignore\r
- }\r
- }\r
- }.start();\r
- }\r
-}\r
+/*******************************************************************************
+ * ============LICENSE_START==================================================
+ * * org.onap.dmaap
+ * * ===========================================================================
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * * ===========================================================================
+ * * Licensed under the Apache License, Version 2.0 (the "License");
+ * * you may not use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License.
+ * * ============LICENSE_END====================================================
+ * *
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * *
+ ******************************************************************************/
+
+
+package org.onap.dmaap.datarouter.provisioning;
+
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.eclipse.jetty.http.HttpVersion;
+import org.eclipse.jetty.server.*;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+import org.eclipse.jetty.server.handler.DefaultHandler;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.server.handler.RequestLogHandler;
+import org.eclipse.jetty.servlet.FilterHolder;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
+import org.onap.aaf.cadi.PropAccess;
+import org.onap.dmaap.datarouter.provisioning.utils.*;
+
+import javax.servlet.DispatcherType;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.Security;
+import java.util.EnumSet;
+import java.util.Properties;
+import java.util.Timer;
+
+/**
+ * <p>
+ * A main class which may be used to start the provisioning server with an "embedded" Jetty server. Configuration is
+ * done via the properties file <i>provserver.properties</i>, which should be in the CLASSPATH. The provisioning server
+ * may also be packaged with a web.xml and started as a traditional webapp.
+ * </p>
+ * <p>
+ * Most of the work of the provisioning server is carried out within the eight servlets (configured below) that are used
+ * to handle each of the eight types of requests the server may receive. In addition, there are background threads
+ * started to perform other tasks:
+ * </p>
+ * <ul>
+ * <li>One background Thread runs the {@link LogfileLoader} in order to process incoming logfiles.
+ * This Thread is created as a side effect of the first successful POST to the /internal/logs/ servlet.</li>
+ * <li>One background Thread runs the {@link SynchronizerTask} which is used to periodically
+ * synchronize the database between active and standby servers.</li>
+ * <li>One background Thread runs the {@link Poker} which is used to notify the nodes whenever
+ * provisioning data changes.</li>
+ * <li>One task is run once a day to run {@link PurgeLogDirTask} which purges older logs from the
+ * /opt/app/datartr/logs directory.</li>
+ * </ul>
+ * <p>
+ * The provisioning server is stopped by issuing a GET to the URL http://127.0.0.1/internal/halt using <i>curl</i> or
+ * some other such tool.
+ * </p>
+ *
+ * @author Robert Eby
+ * @version $Id: Main.java,v 1.12 2014/03/12 19:45:41 eby Exp $
+ */
+public class Main {
+
+ /**
+ * The truststore to use if none is specified
+ */
+ static final String DEFAULT_TRUSTSTORE = "/opt/java/jdk/jdk180/jre/lib/security/cacerts";
+ static final String KEYSTORE_TYPE_PROPERTY = "org.onap.dmaap.datarouter.provserver.keystore.type";
+ static final String KEYSTORE_PATH_PROPERTY = "org.onap.dmaap.datarouter.provserver.keystore.path";
+ static final String KEYSTORE_PASS_PROPERTY = "org.onap.dmaap.datarouter.provserver.keystore.password";
+ static final String TRUSTSTORE_PATH_PROPERTY = "org.onap.dmaap.datarouter.provserver.truststore.path";
+ static final String TRUSTSTORE_PASS_PROPERTY = "org.onap.dmaap.datarouter.provserver.truststore.password";
+ public static final EELFLogger intlogger = EELFManager.getInstance().getLogger("org.onap.dmaap.datarouter.provisioning.internal");
+
+ /**
+ * The one and only {@link Server} instance in this JVM
+ */
+ private static Server server;
+
+ class Inner {
+ InputStream getCadiProps() {
+ InputStream in = null;
+ try {
+ in = getClass().getClassLoader().getResourceAsStream("drProvCadi.properties");
+ } catch (Exception e) {
+ intlogger.error("Exception in Main.getCadiProps(): " + e.getMessage(), e);
+ }
+ return in;
+ }
+ }
+
+ /**
+ * Starts the Data Router Provisioning server.
+ *
+ * @param args not used
+ * @throws Exception if Jetty has a problem starting
+ */
+ public static void main(String[] args) throws Exception {
+ Security.setProperty("networkaddress.cache.ttl", "4");
+ Properties provProperties = (new DB()).getProperties();
+ // Check DB is accessible and contains the expected tables
+ if (!checkDatabase()) {
+ System.exit(1);
+ }
+
+ intlogger.info("PROV0000 **** AT&T Data Router Provisioning Server starting....");
+
+ Security.setProperty("networkaddress.cache.ttl", "4");
+ int httpPort = Integer.parseInt(provProperties.getProperty("org.onap.dmaap.datarouter.provserver.http.port", "8080"));
+ int httpsPort = Integer.parseInt(provProperties.getProperty("org.onap.dmaap.datarouter.provserver.https.port", "8443"));
+
+ // Server's thread pool
+ QueuedThreadPool queuedThreadPool = new QueuedThreadPool();
+ queuedThreadPool.setMinThreads(10);
+ queuedThreadPool.setMaxThreads(200);
+ queuedThreadPool.setDetailedDump(false);
+
+ // The server itself
+ server = new Server(queuedThreadPool);
+ server.setStopAtShutdown(true);
+ server.setStopTimeout(5000);
+ server.setDumpAfterStart(false);
+ server.setDumpBeforeStop(false);
+
+ // Request log configuration
+ NCSARequestLog ncsaRequestLog = new NCSARequestLog();
+ ncsaRequestLog.setFilename(provProperties.getProperty("org.onap.dmaap.datarouter.provserver.accesslog.dir") + "/request.log.yyyy_mm_dd");
+ ncsaRequestLog.setFilenameDateFormat("yyyyMMdd");
+ ncsaRequestLog.setRetainDays(90);
+ ncsaRequestLog.setAppend(true);
+ ncsaRequestLog.setExtended(false);
+ ncsaRequestLog.setLogCookies(false);
+ ncsaRequestLog.setLogTimeZone("GMT");
+
+ RequestLogHandler requestLogHandler = new RequestLogHandler();
+ requestLogHandler.setRequestLog(ncsaRequestLog);
+ server.setRequestLog(ncsaRequestLog);
+
+ // HTTP configuration
+ HttpConfiguration httpConfiguration = new HttpConfiguration();
+ httpConfiguration.setSecureScheme("https");
+ httpConfiguration.setSecurePort(httpsPort);
+ httpConfiguration.setOutputBufferSize(32768);
+ httpConfiguration.setRequestHeaderSize(8192);
+ httpConfiguration.setResponseHeaderSize(8192);
+ httpConfiguration.setSendServerVersion(true);
+ httpConfiguration.setSendDateHeader(false);
+
+ //HTTP Connector
+ HandlerCollection handlerCollection;
+ try (ServerConnector httpServerConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration))) {
+ httpServerConnector.setPort(httpPort);
+ httpServerConnector.setAcceptQueueSize(2);
+ httpServerConnector.setIdleTimeout(300000);
+
+ // SSL Context
+ SslContextFactory sslContextFactory = new SslContextFactory();
+ sslContextFactory.setKeyStoreType(provProperties.getProperty(KEYSTORE_TYPE_PROPERTY, "jks"));
+ sslContextFactory.setKeyStorePath(provProperties.getProperty(KEYSTORE_PATH_PROPERTY));
+ sslContextFactory.setKeyStorePassword(provProperties.getProperty(KEYSTORE_PASS_PROPERTY));
+ sslContextFactory.setKeyManagerPassword(provProperties.getProperty("org.onap.dmaap.datarouter.provserver.keymanager.password"));
+
+ String ts = provProperties.getProperty(TRUSTSTORE_PATH_PROPERTY);
+ if (ts != null && ts.length() > 0) {
+ intlogger.info("@@ TS -> " + ts);
+ sslContextFactory.setTrustStorePath(ts);
+ sslContextFactory.setTrustStorePassword(provProperties.getProperty(TRUSTSTORE_PASS_PROPERTY));
+ } else {
+ sslContextFactory.setTrustStorePath(DEFAULT_TRUSTSTORE);
+ sslContextFactory.setTrustStorePassword("changeit");
+ }
+
+ sslContextFactory.setWantClientAuth(true);
+ sslContextFactory.setExcludeCipherSuites(
+ "SSL_RSA_WITH_DES_CBC_SHA",
+ "SSL_DHE_RSA_WITH_DES_CBC_SHA",
+ "SSL_DHE_DSS_WITH_DES_CBC_SHA",
+ "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+ "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
+ "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"
+ );
+ sslContextFactory.addExcludeProtocols("SSLv3");
+ sslContextFactory.setIncludeProtocols(provProperties.getProperty(
+ "org.onap.dmaap.datarouter.provserver.https.include.protocols", "TLSv1.1|TLSv1.2").trim().split("\\|"));
+
+ intlogger.info("Not supported protocols prov server:-" + String.join(",", sslContextFactory.getExcludeProtocols()));
+ intlogger.info("Supported protocols prov server:-" + String.join(",", sslContextFactory.getIncludeProtocols()));
+ intlogger.info("Not supported ciphers prov server:-" + String.join(",", sslContextFactory.getExcludeCipherSuites()));
+ intlogger.info("Supported ciphers prov server:-" + String.join(",", sslContextFactory.getIncludeCipherSuites()));
+
+ // HTTPS configuration
+ HttpConfiguration httpsConfiguration = new HttpConfiguration(httpConfiguration);
+ httpsConfiguration.setRequestHeaderSize(8192);
+
+ // HTTPS connector
+ try (ServerConnector httpsServerConnector = new ServerConnector(server,
+ new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()),
+ new HttpConnectionFactory(httpsConfiguration))) {
+
+ httpsServerConnector.setPort(httpsPort);
+ httpsServerConnector.setIdleTimeout(30000);
+ httpsServerConnector.setAcceptQueueSize(2);
+
+ // Servlet and Filter configuration
+ ServletContextHandler servletContextHandler = new ServletContextHandler(0);
+ servletContextHandler.setContextPath("/");
+ servletContextHandler.addServlet(new ServletHolder(new FeedServlet()), "/feed/*");
+ servletContextHandler.addServlet(new ServletHolder(new FeedLogServlet()), "/feedlog/*");
+ servletContextHandler.addServlet(new ServletHolder(new PublishServlet()), "/publish/*");
+ servletContextHandler.addServlet(new ServletHolder(new SubscribeServlet()), "/subscribe/*");
+ servletContextHandler.addServlet(new ServletHolder(new StatisticsServlet()), "/statistics/*");
+ servletContextHandler.addServlet(new ServletHolder(new SubLogServlet()), "/sublog/*");
+ servletContextHandler.addServlet(new ServletHolder(new GroupServlet()), "/group/*");
+ servletContextHandler.addServlet(new ServletHolder(new SubscriptionServlet()), "/subs/*");
+ servletContextHandler.addServlet(new ServletHolder(new InternalServlet()), "/internal/*");
+ servletContextHandler.addServlet(new ServletHolder(new RouteServlet()), "/internal/route/*");
+ servletContextHandler.addServlet(new ServletHolder(new DRFeedsServlet()), "/");
+ servletContextHandler.addFilter(new FilterHolder(new ThrottleFilter()), "/publish/*", EnumSet.of(DispatcherType.REQUEST));
+
+ //CADI Filter activation check
+ if (Boolean.parseBoolean(provProperties.getProperty("org.onap.dmaap.datarouter.provserver.cadi.enabled", "false"))) {
+ //Get cadi properties
+ Properties cadiProperties = null;
+ try {
+ intlogger.info("PROV0001 Prov - Loading CADI properties");
+ cadiProperties = new Properties();
+ Inner obj = new Main().new Inner();
+ InputStream in = obj.getCadiProps();
+ cadiProperties.load(in);
+ } catch (IOException ioe) {
+ intlogger.error("PROV0001 Exception loading CADI properties: " + ioe.getMessage(), ioe);
+ }
+ cadiProperties.setProperty("aaf_locate_url", provProperties.getProperty("org.onap.dmaap.datarouter.provserver.cadi.aaf.url", "https://aaf-onap-test.osaaf.org:8095"));
+ intlogger.info("PROV0001 aaf_url set to - " + cadiProperties.getProperty("aaf_url"));
+
+ PropAccess access = new PropAccess(cadiProperties);
+ servletContextHandler.addFilter(new FilterHolder(new DRProvCadiFilter(true, access)), "/*", EnumSet.of(DispatcherType.REQUEST));
+ }
+
+ ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection();
+ contextHandlerCollection.addHandler(servletContextHandler);
+
+ // Server's Handler collection
+ handlerCollection = new HandlerCollection();
+ handlerCollection.setHandlers(new Handler[]{contextHandlerCollection, new DefaultHandler()});
+ handlerCollection.addHandler(requestLogHandler);
+
+ server.setConnectors(new Connector[]{httpServerConnector, httpsServerConnector});
+ }
+ }
+ server.setHandler(handlerCollection);
+
+ // Daemon to clean up the log directory on a daily basis
+ Timer rolex = new Timer();
+ rolex.scheduleAtFixedRate(new PurgeLogDirTask(), 0, 86400000L); // run once per day
+
+ // Start LogfileLoader
+ LogfileLoader.getLoader();
+
+ try {
+ server.start();
+ intlogger.info("Prov Server started-" + server.getState());
+ } catch (Exception e) {
+ intlogger.info("Jetty failed to start. Reporting will we unavailable: " + e.getMessage(), e);
+ }
+ server.join();
+ intlogger.info("PROV0001 **** AT&T Data Router Provisioning Server halted.");
+ }
+
+ private static boolean checkDatabase() {
+ DB db = new DB();
+ return db.runRetroFits();
+ }
+
+ /**
+ * Stop the Jetty server.
+ */
+ static void shutdown() {
+ new Thread(() -> {
+ try {
+ server.stop();
+ Thread.sleep(5000L);
+ System.exit(0);
+ } catch (Exception e) {
+ intlogger.error("Exception in Main.shutdown(): " + e.getMessage(), e);
+ }
+ });
+ }
+}