Skip to content

Commit

Permalink
Importer/Run Importer: Also accept params from Environment Variables
Browse files Browse the repository at this point in the history
For DB connection and other params, accept params from Environment
Variables and if not set then from config file.
  • Loading branch information
danjasuw committed Nov 8, 2021
1 parent 79b0a75 commit 2472a4a
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
import org.yeastrc.proxl.import_xml_to_db.dao.ConfigSystemDAO;
import org.yeastrc.proxl.import_xml_to_db.dao.ProxlXMLFileImportTrackingRun_For_ImporterRunner_DAO;
import org.yeastrc.proxl.import_xml_to_db.database_update_with_transaction_services.UpdateTrackingTrackingRunRecordsDBTransaction;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderFromPropertiesFile;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderPropertiesFileContentsErrorException;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderPropertiesFileErrorException;
import org.yeastrc.proxl.import_xml_to_db.db.ImportDBConnectionFactory;
Expand Down Expand Up @@ -324,7 +324,7 @@ public ImportResults importerDefaultMainProgramEntryPassingArgsAndProxlXMLObject
Runtime runtime = Runtime.getRuntime();
runtime.addShutdownHook( importProgramShutdownThread );
if ( createDatabaseConnectionFactory ) {
DBConnectionParametersProviderFromPropertiesFile dbConnectionParametersProvider = new DBConnectionParametersProviderFromPropertiesFile();
DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables dbConnectionParametersProvider = new DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables();
if ( dbConfigFile != null ) {
dbConnectionParametersProvider.setConfigFile( dbConfigFile );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* Default version of IDBConnectionParametersProvider that reads a property file
*
*/
public class DBConnectionParametersProviderFromPropertiesFile implements IDBConnectionParametersProvider {
public class DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables implements IDBConnectionParametersProvider {


private static final String NO_PROPERTIES_FILE_ERROR_MESSAGE = "No DB Connection Properties file found.";
Expand All @@ -33,9 +33,17 @@ public class DBConnectionParametersProviderFromPropertiesFile implements IDBConn
private static final String PROPERTY_NAME__PROXL_DB_NAME = "proxl.db.name";


private static final String ENVIRONMENT_VARIABLE__USERNAME = "PROXL_DB_USER";
private static final String ENVIRONMENT_VARIABLE__PASSWORD = "PROXL_DB_PASSWORD";
private static final String ENVIRONMENT_VARIABLE__DB_HOST = "PROXL_DB_HOST_ADDRESS";
private static final String ENVIRONMENT_VARIABLE__DB_PORT = "PROXL_DB_HOST_PORT";

private static final String ENVIRONMENT_VARIABLE__PROXL_DB_NAME = "PROXL_DB_NAME";


private static final Logger log = LoggerFactory.getLogger( DBConnectionParametersProviderFromPropertiesFile.class );


private static final Logger log = LoggerFactory.getLogger( DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables.class );


private File configFile;
Expand Down Expand Up @@ -186,13 +194,32 @@ public void init()
public void getConfigPropertiesFromPropertiesObj( Properties configProps )
throws DBConnectionParametersProviderPropertiesFileContentsErrorException {

username = configProps.getProperty( PROPERTY_NAME__USERNAME );
password = configProps.getProperty( PROPERTY_NAME__PASSWORD );
dbHost = configProps.getProperty( PROPERTY_NAME__DB_HOST );
dbPort = configProps.getProperty( PROPERTY_NAME__DB_PORT );
username = System.getenv( ENVIRONMENT_VARIABLE__USERNAME );
password = System.getenv( ENVIRONMENT_VARIABLE__PASSWORD );
dbHost = System.getenv( ENVIRONMENT_VARIABLE__DB_HOST );
dbPort = System.getenv( ENVIRONMENT_VARIABLE__DB_PORT );

proxlDbName = System.getenv( ENVIRONMENT_VARIABLE__PROXL_DB_NAME );

// Get from Config file if NOT in Environment Variables

proxlDbName = configProps.getProperty( PROPERTY_NAME__PROXL_DB_NAME );
if ( username == null ) {
username = configProps.getProperty( PROPERTY_NAME__USERNAME );
}
if ( password == null ) {
password = configProps.getProperty( PROPERTY_NAME__PASSWORD );
}
if ( dbHost == null ) {
dbHost = configProps.getProperty( PROPERTY_NAME__DB_HOST );
}
if ( dbPort == null ) {
dbPort = configProps.getProperty( PROPERTY_NAME__DB_PORT );
}
if ( proxlDbName == null ) {
proxlDbName = configProps.getProperty( PROPERTY_NAME__PROXL_DB_NAME );
}


if ( StringUtils.isEmpty( username ) ) {

String msg = "For Database connection parameters file: parameter '" + PROPERTY_NAME__USERNAME + "' is not provided or is empty string.";
Expand All @@ -213,25 +240,31 @@ public void getConfigPropertiesFromPropertiesObj( Properties configProps )
}


if ( log.isInfoEnabled() ) {
// if ( log.isInfoEnabled() ) {

System.out.println( "Database connection parameters:");

if ( StringUtils.isNotEmpty( username ) ) {

System.out.println( PROPERTY_NAME__USERNAME + " has a value" );
System.out.println( "Environment Variable '" + ENVIRONMENT_VARIABLE__DB_HOST
+ "' OR Database connection parameters file: parameter '" + PROPERTY_NAME__USERNAME + "' has a value" );
}
if ( StringUtils.isNotEmpty( password ) ) {

System.out.println( PROPERTY_NAME__PASSWORD + " has a value" );
System.out.println( "Environment Variable '" + ENVIRONMENT_VARIABLE__PASSWORD
+ "' OR Database connection parameters file: parameter '" + PROPERTY_NAME__PASSWORD + "' has a value" );
}
System.out.println( PROPERTY_NAME__DB_HOST + ": " + dbHost );
System.out.println( PROPERTY_NAME__DB_PORT + ": " + dbPort );
System.out.println( "Environment Variable '" + ENVIRONMENT_VARIABLE__DB_HOST
+ "' OR Database connection parameters file: parameter '" + PROPERTY_NAME__DB_HOST + "': " + dbHost );

System.out.println( "Environment Variable '" + ENVIRONMENT_VARIABLE__DB_PORT
+ "' OR Database connection parameters file: parameter '" + PROPERTY_NAME__DB_PORT + "': " + dbPort );

if ( StringUtils.isNotEmpty( proxlDbName ) ) {
System.out.println( "Environment Variable '" + ENVIRONMENT_VARIABLE__PROXL_DB_NAME
+ "' OR Database connection parameters file: parameter '" + PROPERTY_NAME__PROXL_DB_NAME + "': " + proxlDbName );

System.out.println( PROPERTY_NAME__PROXL_DB_NAME + ": " + proxlDbName );
}
}
// }

configured = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ private Connection getConnectionInternal( String db, boolean inserterConnection

if ( dbConnectionParametersProvider == null ) {

dbConnectionParametersProvider = new DBConnectionParametersProviderFromPropertiesFile();
dbConnectionParametersProvider = new DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables();

dbConnectionParametersProvider.init();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;

import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderFromPropertiesFile;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables;
import org.yeastrc.proxl.import_xml_to_db_runner_pgm.exceptions.ConfigPropertiesFileErrorException;


Expand All @@ -27,6 +27,11 @@ public class ProcessImporterRunnerConfigFile {
private static final Logger log = LoggerFactory.getLogger( ProcessImporterRunnerConfigFile.class );


private static final String ENVIRONMENT_VARIABLE_NAME__JAVA_EXECUTABLE_PARAMETERS = "PROXL_JAVA_EXECUTE_PARAMS";

private static final String ENVIRONMENT_VARIABLE__PROXL_WEB_APP_BASE_URL = "PROXL_WEB_APP_BASE_URL";


private static final String NO_PROPERTIES_FILE_ERROR_MESSAGE = "No DB Connection Properties file found.";

private static final String CONFIG_FILENAME = "run_importer_config_file.properties";
Expand All @@ -43,7 +48,7 @@ public class ProcessImporterRunnerConfigFile {
public static final String PROPERTY_NAME__IMPORTER_PID_FILE_WITH_PATH = "importer.pid.file.with.path";

private static final String PROPERTY_NAME__PROXL_WEB_APP_BASE_URL = "proxl.web.app.base.url";

private static final String PROPERTY_NAME__COMMAND_RUN_ON_SUCCESSFUL_IMPORT = "command.run.successful.import";
private static final String PROPERTY_NAME__COMMAND_RUN_ON_SUCCESSFUL_IMPORT_SYSOUT_SYSERR_DIR = "command.run.successful.import.sysout.syserr.dir";

Expand All @@ -69,9 +74,18 @@ public static ProcessImporterRunnerConfigFile getInstance() {
* @return
* @throws Exception
*/
public DBConnectionParametersProviderFromPropertiesFile processConfigFile( File configFileFromCommandLine ) throws Exception {
public DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables processConfigFile( File configFileFromCommandLine ) throws Exception {

try {
// First get from Environment Variables

// Do Not set PROPERTY_NAME__PROXL_WEB_APP_BASE_URL to Not send email on import completion
String proxlWebAppBaseURL = System.getenv( ENVIRONMENT_VARIABLE__PROXL_WEB_APP_BASE_URL );

String javaExecutableParametersString = System.getenv( ENVIRONMENT_VARIABLE_NAME__JAVA_EXECUTABLE_PARAMETERS );

// Then where still null get from config file

Properties configProps = null;
InputStream propertiesFileAsStream = null;

Expand Down Expand Up @@ -136,15 +150,24 @@ public DBConnectionParametersProviderFromPropertiesFile processConfigFile( File
String waitTimeForNextCheckForImportToProcess_InSecondsString = configProps.getProperty( PROPERTY_NAME__WAIT_TIME_FOR_NEXT_CHECK_FOR_IMPORT_TO_PROCESS );

String javaExecutableWithPath = configProps.getProperty( PROPERTY_NAME__JAVA_EXECUTABLE_WITH_PATH );
String javaExecutableParametersString = configProps.getProperty( PROPERTY_NAME__JAVA_EXECUTABLE_PARAMETERS );

if ( proxlWebAppBaseURL == null ) {
// Not set in enviroment variable so get from config file
javaExecutableParametersString = configProps.getProperty( PROPERTY_NAME__JAVA_EXECUTABLE_PARAMETERS );
}


String importerJarWithPath = configProps.getProperty( PROPERTY_NAME__IMPORTER_JAR_WITH_PATH );
String importerDbConfigWithPath = configProps.getProperty( PROPERTY_NAME__IMPORTER_DB_CONFIG_WITH_PATH );

String importerPidFileWithPath = configProps.getProperty( PROPERTY_NAME__IMPORTER_PID_FILE_WITH_PATH );

// Do Not set PROPERTY_NAME__PROXL_WEB_APP_BASE_URL to Not send email on import completion
String proxlWebAppBaseURL = configProps.getProperty( PROPERTY_NAME__PROXL_WEB_APP_BASE_URL );

if ( proxlWebAppBaseURL == null ) {
// Not set in enviroment variable so get from config file
proxlWebAppBaseURL = configProps.getProperty( PROPERTY_NAME__PROXL_WEB_APP_BASE_URL );
}

String commandToRunOnSuccessfulImport = configProps.getProperty( PROPERTY_NAME__COMMAND_RUN_ON_SUCCESSFUL_IMPORT );
String commandToRunOnSuccessfulImportSyoutSyserrDir = configProps.getProperty( PROPERTY_NAME__COMMAND_RUN_ON_SUCCESSFUL_IMPORT_SYSOUT_SYSERR_DIR );
Expand Down Expand Up @@ -178,13 +201,13 @@ public DBConnectionParametersProviderFromPropertiesFile processConfigFile( File

// Do Not set PROPERTY_NAME__PROXL_WEB_APP_BASE_URL to Not send email on import completion

String msg = "INFO:: For config file: parameter '" + PROPERTY_NAME__PROXL_WEB_APP_BASE_URL
String msg = "INFO:: Enviroment Variable '" + ENVIRONMENT_VARIABLE__PROXL_WEB_APP_BASE_URL + "' OR config file: parameter '" + PROPERTY_NAME__PROXL_WEB_APP_BASE_URL
+ "' is not provided or is empty string. Not calling server to send email on import completion.";
log.warn( msg );
} else {

String msg = "INFO:: Config file: parameter '" + PROPERTY_NAME__PROXL_WEB_APP_BASE_URL
+ "' is provided so calling server to send email on import completion.";
String msg = "INFO:: Enviroment Variable '" + ENVIRONMENT_VARIABLE__PROXL_WEB_APP_BASE_URL + "' OR Config file: parameter '" + PROPERTY_NAME__PROXL_WEB_APP_BASE_URL
+ "' is provided so calling server to send email on import completion. URL Used: " + proxlWebAppBaseURL;
log.warn( msg );
}

Expand All @@ -207,12 +230,18 @@ public DBConnectionParametersProviderFromPropertiesFile processConfigFile( File
String[] javaExecutableParametersArray = javaExecutableParametersString.split( " " );
List<String> javaExecutableParametersLocal = new ArrayList<>( javaExecutableParametersArray.length );
for ( String javaExecutableParameter : javaExecutableParametersArray ) {
if ( StringUtils.isNotEmpty(javaExecutableParameter) ) {
javaExecutableParametersLocal.add( javaExecutableParameter );
String javaExecutableParameter_Trimmed = javaExecutableParameter.trim();
if ( StringUtils.isNotEmpty(javaExecutableParameter_Trimmed) ) {
javaExecutableParametersLocal.add( javaExecutableParameter_Trimmed );
}
}
if ( ! javaExecutableParametersLocal.isEmpty() ) {
ImporterRunnerConfigData.setJavaExecutableParameters( javaExecutableParametersLocal );

String msg = "INFO:: Enviroment Variable: '" + ENVIRONMENT_VARIABLE_NAME__JAVA_EXECUTABLE_PARAMETERS
+ "' OR Config file: parameter '" + PROPERTY_NAME__JAVA_EXECUTABLE_PARAMETERS
+ "' so these parameters will be passed to java executable. values: " + StringUtils.join( javaExecutableParametersLocal, " " );
log.warn( msg );
}
}

Expand Down Expand Up @@ -258,8 +287,8 @@ public DBConnectionParametersProviderFromPropertiesFile processConfigFile( File
ImporterRunnerConfigData.setConfigured(true);


DBConnectionParametersProviderFromPropertiesFile dbConnectionParametersProviderFromPropertiesFile =
new DBConnectionParametersProviderFromPropertiesFile();
DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables dbConnectionParametersProviderFromPropertiesFile =
new DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables();

dbConnectionParametersProviderFromPropertiesFile.getConfigPropertiesFromPropertiesObj( configProps );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.slf4j.Logger;

import org.yeastrc.proxl.import_xml_to_db.dao.ConfigSystemDAO;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderFromPropertiesFile;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables;
import org.yeastrc.proxl.import_xml_to_db.db.DBConnectionParametersProviderPropertiesFileErrorException;
import org.yeastrc.proxl.import_xml_to_db.db.ImportDBConnectionFactory;
import org.yeastrc.proxl.import_xml_to_db_runner_pgm.config.ProcessImporterRunnerConfigFile;
Expand Down Expand Up @@ -105,7 +105,7 @@ public static void main(String[] args) throws Exception {
}
}

DBConnectionParametersProviderFromPropertiesFile dbConnectionParametersProvider = null;
DBConnectionParametersProviderFromPropertiesFileEnvironmentVariables dbConnectionParametersProvider = null;
try {
if ( log.isDebugEnabled() ) {
log.debug( "processing config file from command line: " + configFileFromCommandLine.getAbsolutePath() );
Expand Down

0 comments on commit 2472a4a

Please sign in to comment.