package com.intuit.tank.vm.settings; /* * #%L * Intuit Tank Api * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.io.File; import javax.enterprise.context.ApplicationScoped; import org.apache.commons.configuration.XMLConfiguration; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * CnrComConfig configurator for the beans config file. * * <br> * Patterns: Singleton * * @author dangleton */ @ApplicationScoped public class TankConfig extends BaseCommonsXmlConfig { private static final long serialVersionUID = 1L; private static final String KEY_VM_MANAGER_NODE = "vm-manager"; private static final String KEY_AGENT_NODE = "agent-config"; private static final String KEY_CONTROLLER_BASE = "controller-base-url"; private static final String KEY_INSTANCE_NAME = "instance-name"; private static final String KEY_DATA_FILE_STORAGE = "data-file-storage"; private static final String KEY_REST_SECURITY_ENABLED = "rest-security-enabled"; private static final String KEY_TMP_FILE_STORAGE = "tmp-file-storage"; private static final String KEY_JAR_FILE_STORAGE = "jar-file-storage"; private static final String KEY_TIMING_FILE_STORAGE = "timing-file-storage"; private static final String KEY_MAIL_NODE = "mail"; private static final String KEY_STANDALONE = "standalone"; private static final String KEY_ENCRYPT_S3 = "s3-encrypt"; private static final Logger LOG = LogManager.getLogger(TankConfig.class); private static final String CONFIG_NAME = "settings.xml"; private static final String KEY_PRODUCTS_NODE = "products"; private static final String KEY_SECURITY_NODE = "security"; private static final String KEY_LOCATIONS_NODE = "locations"; private static final String KEY_LOGIC_STEP_NODE = "logic-step"; private static final String KEY_REPORTING_NODE = "reporting"; private static String configName = CONFIG_NAME; static { File file = new File(configName); LOG.info("checking file " + file.getAbsolutePath() + ": exists=" + file.exists()); if (!file.exists()) { LOG.info("System.getenv('WATS_PROPERTIES') = '" + System.getenv("WATS_PROPERTIES") + "'"); LOG.info("System.getProperty('WATS_PROPERTIES') = '" + System.getProperty("WATS_PROPERTIES") + "'"); if (System.getenv("WATS_PROPERTIES") != null) { configName = System.getenv("WATS_PROPERTIES") + "/" + CONFIG_NAME; } else if (System.getProperty("WATS_PROPERTIES") != null) { configName = System.getProperty("WATS_PROPERTIES") + "/" + CONFIG_NAME; } } LOG.info("Tank Configuration location = " + configName); } private String configPath = configName; private AgentConfig agentConfig; private VmManagerConfig vmManagerConfig; private ProductConfig productConfig; private LocationsConfig locationsConfig; private MailConfig mailConfig; private SecurityConfig securityConfig; private LogicStepConfig logicStepConfig; private ReportingConfig reportingConfig; /** * protected constructor to implement the singleton pattern * * @param configPath * the configuration path */ TankConfig(String configPath) { this.configPath = configPath; readConfig(); } /** * private constructor to implement the singleton pattern * */ public TankConfig() { readConfig(); } /** * @return the Datafile storage root dir */ public String getDataFileStorageDir() { return config.getString(KEY_DATA_FILE_STORAGE, "/mnt/wats/datafiles"); } /** * @return true if rest security is enabled */ public boolean isRestSecurityEnabled() { return config.getBoolean(KEY_REST_SECURITY_ENABLED, false); } /** * @return true if rest security is enabled */ public boolean isS3EncryptionEnabled() { return config.getBoolean(KEY_ENCRYPT_S3, false); } /** * @return the Datafile storage root dir */ public boolean getStandalone() { return config.getBoolean(KEY_STANDALONE, false); } /** * @return the Datafile storage root dir */ public String getTmpDir() { return config.getString(KEY_TMP_FILE_STORAGE, "/mnt/wats/tmpfiles"); } /** * @return the Datafile storage root dir */ public String getJarDir() { return config.getString(KEY_JAR_FILE_STORAGE, "/mnt/wats/jars"); } /** * @return the Datafile storage root dir */ public String getTimingDir() { return config.getString(KEY_TIMING_FILE_STORAGE, "/mnt/wats/timing"); } /** * @return the controller base url */ public String getControllerBase() { return config.getString(KEY_CONTROLLER_BASE, "http://tank.controller/"); } /** * @return the controller base url */ public String getInstanceName() { return config.getString(KEY_INSTANCE_NAME, "prod"); } /** * @return the vmManagerConfig */ public VmManagerConfig getVmManagerConfig() { checkReload(); return vmManagerConfig; } /** * @return the vmManagerConfig */ public AgentConfig getAgentConfig() { checkReload(); return agentConfig; } /** * @return the vmManagerConfig */ public ProductConfig getProductConfig() { checkReload(); return productConfig; } /** * @return the vmManagerConfig */ public LogicStepConfig getLogicStepConfig() { checkReload(); return logicStepConfig; } /** * @return the vmManagerConfig */ public MailConfig getMailConfig() { checkReload(); return mailConfig; } /** * @return the locationsConfig */ public LocationsConfig getLocationsConfig() { return locationsConfig; } /** * @return the vmManagerConfig */ public SecurityConfig getSecurityConfig() { checkReload(); return securityConfig; } /** * @return the reportingConfig */ public ReportingConfig getReportingConfig() { checkReload(); return reportingConfig; } /** * {@inheritDoc} */ @Override protected String getConfigName() { return configPath; } /** * {@inheritDoc} */ @Override protected void initConfig(XMLConfiguration configuration) { vmManagerConfig = new VmManagerConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_VM_MANAGER_NODE)); agentConfig = new AgentConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_AGENT_NODE)); productConfig = new ProductConfig( BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_PRODUCTS_NODE)); locationsConfig = new LocationsConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_LOCATIONS_NODE)); mailConfig = new MailConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_MAIL_NODE)); securityConfig = new SecurityConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_SECURITY_NODE)); logicStepConfig = new LogicStepConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_LOGIC_STEP_NODE)); reportingConfig = new ReportingConfig(BaseCommonsXmlConfig.getChildConfigurationAt(configuration, KEY_REPORTING_NODE)); } }