blob: f71ccc3f19d0c081b7b531ba862c12ead5c57aeb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 com.epam.dlab.automation.helper;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.Properties;
public class PropertiesResolver {
private static final Logger LOGGER = LogManager.getLogger(PropertiesResolver.class);
public static final boolean DEV_MODE;
private static final String CONFIG_FILE_NAME = "application.properties";
public static final String NOTEBOOK_SCENARIO_FILES_LOCATION_PROPERTY_TEMPLATE = "scenario.%s.files.location";
public static final String NOTEBOOK_TEST_TEMPLATES_LOCATION = "%s.test.templates.location";
public static final String NOTEBOOK_CONFIGURATION_FILE_TEMPLATE = "%s/%s-notebook.json";
//keys from application.properties(dev-application.properties)
private static final String CONF_FILE_LOCATION_PROPERTY = "conf.file.location";
private static final String KEYS_DIRECTORY_LOCATION_PROPERTY = "keys.directory.location";
private static final String NOTEBOOK_TEST_DATA_COPY_SCRIPT = "notebook.test.data.copy.script";
private static final String NOTEBOOK_TEST_LIB_LOCATION = "notebook.test.lib.location";
private static final String SCENARIO_JUPYTER_FILES_LOCATION_PROPERTY = "scenario.jupyter.files.location";
private static final String SCENARIO_RSTUDIO_FILES_LOCATION_PROPERTY = "scenario.rstudio.files.location";
private static final String SCENARIO_ZEPPELIN_FILES_LOCATION_PROPERTY = "scenario.zeppelin.files.location";
private static final String SCENARIO_TENSOR_FILES_LOCATION_PROPERTY = "scenario.tensor.files.location";
private static final String SCENARIO_DEEPLEARNING_FILES_LOCATION_PROPERTY = "scenario.deeplearning.files.location";
private static final String JUPYTER_TEST_TEMPLATES_LOCATION_PROPERTY = "jupyter.test.templates.location";
private static final String RSTUDIO_TEST_TEMPLATES_LOCATION_PROPERTY = "rstudio.test.templates.location";
private static final String ZEPPELIN_TEST_TEMPLATES_LOCATION_PROPERTY = "zeppelin.test.templates.location";
private static final String TENSOR_TEST_TEMPLATES_LOCATION_PROPERTY = "tensor.test.templates.location";
private static final String DEEPLEARNING_TEST_TEMPLATES_LOCATION_PROPERTY = "deeplearning.test.templates.location";
private static final String CLUSTER_CONFIG_FILE_LOCATION_PROPERTY = "ec2.config.files.location";
private static final String AZURE_CONFIG_FILE_LOCATION_PROPERTY = "azure.config.files.location";
private static final String GCP_CONFIG_FILE_LOCATION_PROPERTY = "gcp.config.files.location";
private PropertiesResolver() {
}
public static String getJupyterTestTemplatesLocationProperty() {
return JUPYTER_TEST_TEMPLATES_LOCATION_PROPERTY;
}
public static String getRstudioTestTemplatesLocationProperty() {
return RSTUDIO_TEST_TEMPLATES_LOCATION_PROPERTY;
}
public static String getZeppelinTestTemplatesLocationProperty() {
return ZEPPELIN_TEST_TEMPLATES_LOCATION_PROPERTY;
}
public static String getTensorTestTemplatesLocationProperty() {
return TENSOR_TEST_TEMPLATES_LOCATION_PROPERTY;
}
public static String getDeeplearningTestTemplatesLocationProperty() {
return DEEPLEARNING_TEST_TEMPLATES_LOCATION_PROPERTY;
}
private static Properties properties = new Properties();
static {
DEV_MODE = System.getProperty("run.mode", "remote").equalsIgnoreCase("dev");
loadApplicationProperties();
}
private static String getProperty(String propertyName, boolean isOptional) {
String s = System.getProperty(propertyName, "");
if (s.isEmpty() && !isOptional) {
throw new IllegalArgumentException("Missed required JVM argument -D" + propertyName);
}
return s;
}
public static void overlapProperty(Properties props, String propertyName, boolean isOptional) {
String argName = StringUtils.replaceChars(propertyName, '_', '.').toLowerCase();
String s = System.getProperty(argName, "");
if (!s.isEmpty()) {
props.setProperty(propertyName, s);
}
if(!isOptional && props.getProperty(propertyName, "").isEmpty()) {
throw new IllegalArgumentException("Missed required argument -D" + argName + " or property " + propertyName);
}
}
private static String getConfRootPath() {
return getProperty("conf.root.path", false);
}
private static void loadApplicationProperties() {
InputStream input = null;
try {
input = PropertiesResolver.class.getClassLoader().getResourceAsStream(CONFIG_FILE_NAME);
// load a properties file
properties.load(input);
String rootPath = getConfRootPath();
for (String key : properties.keySet().toArray(new String[0])) {
String path = StringUtils.replace(properties.getProperty(key), "${CONF_ROOT_PATH}", rootPath);
path = Paths.get(path).toAbsolutePath().toString();
properties.setProperty(key, path);
}
overlapProperty(properties, CONF_FILE_LOCATION_PROPERTY, false);
// get the property value and print it out
LOGGER.info(properties.getProperty(CONF_FILE_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(KEYS_DIRECTORY_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(NOTEBOOK_TEST_DATA_COPY_SCRIPT));
LOGGER.info(properties.getProperty(NOTEBOOK_TEST_LIB_LOCATION));
LOGGER.info(properties.getProperty(SCENARIO_JUPYTER_FILES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(SCENARIO_RSTUDIO_FILES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(SCENARIO_ZEPPELIN_FILES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(SCENARIO_TENSOR_FILES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(SCENARIO_DEEPLEARNING_FILES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(JUPYTER_TEST_TEMPLATES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(RSTUDIO_TEST_TEMPLATES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(ZEPPELIN_TEST_TEMPLATES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(TENSOR_TEST_TEMPLATES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(DEEPLEARNING_TEST_TEMPLATES_LOCATION_PROPERTY));
LOGGER.info(properties.getProperty(CLUSTER_CONFIG_FILE_LOCATION_PROPERTY));
} catch (IOException ex) {
LOGGER.error(ex);
LOGGER.error("Application configuration file could not be found by the path: {}", CONFIG_FILE_NAME);
System.exit(0);
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
LOGGER.error(e);
LOGGER.error("Application configuration file could not be found by the path: {}", CONFIG_FILE_NAME);
}
}
}
}
public static String getConfFileLocation() {
return properties.getProperty(CONF_FILE_LOCATION_PROPERTY);
}
public static String getKeysLocation() {
return properties.getProperty(KEYS_DIRECTORY_LOCATION_PROPERTY);
}
public static String getNotebookTestDataCopyScriptLocation() {
return properties.getProperty(NOTEBOOK_TEST_DATA_COPY_SCRIPT);
}
public static String getNotebookTestLibLocation() {
return properties.getProperty(NOTEBOOK_TEST_LIB_LOCATION);
}
public static String getScenarioJupyterFilesLocation() {
return properties.getProperty(SCENARIO_JUPYTER_FILES_LOCATION_PROPERTY);
}
public static String getScenarioRstudioFilesLocation() {
return properties.getProperty(SCENARIO_RSTUDIO_FILES_LOCATION_PROPERTY);
}
public static String getScenarioZeppelinFilesLocation() {
return properties.getProperty(SCENARIO_ZEPPELIN_FILES_LOCATION_PROPERTY);
}
public static String getScenarioTensorFilesLocation() {
return properties.getProperty(SCENARIO_TENSOR_FILES_LOCATION_PROPERTY);
}
public static String getScenarioDeeplearningFilesLocation() {
return properties.getProperty(SCENARIO_DEEPLEARNING_FILES_LOCATION_PROPERTY);
}
public static String getClusterEC2ConfFileLocation() {
return properties.getProperty(CLUSTER_CONFIG_FILE_LOCATION_PROPERTY );
}
public static String getClusterAzureConfFileLocation() {
return properties.getProperty(AZURE_CONFIG_FILE_LOCATION_PROPERTY );
}
public static String getClusterGcpConfFileLocation() {
return properties.getProperty(GCP_CONFIG_FILE_LOCATION_PROPERTY);
}
public static String getPropertyByName(String propertyName) {
return properties.getProperty(propertyName);
}
}