/** * * 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 org.apache.airavata.common.utils; import org.apache.airavata.common.exception.ApplicationSettingsException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; public class ServerSettings extends ApplicationSettings { private static final Logger log = LoggerFactory.getLogger(ServerSettings.class); private static final String DEFAULT_USER = "default.registry.user"; private static final String DEFAULT_USER_PASSWORD = "default.registry.password"; private static final String DEFAULT_USER_GATEWAY = "default.registry.gateway"; private static final String ENABLE_SHARING = "enable.sharing"; public static final String IP = "ip"; private static final String API_SERVER_TLS_ENABLED = "apiserver.tls.enabled"; private static final String API_SERVER_KEYSTORE = "apiserver.keystore"; private static final String API_SERVER_KEYSTORE_PASSWD = "apiserver.keystore.password"; // Orchestrator Constants public static final String ORCHESTRATOR_SERVER_HOST = "orchestrator.server.host"; public static final String ORCHESTRATOR_SERVER_PORT = "orchestrator.server.port"; public static final String ORCHESTRATOR_SERVER_NAME = "orchestrator.server.name"; // Gfac constants public static final String GFAC_SERVER_HOST = "gfac.server.host"; public static final String GFAC_SERVER_PORT = "gfac.server.port"; public static final String GFAC_SERVER_NAME = "gfac.server.name"; public static final String GFAC_THREAD_POOL_SIZE = "gfac.thread.pool.size"; public static final int DEFAULT_GFAC_THREAD_POOL_SIZE = 50; public static final String GFAC_CONFIG_XML = "gfac-config.xml"; // Credential Store constants public static final String CREDENTIAL_SERVER_HOST = "credential.store.server.host"; public static final String CREDENTIAL_SERVER_PORT = "credential.store.server.port"; // Zookeeper + curator constants public static final String EMBEDDED_ZK = "embedded.zk"; public static final String ZOOKEEPER_SERVER_CONNECTION = "zookeeper.server.connection"; public static final String ZOOKEEPER_TIMEOUT = "zookeeper.timeout"; // Aurora Scheduler Constants public static final String AURORA_SCHEDULER_HOSTS = "aurora.scheduler.hosts"; public static final String AURORA_EXECUTOR_NAME = "aurora.executor.name"; public static final String MESOS_CLUSTER_NAME = "mesos.cluster.name"; public static final String AURORA_SCHEDULER_CONNECT_TIMEOUT_MS = "aurora.scheduler.timeoutms"; public static final String AURORA_EXECUTOR_CONFIG_TEMPLATE_FILE = "aurora.executor.config.template.filename"; private static final String CREDENTIAL_STORE_DB_URL = "credential.store.jdbc.url"; private static final String CREDENTIAL_STORE_DB_USER = "credential.store.jdbc.user"; private static final String CREDENTIAL_STORE_DB_PASSWORD = "credential.store.jdbc.password"; private static final String CREDENTIAL_STORE_DB_DRIVER = "credential.store.jdbc.driver"; private static final java.lang.String SHARING_REGISTRY_PORT = "sharing.registry.server.port"; private static final java.lang.String SHARING_REGISTRY_HOST = "sharing.registry.server.host"; private static String USER_PROFILE_MONGODB_HOST = "userprofile.mongodb.host"; private static String USER_PROFILE_MONGODB_PORT = "userprofile.mongodb.port"; private static final String REGISTRY_DB_URL = "registry.jdbc.url"; private static final String REGISTRY_DB_USER = "registry.jdbc.user"; private static final String REGISTRY_DB_PASSWORD = "registry.jdbc.password"; private static final String REGISTRY_DB_DRIVER = "registry.jdbc.driver"; private static final String HOST_SCHEDULER = "host.scheduler"; private static final String MY_PROXY_SERVER = "myproxy.server"; private static final String MY_PROXY_USER = "myproxy.user"; private static final String MY_PROXY_PASSWORD = "myproxy.password"; private static final String MY_PROXY_LIFETIME = "myproxy.life"; public static final String JOB_NOTIFICATION_ENABLE = "job.notification.enable"; public static final String JOB_NOTIFICATION_EMAILIDS = "job.notification.emailids"; public static final String JOB_NOTIFICATION_FLAGS = "job.notification.flags"; public static final String RABBITMQ_BROKER_URL = "rabbitmq.broker.url"; public static final String RABBITMQ_STATUS_EXCHANGE_NAME = "rabbitmq.status.exchange.name"; public static final String RABBITMQ_PROCESS_EXCHANGE_NAME = "rabbitmq.process.exchange.name"; public static final String RABBITMQ_EXPERIMENT_EXCHANGE_NAME = "rabbitmq.experiment.exchange.name"; public static final String RABBITMQ_PROCESS_LAUNCH_QUEUE_NAME = "process.launch.queue.name"; public static final String RABBITMQ_EXPERIMENT_LAUNCH_QUEUE_NAME = "experiment.launch.queue.name"; public static final String RABBITMQ_DURABLE_QUEUE="durable.queue"; public static final String RABBITMQ_PREFETCH_COUNT="prefetch.count"; // Workflow Enactment Service component configuration. private static final String ENACTMENT_THREAD_POOL_SIZE = "enactment.thread.pool.size"; private static final int DEFAULT_ENACTMENT_THREAD_POOL_SIZE = 10; private static final String WORKFLOW_PARSER = "workflow.parser"; // email based monitoring configurations private static final String EMAIL_BASED_MONITORING_PERIOD = "email.based.monitoring.period"; private static final String EMAIL_BASED_MONITOR_HOST = "email.based.monitor.host"; private static final String EMAIL_BASED_MONITOR_ADDRESS = "email.based.monitor.address"; private static final String EMAIL_BASED_MONITOR_PASSWORD = "email.based.monitor.password"; private static final String EMAIL_BASED_MONITOR_FOLDER_NAME = "email.based.monitor.folder.name"; private static final String EMAIL_BASED_MONITOR_STORE_PROTOCOL = "email.based.monitor.store.protocol"; private static final String ENABLE_EMAIL_BASED_MONITORING = "enable.email.based.monitoring"; private static final String IS_RUNNING_ON_AWS = "isRunningOnAws"; private static final String ENABLE_KAFKA_LOGGING = "enable.kafka.logging"; private static final String KAFKA_BROKER_LIST = "kafka.broker.list"; private static final String KAFKA_TOPIC_PREFIX = "kafka.topic.prefix"; private static final String SERVER_ROLES = "server.roles"; //User Profile onstants public static final String USER_PROFILE_SERVER_HOST = "user.profile.server.host"; public static final String USER_PROFILE_SERVER_PORT = "user.profile.server.port"; /* Caching */ private static final String SESSION_CACHE_ACCESS_TIME_OUT = "ssh.session.cache.access.timeout"; // todo until AIRAVATA-2066 is finished, keep server side list configurations here. private static Map<String, String[]> listConfigurations = new HashMap<>(); private static boolean stopAllThreads = false; private static boolean emailBaseNotificationEnable; private static String outputLocation; public static String getDefaultUser() throws ApplicationSettingsException { return getSetting(DEFAULT_USER); } public static String getRabbitmqProcessLaunchQueueName() { return getSetting(RABBITMQ_PROCESS_LAUNCH_QUEUE_NAME, "process.launch.queue"); } public static String getRabbitmqExperimentLaunchQueueName() { return getSetting(RABBITMQ_EXPERIMENT_EXCHANGE_NAME, "experiment.launch.queue"); } public static String getRabbitmqBrokerUrl() { return getSetting(RABBITMQ_BROKER_URL, "amqp://localhost:5672"); } public static String getRabbitmqStatusExchangeName(){ return getSetting(RABBITMQ_STATUS_EXCHANGE_NAME, "status_exchange"); } public static String getRabbitmqProcessExchangeName(){ return getSetting(RABBITMQ_PROCESS_EXCHANGE_NAME, "process_exchange"); } public static String getRabbitmqExperimentExchangeName() { return getSetting(RABBITMQ_EXPERIMENT_EXCHANGE_NAME, "experiment_exchange"); } public static boolean getRabbitmqDurableQueue(){ return Boolean.valueOf(getSetting(RABBITMQ_DURABLE_QUEUE, "false")); } public static int getRabbitmqPrefetchCount(){ return Integer.valueOf(getSetting(RABBITMQ_PREFETCH_COUNT, "200")); } public static String getDefaultUserPassword() throws ApplicationSettingsException { return getSetting(DEFAULT_USER_PASSWORD); } public static String getDefaultUserGateway() throws ApplicationSettingsException { return getSetting(DEFAULT_USER_GATEWAY); } public static String getCredentialStoreDBUser() throws ApplicationSettingsException { try { return getSetting(CREDENTIAL_STORE_DB_USER); } catch (ApplicationSettingsException e) { return getSetting(REGISTRY_DB_USER); } } public static String getCredentialStoreDBPassword() throws ApplicationSettingsException { try { return getSetting(CREDENTIAL_STORE_DB_PASSWORD); } catch (ApplicationSettingsException e) { return getSetting(REGISTRY_DB_PASSWORD); } } public static String getCredentialStoreDBDriver() throws ApplicationSettingsException { try { return getSetting(CREDENTIAL_STORE_DB_DRIVER); } catch (ApplicationSettingsException e) { return getSetting(REGISTRY_DB_DRIVER); } } public static String getCredentialStoreDBURL() throws ApplicationSettingsException { try { return getSetting(CREDENTIAL_STORE_DB_URL); } catch (ApplicationSettingsException e) { return getSetting(REGISTRY_DB_URL); } } public static boolean isAPIServerTLSEnabled() { try { return Boolean.parseBoolean(getSetting(API_SERVER_TLS_ENABLED)); } catch (ApplicationSettingsException e) { return false; } } public static String getApiServerKeystorePasswd() throws ApplicationSettingsException{ return getSetting(API_SERVER_KEYSTORE_PASSWD); } public static String getApiServerKeystore() throws ApplicationSettingsException{ return getSetting(API_SERVER_KEYSTORE); } public static String getHostScheduler() throws ApplicationSettingsException { return getSetting(HOST_SCHEDULER); } public static boolean isStopAllThreads() { return stopAllThreads; } public static void setStopAllThreads(boolean stopAllThreads) { ServerSettings.stopAllThreads = stopAllThreads; } public static String getMyProxyServer() throws ApplicationSettingsException { return getSetting(MY_PROXY_SERVER); } public static String getMyProxyUser() throws ApplicationSettingsException { return getSetting(MY_PROXY_USER); } public static String getMyProxyPassword() throws ApplicationSettingsException { return getSetting(MY_PROXY_PASSWORD); } public static int getMyProxyLifetime() throws ApplicationSettingsException { return Integer.parseInt(getSetting(MY_PROXY_LIFETIME)); } public static boolean isEmbeddedZK() { return Boolean.parseBoolean(getSetting(EMBEDDED_ZK, "true")); } public static String getIp() { try { return getSetting(IP); } catch (ApplicationSettingsException e) { try { return InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e1) { e1.printStackTrace(); } } return null; } public static int getEnactmentThreadPoolSize() { String threadPoolSize = null; try { threadPoolSize = getSetting(ENACTMENT_THREAD_POOL_SIZE); } catch (ApplicationSettingsException e) { return DEFAULT_ENACTMENT_THREAD_POOL_SIZE; } return Integer.valueOf(threadPoolSize); } public static String getWorkflowParser() throws ApplicationSettingsException { return getSetting(WORKFLOW_PARSER); } public static int getEmailMonitorPeriod() throws ApplicationSettingsException { return Integer.valueOf(getSetting(EMAIL_BASED_MONITORING_PERIOD, "100000")); } public static String getEmailBasedMonitorHost() throws ApplicationSettingsException { return getSetting(EMAIL_BASED_MONITOR_HOST); } public static String getEmailBasedMonitorAddress() throws ApplicationSettingsException { return getSetting(EMAIL_BASED_MONITOR_ADDRESS); } public static String getEmailBasedMonitorPassword() throws ApplicationSettingsException { return getSetting(EMAIL_BASED_MONITOR_PASSWORD); } public static String getEmailBasedMonitorFolderName() throws ApplicationSettingsException { return getSetting(EMAIL_BASED_MONITOR_FOLDER_NAME); } public static String getEmailBasedMonitorStoreProtocol() throws ApplicationSettingsException { return getSetting(EMAIL_BASED_MONITOR_STORE_PROTOCOL); } public static boolean isEmailBasedNotificationEnable() { return Boolean.valueOf(getSetting(ENABLE_EMAIL_BASED_MONITORING, "false")); } public static boolean isAPISecured() throws ApplicationSettingsException { return Boolean.valueOf(getSetting(Constants.IS_API_SECURED)); } public static String getRemoteAuthzServerUrl() throws ApplicationSettingsException { return getSetting(Constants.REMOTE_OAUTH_SERVER_URL); } public static String getAuthorizationPoliyName() throws ApplicationSettingsException { return getSetting(Constants.AUTHORIZATION_POLICY_NAME); } public static String getZookeeperConnection() throws ApplicationSettingsException { return getSetting(ZOOKEEPER_SERVER_CONNECTION, "localhost:2181"); } public static int getZookeeperTimeout() { return Integer.valueOf(getSetting(ZOOKEEPER_TIMEOUT, "3000")); } public static String getGFacServerName() throws ApplicationSettingsException { return getSetting(GFAC_SERVER_NAME); } public static String getGfacServerHost() throws ApplicationSettingsException { return getSetting(GFAC_SERVER_HOST); } public static String getGFacServerPort() throws ApplicationSettingsException { return getSetting(GFAC_SERVER_PORT); } public static int getGFacThreadPoolSize() { try { String threadPoolSize = getSetting(GFAC_THREAD_POOL_SIZE); if (threadPoolSize != null && !threadPoolSize.isEmpty()) { return Integer.valueOf(threadPoolSize); } else { log.warn("Thread pool size is not configured, use default gfac thread pool size " + DEFAULT_GFAC_THREAD_POOL_SIZE); } } catch (ApplicationSettingsException e) { log.warn("Couldn't read thread pool size from configuration on exception, use default gfac thread pool " + "size " + DEFAULT_GFAC_THREAD_POOL_SIZE); } return DEFAULT_GFAC_THREAD_POOL_SIZE; } public static String getOrchestratorServerName() throws ApplicationSettingsException { return getSetting(ORCHESTRATOR_SERVER_NAME); } public static String getOrchestratorServerHost() throws ApplicationSettingsException { return getSetting(ORCHESTRATOR_SERVER_HOST); } public static int getOrchestratorServerPort() throws ApplicationSettingsException { return Integer.valueOf(getSetting(ORCHESTRATOR_SERVER_PORT)); } public static boolean isTLSEnabled() throws ApplicationSettingsException { return Boolean.valueOf(getSetting(Constants.IS_TLS_ENABLED)); } public static int getTLSServerPort() throws ApplicationSettingsException { return Integer.valueOf(getSetting(Constants.TLS_SERVER_PORT)); } public static String getKeyStorePath() throws ApplicationSettingsException { return getSetting(Constants.KEYSTORE_PATH); } public static String getKeyStorePassword() throws ApplicationSettingsException { return getSetting(Constants.KEYSTORE_PASSWORD); } public static int getTLSClientTimeout() throws ApplicationSettingsException { return Integer.valueOf(getSetting(Constants.TLS_CLIENT_TIMEOUT)); } public static String getSecurityManagerClassName() throws ApplicationSettingsException { return getSetting(Constants.SECURITY_MANAGER_CLASS); } public static String getAuthzCacheManagerClassName() throws ApplicationSettingsException { return getSetting(Constants.AUTHZ_CACHE_MANAGER_CLASS); } public static boolean isAuthzCacheEnabled() throws ApplicationSettingsException { return Boolean.valueOf(getSetting(Constants.AUTHZ_CACHE_ENABLED)); } public static int getCacheSize() throws ApplicationSettingsException { return Integer.valueOf(getSetting(Constants.IN_MEMORY_CACHE_SIZE)); } public static String getUserProfileMongodbHost() throws ApplicationSettingsException{ return getSetting(USER_PROFILE_MONGODB_HOST); } public static int getUserProfileMongodbPort() throws ApplicationSettingsException{ return Integer.parseInt(getSetting(USER_PROFILE_MONGODB_PORT)); } public static String getLocalDataLocation() { return System.getProperty("java.io.tmpdir"); } public static Boolean isEnableSharing() throws ApplicationSettingsException { return Boolean.parseBoolean(getSetting(ENABLE_SHARING)); } public static boolean isRunningOnAws() { return Boolean.valueOf(getSetting(IS_RUNNING_ON_AWS, "false")); } public static String getKafkaBrokerList() { return getSetting(KAFKA_BROKER_LIST, null); } public static String getKafkaTopicPrefix() { return getSetting(KAFKA_TOPIC_PREFIX, "all"); } public static boolean isEnabledKafkaLogging() { return Boolean.valueOf(getSetting(ENABLE_KAFKA_LOGGING, "false")); } public static void setServerRoles(String[] roles) { listConfigurations.put(SERVER_ROLES, roles); } public static String[] getServerRoles() { return listConfigurations.get(SERVER_ROLES); } public static String getAuroraSchedulerHosts() throws ApplicationSettingsException { return getSetting(AURORA_SCHEDULER_HOSTS); } public static String getMesosClusterName() throws ApplicationSettingsException { return getSetting(MESOS_CLUSTER_NAME); } public static String getAuroraExecutorName() throws ApplicationSettingsException { return getSetting(AURORA_EXECUTOR_NAME); } public static String getAuroraExecutorConfigTemplateFileName() throws ApplicationSettingsException { return getSetting(AURORA_EXECUTOR_CONFIG_TEMPLATE_FILE); } public static int getAuroraSchedulerTimeout() throws ApplicationSettingsException { return Integer.valueOf(getSetting(AURORA_SCHEDULER_CONNECT_TIMEOUT_MS)); } public static int getSessionCacheAccessTimeout() { return Integer.valueOf(getSetting(SESSION_CACHE_ACCESS_TIME_OUT, "30")); } public static String getSharingRegistryPort() { return getSetting(SHARING_REGISTRY_PORT, "7878"); } public static String getSharingRegistryHost() { return getSetting(SHARING_REGISTRY_HOST, "localhost"); } }