/**
* Copyright (C) 2013 Arman Gal
*
* 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.
*/
package org.clevermore.monitor.server;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.clevermore.SmartExecutor;
import org.clevermore.TaskMetadata;
import org.clevermore.monitor.server.constants.SmartPoolsMonitoring;
import org.clevermore.monitor.server.guice.GuiceUtils;
import org.clevermore.monitor.server.guice.MonitoringModule;
import org.clevermore.monitor.server.model.config.MailUpdaterConfig;
import org.clevermore.monitor.server.model.config.ValidateCertificates;
import org.clevermore.monitor.server.services.config.ConfigurationService;
import org.clevermore.monitor.server.tasks.ICertificateScanner;
import org.clevermore.monitor.server.tasks.IJMXConnectorThread;
import org.clevermore.monitor.server.tasks.IPeriodicalUpdater;
import org.clevermore.monitor.server.tasks.IStateUpdaterThread;
import org.clevermore.monitor.shared.config.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
public class ServerStartUp
implements ServletContextListener {
public static Logger logger = LoggerFactory.getLogger(ServerStartUp.class);
@Inject
private SmartExecutor smartExecutor;
@Inject
private IJMXConnectorThread jmxConnectorThread;
@Inject
private IStateUpdaterThread stateUpdaterThread;
@Inject
private IPeriodicalUpdater periodicalUpdater;
@Inject
private ICertificateScanner certificateScanner;
/**
* for extensions to override and initialize other module
*/
public void initGuice() {
GuiceUtils.init(new MonitoringModule());
}
public void loadServerConfig() {
ConfigurationService.getInstance().loadServersConfig(true);
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
loadServerConfig();
initGuice();
GuiceUtils.getInjector().injectMembers(this);
try {
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("version.txt");
byte[] bytes = new byte[resourceAsStream.available()];
resourceAsStream.read(bytes);
String version = new String(bytes);
Version.setVersion(version);
resourceAsStream.close();
} catch (Exception e) {
logger.error(e.getMessage(), e);
Version.setVersion("Unknown");
}
logger.info("Version:{}", Version.getVersion());
logger.info("Starting AbstractJMXConnectorThread");
smartExecutor.scheduleWithFixedDelay(jmxConnectorThread,
5,
60,
TimeUnit.SECONDS,
TaskMetadata.newMetadata(SmartPoolsMonitoring.GENERAL, "CONNECTOR", "jmxConnector"));
logger.info("Starting StateUpdaterThread");
smartExecutor.scheduleWithFixedDelay(stateUpdaterThread,
15,
20,
TimeUnit.SECONDS,
TaskMetadata.newMetadata(SmartPoolsMonitoring.GENERAL, "FULL_REFRESH", "stateUpdater"));
if (getMailUpdaterConfig().isEnabled()) {
logger.info("Starting Periodicat Updater");
smartExecutor.scheduleAtFixedRate(periodicalUpdater,
getMailUpdaterConfig().getPeriod() / 2,
getMailUpdaterConfig().getPeriod(),
TimeUnit.SECONDS,
TaskMetadata.newMetadata(SmartPoolsMonitoring.GENERAL, "MAIL_UPD", "periodicalUpdater"));
}
final ValidateCertificates validateCertificates = ConfigurationService.getInstance().getValidateCertificates();
if (validateCertificates.isValide()) {
logger.info("Starting Certificates Validation Thread");
smartExecutor.scheduleWithFixedDelay(certificateScanner,
0,
24,
TimeUnit.HOURS,
TaskMetadata.newMetadata(SmartPoolsMonitoring.GENERAL, "CERT", "certificateChecker"));
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
logger.info("Context destroued, stopping smart executor");
smartExecutor.shutdown();
}
public MailUpdaterConfig getMailUpdaterConfig() {
return ConfigurationService.getInstance().getServersConfig().getMailUpdaterConfig();
}
}