diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/Messages.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/Messages.java index d5623d9653..e8bf61bdfb 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/Messages.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/Messages.java @@ -244,6 +244,14 @@ public final class Messages { public static final String FETCH_TOKEN_AUDIT_LOG_CONFIG = "Access token fetch"; + public static final String READ_ENV = "Read {0} = \"{1}\" for space with id: {2}"; + + public static final String SUBSCRIPTION_CREATE = "Create configuration-subscription in space with id: {0}"; + public static final String SUBSCRIPTION_UPDATE = "Update configuration-subscription in space with id: {0}"; + + public static final String ENTRY_CREATE = "Create configuration-entry in space with id: {0}"; + public static final String ENTRY_UPDATE = "Update configuration-entry in space with id: {0}"; + // Audit log configuration public static final String GET_CSRF_TOKEN_AUDIT_LOG_CONFIG = "CSRF token get "; @@ -267,6 +275,14 @@ public final class Messages { public static final String MTA_INFO_AUDIT_LOG_CONFIG = "MTA info"; public static final String MTA_LIST_AUDIT_LOG_CONFIG = "MTA list"; + public static final String ENVIRONMENT_VARIABLE_READ_AUDIT_LOG_CONFIG = "Environment variable read"; + + public static final String SUBSCRIPTION_CREATE_AUDIT_LOG_CONFIG = "Configuration subscription create"; + public static final String SUBSCRIPTION_UPDATE_AUDIT_LOG_CONFIG = "Configuration subscription update"; + + public static final String ENTRY_CREATE_AUDIT_LOG_CONFIG = "Configuration entry create"; + public static final String ENTRY_UPDATE_AUDIT_LOG_CONFIG = "Configuration entry update"; + public static final String API_INFO_AUDIT_LOG_CONFIG = "Api info"; public static final String IGNORING_NAMESPACE_PARAMETERS = "Ignoring parameter \"{0}\" , as the MTA is not deployed with namespace!"; public static final String NAMESPACE_PARSING_ERROR_MESSAGE = "Cannot parse \"{0}\" flag - expected a boolean format."; diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ApplicationConfigurationAuditLog.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ApplicationConfigurationAuditLog.java new file mode 100644 index 0000000000..5fe75a232e --- /dev/null +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ApplicationConfigurationAuditLog.java @@ -0,0 +1,22 @@ +package org.cloudfoundry.multiapps.controller.core.auditlogging; + +import java.text.MessageFormat; + +import org.cloudfoundry.multiapps.controller.core.Messages; +import org.cloudfoundry.multiapps.controller.core.auditlogging.model.AuditLogConfiguration; + +public class ApplicationConfigurationAuditLog { + + private final AuditLoggingFacade auditLoggingFacade; + + public ApplicationConfigurationAuditLog(AuditLoggingFacade auditLoggingFacade) { + this.auditLoggingFacade = auditLoggingFacade; + } + + public void logEnvironmentVariableRead(String envVariableName, String value, String spaceGuid) { + String performedAction = MessageFormat.format(Messages.READ_ENV, envVariableName, value, spaceGuid); + auditLoggingFacade.logDataAccessAuditLog(new AuditLogConfiguration(spaceGuid, + performedAction, + Messages.ENVIRONMENT_VARIABLE_READ_AUDIT_LOG_CONFIG)); + } +} diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLogBean.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLogBean.java index 0bad67c1eb..58ee9e4763 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLogBean.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLogBean.java @@ -1,12 +1,12 @@ package org.cloudfoundry.multiapps.controller.core.auditlogging; +import javax.sql.DataSource; + +import jakarta.inject.Inject; import org.cloudfoundry.multiapps.controller.core.auditlogging.impl.AuditLoggingFacadeSLImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import jakarta.inject.Inject; -import javax.sql.DataSource; - @Configuration public class AuditLogBean { @@ -57,4 +57,16 @@ public OperationsApiServiceAuditLog buildOperationsApiServiceAuditLog(AuditLoggi public MtaConfigurationPurgerAuditLog buildMtaConfigurationPurgerAuditLog(AuditLoggingFacade auditLoggingFacade) { return new MtaConfigurationPurgerAuditLog(auditLoggingFacade); } + + @Bean + @Inject + public ConfigurationSubscriptionServiceAuditLog buildAConfigurationSubscriptionServiceAuditLog(AuditLoggingFacade auditLoggingFacade) { + return new ConfigurationSubscriptionServiceAuditLog(auditLoggingFacade); + } + + @Bean + @Inject + public ConfigurationEntryServiceAuditLog buildAConfigurationEntryServiceAuditLog(AuditLoggingFacade auditLoggingFacade) { + return new ConfigurationEntryServiceAuditLog(auditLoggingFacade); + } } diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLoggingFacade.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLoggingFacade.java index 86c495d799..868e955fb8 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLoggingFacade.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/AuditLoggingFacade.java @@ -1,11 +1,20 @@ package org.cloudfoundry.multiapps.controller.core.auditlogging; -import org.cloudfoundry.multiapps.controller.core.auditlogging.model.ConfigurationChangeActions; import org.cloudfoundry.multiapps.controller.core.auditlogging.model.AuditLogConfiguration; +import org.cloudfoundry.multiapps.controller.core.auditlogging.model.ConfigurationChangeActions; +import org.cloudfoundry.multiapps.mta.model.AuditableConfiguration; public interface AuditLoggingFacade { void logSecurityIncident(AuditLogConfiguration configuration); + void logDataAccessAuditLog(AuditLogConfiguration configuration); + void logConfigurationChangeAuditLog(AuditLogConfiguration configuration, ConfigurationChangeActions configurationAction); + + void logConfigurationChangeAuditLog(AuditLogConfiguration configuration, + ConfigurationChangeActions configurationAction, + AuditableConfiguration oldValue, + AuditableConfiguration newValue); + } diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ConfigurationEntryServiceAuditLog.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ConfigurationEntryServiceAuditLog.java new file mode 100644 index 0000000000..cb82bfb030 --- /dev/null +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ConfigurationEntryServiceAuditLog.java @@ -0,0 +1,71 @@ +package org.cloudfoundry.multiapps.controller.core.auditlogging; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import org.cloudfoundry.multiapps.controller.core.Messages; +import org.cloudfoundry.multiapps.controller.core.auditlogging.model.AuditLogConfiguration; +import org.cloudfoundry.multiapps.controller.core.auditlogging.model.ConfigurationChangeActions; +import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationEntry; + +public class ConfigurationEntryServiceAuditLog { + + private static final String PROVIDER_ID_PROPERTY_NAME = "providerId"; + private static final String PROVIDER_NID_PROPERTY_NAME = "providerNid"; + private static final String PROVIDER_VERSION_PROPERTY_NAME = "providerVersion"; + private static final String PROVIDER_NAMESPACE_PROPERTY_NAME = "providerNamespace"; + private static final String PROVIDER_TARGET_PROPERTY_NAME = "providerTarget"; + private static final String PROVIDER_CONTENT_PROPERTY_NAME = "providerContent"; + private static final String PROVIDER_CONTENT_ID_PROPERTY_NAME = "providerContentId"; + + private static final String PROVIDER_TARGET_TEMPLATE = "{0}/{1}"; + + private final AuditLoggingFacade auditLoggingFacade; + + public ConfigurationEntryServiceAuditLog(AuditLoggingFacade auditLoggingFacade) { + this.auditLoggingFacade = auditLoggingFacade; + } + + public void logAddConfigurationEntry(String username, String spaceGuid, ConfigurationEntry entry) { + String performedAction = MessageFormat.format(Messages.ENTRY_CREATE, spaceGuid); + auditLoggingFacade.logConfigurationChangeAuditLog(new AuditLogConfiguration(username, + spaceGuid, + performedAction, + Messages.ENTRY_CREATE_AUDIT_LOG_CONFIG, + buildAddConfigEntryParameters(entry)), + ConfigurationChangeActions.CONFIGURATION_CREATE); + } + + public void logUpdateConfigurationEntry(String username, String spaceGuid, ConfigurationEntry oldEntry, ConfigurationEntry newEntry) { + String performedAction = MessageFormat.format(Messages.ENTRY_UPDATE, spaceGuid); + + auditLoggingFacade.logConfigurationChangeAuditLog(new AuditLogConfiguration(username, + spaceGuid, + performedAction, + Messages.ENTRY_UPDATE_AUDIT_LOG_CONFIG), + ConfigurationChangeActions.CONFIGURATION_UPDATE, oldEntry, newEntry); + + } + + private Map buildAddConfigEntryParameters(ConfigurationEntry entry) { + Map identifiers = new HashMap<>(); + String providerTarget = MessageFormat.format(PROVIDER_TARGET_TEMPLATE, + entry.getTargetSpace() + .getOrganizationName(), + entry.getTargetSpace() + .getSpaceName()); + + identifiers.put(PROVIDER_ID_PROPERTY_NAME, entry.getProviderId()); + identifiers.put(PROVIDER_NID_PROPERTY_NAME, entry.getProviderNid()); + identifiers.put(PROVIDER_VERSION_PROPERTY_NAME, Objects.toString(entry.getProviderVersion())); + identifiers.put(PROVIDER_NAMESPACE_PROPERTY_NAME, entry.getProviderNamespace()); + identifiers.put(PROVIDER_TARGET_PROPERTY_NAME, providerTarget); + identifiers.put(PROVIDER_CONTENT_PROPERTY_NAME, entry.getContent()); + identifiers.put(PROVIDER_CONTENT_ID_PROPERTY_NAME, entry.getContentId()); + + return identifiers; + } + +} diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ConfigurationSubscriptionServiceAuditLog.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ConfigurationSubscriptionServiceAuditLog.java new file mode 100644 index 0000000000..6763298a66 --- /dev/null +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/ConfigurationSubscriptionServiceAuditLog.java @@ -0,0 +1,58 @@ +package org.cloudfoundry.multiapps.controller.core.auditlogging; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; + +import org.cloudfoundry.multiapps.controller.core.Messages; +import org.cloudfoundry.multiapps.controller.core.auditlogging.model.AuditLogConfiguration; +import org.cloudfoundry.multiapps.controller.core.auditlogging.model.ConfigurationChangeActions; +import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationSubscription; + +public class ConfigurationSubscriptionServiceAuditLog { + + private static final String SUBSCRIPTION_ID_PROPERTY_NAME = "subscriptionId"; + private static final String APPLICATION_ID_PROPERTY_NAME = "applicationId"; + private static final String MTA_ID_PROPERTY_NAME = "mtaId"; + + private final AuditLoggingFacade auditLoggingFacade; + + public ConfigurationSubscriptionServiceAuditLog(AuditLoggingFacade auditLoggingFacade) { + this.auditLoggingFacade = auditLoggingFacade; + } + + public void logAddConfigurationSubscription(String username, String spaceGuid, ConfigurationSubscription subscription) { + String performedAction = MessageFormat.format(Messages.SUBSCRIPTION_CREATE, spaceGuid); + auditLoggingFacade.logConfigurationChangeAuditLog(new AuditLogConfiguration(username, + spaceGuid, + performedAction, + Messages.SUBSCRIPTION_CREATE_AUDIT_LOG_CONFIG, + buildAddConfigSubscriptionParameters( + subscription)), + ConfigurationChangeActions.CONFIGURATION_CREATE); + } + + public void logUpdateConfigurationSubscription(String username, String spaceGuid, ConfigurationSubscription oldSubscription, + ConfigurationSubscription updatedSubscription) { + + String performedAction = MessageFormat.format(Messages.SUBSCRIPTION_UPDATE, spaceGuid); + + auditLoggingFacade.logConfigurationChangeAuditLog(new AuditLogConfiguration(username, + spaceGuid, + performedAction, + Messages.SUBSCRIPTION_UPDATE_AUDIT_LOG_CONFIG), + ConfigurationChangeActions.CONFIGURATION_UPDATE, oldSubscription, + updatedSubscription); + } + + private Map buildAddConfigSubscriptionParameters(ConfigurationSubscription subscription) { + Map identifiers = new HashMap<>(); + + identifiers.put(APPLICATION_ID_PROPERTY_NAME, subscription.getAppName()); + identifiers.put(MTA_ID_PROPERTY_NAME, subscription.getMtaId()); + identifiers.put(SUBSCRIPTION_ID_PROPERTY_NAME, String.valueOf(subscription.getId())); + + return identifiers; + } + +} diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/impl/AuditLoggingFacadeSLImpl.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/impl/AuditLoggingFacadeSLImpl.java index 82375a1260..d55c2196ce 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/impl/AuditLoggingFacadeSLImpl.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/impl/AuditLoggingFacadeSLImpl.java @@ -1,5 +1,7 @@ package org.cloudfoundry.multiapps.controller.core.auditlogging.impl; +import javax.sql.DataSource; + import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger; @@ -8,8 +10,7 @@ import org.cloudfoundry.multiapps.controller.core.auditlogging.UserInfoProvider; import org.cloudfoundry.multiapps.controller.core.auditlogging.model.AuditLogConfiguration; import org.cloudfoundry.multiapps.controller.core.auditlogging.model.ConfigurationChangeActions; - -import javax.sql.DataSource; +import org.cloudfoundry.multiapps.mta.model.AuditableConfiguration; public class AuditLoggingFacadeSLImpl implements AuditLoggingFacade { @@ -35,6 +36,14 @@ public void logConfigurationChangeAuditLog(AuditLogConfiguration configuration, writeMessage(auditLogManager.getConfigLogger(), configuration.getPerformedAction(), Level.WARN); } + @Override + public void logConfigurationChangeAuditLog(AuditLogConfiguration configuration, + ConfigurationChangeActions configurationAction, + AuditableConfiguration oldValue, + AuditableConfiguration newValue) { + writeMessage(auditLogManager.getConfigLogger(), configuration.getPerformedAction(), Level.WARN); + } + private void writeMessage(Logger logger, String message, Level level) { Exception loggingException = null; synchronized (auditLogManager) { diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/model/AuditLogConfiguration.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/model/AuditLogConfiguration.java index 10718b41bf..d3d71c2ad9 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/model/AuditLogConfiguration.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/auditlogging/model/AuditLogConfiguration.java @@ -3,8 +3,6 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,6 +34,10 @@ public AuditLogConfiguration(String userId, String spaceId, String performedActi this.parameters = parameters; } + public AuditLogConfiguration(String spaceId, String performedAction, String configuration) { + this(null, spaceId, performedAction, configuration); + } + public String getPerformedAction() { return performedAction; } @@ -59,7 +61,8 @@ public String getUserId() { } public String getTimeOfPerformedAction() { - return LocalDateTime.now().toString(); + return LocalDateTime.now() + .toString(); } @Override diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/liquibase/RecoveringLockService.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/liquibase/RecoveringLockService.java index 1f6d3aac40..5ef2815b30 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/liquibase/RecoveringLockService.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/liquibase/RecoveringLockService.java @@ -1,18 +1,17 @@ package org.cloudfoundry.multiapps.controller.core.liquibase; -import static java.text.MessageFormat.format; - import java.util.Date; import java.util.concurrent.TimeUnit; +import liquibase.exception.LockException; +import liquibase.lockservice.DatabaseChangeLogLock; +import liquibase.lockservice.StandardLockService; import org.cloudfoundry.multiapps.controller.core.Messages; import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import liquibase.exception.LockException; -import liquibase.lockservice.DatabaseChangeLogLock; -import liquibase.lockservice.StandardLockService; +import static java.text.MessageFormat.format; public class RecoveringLockService extends StandardLockService { @@ -31,7 +30,7 @@ public RecoveringLockService() { @Override public int getPriority() { return super.getPriority() + 1; // Liquibase chooses which LockService to use based on its priority. This line makes sure that our - // custom lock service has a higher priority than the standard one (which it extends). + // custom lock service has a higher priority than the standard one (which it extends). } @Override diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfiguration.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfiguration.java index f69fb3b608..10fe7f0273 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfiguration.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfiguration.java @@ -1,5 +1,15 @@ package org.cloudfoundry.multiapps.controller.core.util; +import java.net.MalformedURLException; +import java.net.URL; +import java.time.Duration; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + import jakarta.inject.Inject; import jakarta.inject.Named; import org.apache.commons.collections4.CollectionUtils; @@ -18,16 +28,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.support.CronExpression; -import java.net.MalformedURLException; -import java.net.URL; -import java.time.Duration; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - import static java.text.MessageFormat.format; @Named @@ -37,6 +37,12 @@ public class ApplicationConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfiguration.class); // Environment variables: + static final String CONTROLLER_URL = "CONTROLLER_URL"; + static final String SPACE_GUID = "SPACE_GUID"; + static final String ORGANISATION_NAME = "ORGANISATION_NAME"; + static final String DEPLOY_SERVICE_URL = "DEPLOY_SERVICE_URL"; + static final String APPLICATION_GUID = "APPLICATION_GUID"; + static final String CFG_PLATFORM = "PLATFORM"; // Mandatory static final String CFG_MAX_UPLOAD_SIZE = "MAX_UPLOAD_SIZE"; static final String CFG_MAX_MTA_DESCRIPTOR_SIZE = "MAX_MTA_DESCRIPTOR_SIZE"; @@ -64,10 +70,6 @@ public class ApplicationConfiguration { static final String CFG_HEALTH_CHECK_MTA_ID = "HEALTH_CHECK_MTA_ID"; static final String CFG_HEALTH_CHECK_USER = "HEALTH_CHECK_USER"; static final String CFG_HEALTH_CHECK_TIME_RANGE = "HEALTH_CHECK_TIME_RANGE"; - static final String CFG_AUDIT_LOG_CLIENT_CORE_THREADS = "AUDIT_LOG_CLIENT_CORE_THREADS"; - static final String CFG_AUDIT_LOG_CLIENT_MAX_THREADS = "AUDIT_LOG_CLIENT_MAX_THREADS"; - static final String CFG_AUDIT_LOG_CLIENT_QUEUE_CAPACITY = "AUDIT_LOG_CLIENT_QUEUE_CAPACITY"; - static final String CFG_AUDIT_LOG_CLIENT_KEEP_ALIVE = "AUDIT_LOG_CLIENT_KEEP_ALIVE"; static final String CFG_FLOWABLE_JOB_EXECUTOR_CORE_THREADS = "FLOWABLE_JOB_EXECUTOR_CORE_THREADS"; static final String CFG_FLOWABLE_JOB_EXECUTOR_MAX_THREADS = "FLOWABLE_JOB_EXECUTOR_MAX_THREADS"; static final String CFG_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY = "FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY"; @@ -122,10 +124,6 @@ public class ApplicationConfiguration { public static final Integer DEFAULT_CHANGE_LOG_LOCK_DURATION = 1; // 1 minute(s) public static final Integer DEFAULT_CHANGE_LOG_LOCK_ATTEMPTS = 5; // 5 minute(s) public static final Integer DEFAULT_HEALTH_CHECK_TIME_RANGE = (int) TimeUnit.MINUTES.toSeconds(5); - public static final Integer DEFAULT_AUDIT_LOG_CLIENT_CORE_THREADS = 32; - public static final Integer DEFAULT_AUDIT_LOG_CLIENT_MAX_THREADS = 64; - public static final Integer DEFAULT_AUDIT_LOG_CLIENT_QUEUE_CAPACITY = 32767; - public static final Integer DEFAULT_AUDIT_LOG_CLIENT_KEEP_ALIVE = 60; public static final Integer DEFAULT_FLOWABLE_JOB_EXECUTOR_CORE_THREADS = 8; public static final Integer DEFAULT_FLOWABLE_JOB_EXECUTOR_MAX_THREADS = 32; public static final Integer DEFAULT_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY = 16; @@ -170,7 +168,6 @@ public class ApplicationConfiguration { private String cronExpressionForOldData; private String executionTimeForFinishedProcesses; private Long maxTtlForOldData; - private Boolean useXSAuditLogging; private String spaceGuid; private String orgName; private Boolean basicAuthEnabled; @@ -189,10 +186,6 @@ public class ApplicationConfiguration { private HealthCheckConfiguration healthCheckConfiguration; private String applicationGuid; private Integer applicationInstanceIndex; - private Integer auditLogClientCoreThreads; - private Integer auditLogClientMaxThreads; - private Integer auditLogClientQueueCapacity; - private Integer auditLogClientKeepAlive; private Integer flowableJobExecutorCoreThreads; private Integer flowableJobExecutorMaxThreads; private Integer flowableJobExecutorQueueCapacity; @@ -227,6 +220,14 @@ public ApplicationConfiguration(Environment environment) { this.environment = environment; } + protected void logEnvironmentVariable(String envVariableName, String message, Object value) { + LOGGER.info(format(message, value)); + } + + protected void logSpaceGuid(String envVariableName, Object value) { + LOGGER.info(format(Messages.SPACE_GUID, value)); + } + public void load() { getControllerUrl(); getMaxUploadSize(); @@ -234,7 +235,6 @@ public void load() { getMaxManifestSize(); getMaxResourceFileSize(); getMaxResolvedExternalContentSize(); - shouldUseXSAuditLogging(); getSpaceGuid(); getOrgName(); getDeployServiceUrl(); @@ -252,10 +252,6 @@ public void load() { getHealthCheckConfiguration(); getApplicationGuid(); getApplicationInstanceIndex(); - getAuditLogClientCoreThreads(); - getAuditLogClientMaxThreads(); - getAuditLogClientQueueCapacity(); - getAuditLogClientKeepAlive(); getFssCacheUpdateTimeoutMinutes(); getSnakeyamlMaxAliasesForCollections(); getServiceHandlingMaxParallelThreads(); @@ -277,9 +273,8 @@ private Set getNotSensitiveConfigVariables() { CFG_MAX_RESOLVED_EXTERNAL_CONTENT_SIZE, CFG_USE_XS_AUDIT_LOGGING, CFG_BASIC_AUTH_ENABLED, CFG_STEP_POLLING_INTERVAL_IN_SECONDS, CFG_SKIP_SSL_VALIDATION, CFG_VERSION, CFG_CHANGE_LOG_LOCK_POLL_RATE, CFG_CHANGE_LOG_LOCK_DURATION, CFG_CHANGE_LOG_LOCK_ATTEMPTS, CFG_GLOBAL_CONFIG_SPACE, - CFG_AUDIT_LOG_CLIENT_CORE_THREADS, CFG_AUDIT_LOG_CLIENT_MAX_THREADS, CFG_AUDIT_LOG_CLIENT_QUEUE_CAPACITY, CFG_FLOWABLE_JOB_EXECUTOR_CORE_THREADS, CFG_FLOWABLE_JOB_EXECUTOR_MAX_THREADS, - CFG_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY, CFG_AUDIT_LOG_CLIENT_KEEP_ALIVE, CFG_CONTROLLER_CLIENT_CONNECTION_POOL_SIZE, + CFG_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY, CFG_CONTROLLER_CLIENT_CONNECTION_POOL_SIZE, CFG_CONTROLLER_CLIENT_THREAD_POOL_SIZE, CFG_CONTROLLER_CLIENT_RESPONSE_TIMEOUT, CFG_DB_TRANSACTION_TIMEOUT_IN_SECONDS, CFG_SNAKEYAML_MAX_ALIASES_FOR_COLLECTIONS, CFG_SERVICE_HANDLING_MAX_PARALLEL_THREADS); } @@ -354,13 +349,6 @@ public Long getMaxTtlForOldData() { return maxTtlForOldData; } - public Boolean shouldUseXSAuditLogging() { - if (useXSAuditLogging == null) { - useXSAuditLogging = shouldUseXSAuditLoggingFromEnvironment(); - } - return useXSAuditLogging; - } - public String getSpaceGuid() { if (spaceGuid == null) { spaceGuid = getSpaceGuidFromEnvironment(); @@ -498,35 +486,8 @@ public Integer getApplicationInstanceIndex() { if (applicationInstanceIndex == null) { applicationInstanceIndex = getApplicationInstanceIndexFromEnvironment(); } - return applicationInstanceIndex; - } - - public Integer getAuditLogClientCoreThreads() { - if (auditLogClientCoreThreads == null) { - auditLogClientCoreThreads = getAuditLogClientCoreThreadsFromEnvironment(); - } - return auditLogClientCoreThreads; - } - - public Integer getAuditLogClientMaxThreads() { - if (auditLogClientMaxThreads == null) { - auditLogClientMaxThreads = getAuditLogClientMaxThreadsFromEnvironment(); - } - return auditLogClientMaxThreads; - } - public Integer getAuditLogClientQueueCapacity() { - if (auditLogClientQueueCapacity == null) { - auditLogClientQueueCapacity = getAuditLogClientQueueCapacityFromEnvironment(); - } - return auditLogClientQueueCapacity; - } - - public Integer getAuditLogClientKeepAlive() { - if (auditLogClientKeepAlive == null) { - auditLogClientKeepAlive = getAuditLogClientKeepAliveFromEnvironment(); - } - return auditLogClientKeepAlive; + return applicationInstanceIndex; } public Integer getFlowableJobExecutorCoreThreads() { @@ -684,7 +645,7 @@ private URL getControllerUrlFromEnvironment() { } try { URL parsedControllerUrl = MiscUtil.getURL(controllerUrlString); - LOGGER.info(format(Messages.CONTROLLER_URL, parsedControllerUrl)); + logEnvironmentVariable(CONTROLLER_URL, Messages.CONTROLLER_URL, parsedControllerUrl); return parsedControllerUrl; } catch (MalformedURLException | IllegalArgumentException e) { throw new IllegalArgumentException(format(Messages.INVALID_CONTROLLER_URL, controllerUrlString), e); @@ -701,13 +662,13 @@ private String getControllerUrl(Map vcapApplication) { private Long getMaxUploadSizeFromEnvironment() { Long value = environment.getLong(CFG_MAX_UPLOAD_SIZE, DEFAULT_MAX_UPLOAD_SIZE); - LOGGER.info(format(Messages.MAX_UPLOAD_SIZE, value)); + logEnvironmentVariable(CFG_MAX_UPLOAD_SIZE, Messages.MAX_UPLOAD_SIZE, value); return value; } private Long getMaxMtaDescriptorSizeFromEnvironment() { Long value = environment.getLong(CFG_MAX_MTA_DESCRIPTOR_SIZE, DEFAULT_MAX_MTA_DESCRIPTOR_SIZE); - LOGGER.info(format(Messages.MAX_MTA_DESCRIPTOR_SIZE, value)); + logEnvironmentVariable(CFG_MAX_MTA_DESCRIPTOR_SIZE, Messages.MAX_MTA_DESCRIPTOR_SIZE, value); return value; } @@ -717,49 +678,43 @@ private Platform getPlatformFromEnvironment() { throw new IllegalStateException(Messages.PLATFORMS_NOT_SPECIFIED); } Platform parsedPlatform = new ConfigurationParser().parsePlatformJson(platformJson); - LOGGER.debug(format(Messages.PLATFORM, JsonUtil.toJson(parsedPlatform, true))); + logEnvironmentVariable(CFG_PLATFORM, Messages.PLATFORM, JsonUtil.toJson(parsedPlatform, true)); return parsedPlatform; } private Long getMaxManifestSizeFromEnvironment() { Long value = environment.getLong(CFG_MAX_MANIFEST_SIZE, DEFAULT_MAX_MANIFEST_SIZE); - LOGGER.info(format(Messages.MAX_MANIFEST_SIZE, value)); + logEnvironmentVariable(CFG_MAX_MANIFEST_SIZE, Messages.MAX_MANIFEST_SIZE, value); return value; } private Long getMaxResourceFileSizeFromEnvironment() { Long value = environment.getLong(CFG_MAX_RESOURCE_FILE_SIZE, DEFAULT_MAX_RESOURCE_FILE_SIZE); - LOGGER.info(format(Messages.MAX_RESOURCE_FILE_SIZE, value)); + logEnvironmentVariable(CFG_MAX_RESOURCE_FILE_SIZE, Messages.MAX_RESOURCE_FILE_SIZE, value); return value; } private Long getMaxResolvedExternalContentSizeFromEnvironment() { Long value = environment.getLong(CFG_MAX_RESOLVED_EXTERNAL_CONTENT_SIZE, DEFAULT_CFG_MAX_RESOLVED_EXTERNAL_CONTENT_SIZE); - LOGGER.info(format(Messages.MAX_RESOLVED_EXTERNAL_CONTENT_SIZE, value)); + logEnvironmentVariable(CFG_MAX_RESOLVED_EXTERNAL_CONTENT_SIZE, Messages.MAX_RESOLVED_EXTERNAL_CONTENT_SIZE, value); return value; } private String getCronExpressionForOldDataFromEnvironment() { String value = getCronExpression(CFG_CRON_EXPRESSION_FOR_OLD_DATA, DEFAULT_CRON_EXPRESSION_FOR_OLD_DATA); - LOGGER.info(format(Messages.CRON_EXPRESSION_FOR_OLD_DATA, value)); + logEnvironmentVariable(CFG_CRON_EXPRESSION_FOR_OLD_DATA, Messages.CRON_EXPRESSION_FOR_OLD_DATA, value); return value; } private String getExecutionTimeForFinishedProcessesFromEnvironment() { String value = getCronExpression(CFG_EXECUTION_TIME_FOR_FINISHED_PROCESSES, DEFAULT_EXECUTION_TIME_FOR_FINISHED_PROCESSES); - LOGGER.info(format(Messages.EXECUTION_TIME_FOR_FINISHED_PROCESSES, value)); + logEnvironmentVariable(CFG_EXECUTION_TIME_FOR_FINISHED_PROCESSES, Messages.EXECUTION_TIME_FOR_FINISHED_PROCESSES, value); return value; } private Long getMaxTtlForOldDataFromEnvironment() { Long value = environment.getLong(CFG_MAX_TTL_FOR_OLD_DATA, DEFAULT_MAX_TTL_FOR_OLD_DATA); - LOGGER.info(format(Messages.MAX_TTL_FOR_OLD_DATA, value)); - return value; - } - - private Boolean shouldUseXSAuditLoggingFromEnvironment() { - Boolean value = environment.getBoolean(CFG_USE_XS_AUDIT_LOGGING, DEFAULT_USE_XS_AUDIT_LOGGING); - LOGGER.info(format(Messages.USE_XS_AUDIT_LOGGING, value)); + logEnvironmentVariable(CFG_MAX_TTL_FOR_OLD_DATA, Messages.MAX_TTL_FOR_OLD_DATA, value); return value; } @@ -767,7 +722,7 @@ private String getSpaceGuidFromEnvironment() { Map vcapApplicationMap = getVcapApplication(); Object spaceGuidValue = vcapApplicationMap.get("space_id"); if (spaceGuidValue != null) { - LOGGER.info(format(Messages.SPACE_GUID, spaceGuidValue)); + logSpaceGuid(SPACE_GUID, spaceGuidValue); return spaceGuidValue.toString(); } LOGGER.warn(format(Messages.SPACE_GUID_NOT_SPECIFIED_USING_DEFAULT_0, DEFAULT_SPACE_GUID)); @@ -778,7 +733,7 @@ private String getOrgNameFromEnvironment() { Map vcapApplicationMap = getVcapApplication(); Object orgNameValue = vcapApplicationMap.get("organization_name"); if (orgNameValue != null) { - LOGGER.info(format(Messages.ORG_NAME, orgNameValue)); + logEnvironmentVariable(ORGANISATION_NAME, Messages.ORG_NAME, orgNameValue); return orgNameValue.toString(); } LOGGER.debug(Messages.ORG_NAME_NOT_SPECIFIED); @@ -824,20 +779,20 @@ private List getApplicationUris(Map vcapApplication) { private Boolean isBasicAuthEnabledThroughEnvironment() { Boolean value = environment.getBoolean(CFG_BASIC_AUTH_ENABLED, DEFAULT_BASIC_AUTH_ENABLED); - LOGGER.info(format(Messages.BASIC_AUTH_ENABLED, value)); + logEnvironmentVariable(CFG_BASIC_AUTH_ENABLED, Messages.BASIC_AUTH_ENABLED, value); return value; } private Integer getSpringSchedulerTaskExecutorThreadsFromEnvironment() { Integer value = environment.getInteger(CFG_SPRING_SCHEDULER_TASK_EXECUTOR_THREADS, DEFAULT_SPRING_SCHEDULER_TASK_EXECUTOR_THREADS); - LOGGER.info(format(Messages.SPRING_SCHEDULER_TASK_EXECUTOR_THREADS, value)); + logEnvironmentVariable(CFG_SPRING_SCHEDULER_TASK_EXECUTOR_THREADS, Messages.SPRING_SCHEDULER_TASK_EXECUTOR_THREADS, value); return value; } private Integer getFilesAsyncUploadExecutorMaxThreadsFromEnvironment() { Integer value = environment.getInteger(CFG_FILES_ASYNC_UPLOAD_EXECUTOR_MAX_THREADS, DEFAULT_FILES_ASYNC_UPLOAD_EXECUTOR_MAX_THREADS); - LOGGER.info(format(Messages.FILES_ASYNC_UPLOAD_EXECUTOR_MAX_THREADS, value)); + logEnvironmentVariable(CFG_FILES_ASYNC_UPLOAD_EXECUTOR_MAX_THREADS, Messages.FILES_ASYNC_UPLOAD_EXECUTOR_MAX_THREADS, value); return value; } @@ -852,55 +807,55 @@ private String getGlobalAuditorPasswordFromEnvironment() { private String getGlobalAuditorOriginFromEnvironment() { String value = environment.getString(CFG_GLOBAL_AUDITOR_ORIGIN, DEFAULT_GLOBAL_AUDITOR_ORIGIN); - LOGGER.info(format(Messages.GLOBAL_AUDITOR_ORIGIN, value)); + logEnvironmentVariable(CFG_GLOBAL_AUDITOR_ORIGIN, Messages.GLOBAL_AUDITOR_ORIGIN, value); return value; } private Integer getDbConnectionThreadsFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_DB_CONNECTION_THREADS, DEFAULT_DB_CONNECTION_THREADS); - LOGGER.info(format(Messages.DB_CONNECTION_THREADS, value)); + logEnvironmentVariable(CFG_DB_CONNECTION_THREADS, Messages.DB_CONNECTION_THREADS, value); return value; } private int getStepPollingIntervalFromEnvironment() { int value = environment.getPositiveInteger(CFG_STEP_POLLING_INTERVAL_IN_SECONDS, DEFAULT_STEP_POLLING_INTERVAL_IN_SECONDS); - LOGGER.info(format(Messages.STEP_POLLING_INTERVAL_IN_SECONDS, value)); + logEnvironmentVariable(CFG_STEP_POLLING_INTERVAL_IN_SECONDS, Messages.STEP_POLLING_INTERVAL_IN_SECONDS, value); return value; } private Boolean shouldSkipSslValidationBasedOnEnvironment() { Boolean value = environment.getBoolean(CFG_SKIP_SSL_VALIDATION, DEFAULT_SKIP_SSL_VALIDATION); - LOGGER.info(format(Messages.SKIP_SSL_VALIDATION, value)); + logEnvironmentVariable(CFG_SKIP_SSL_VALIDATION, Messages.SKIP_SSL_VALIDATION, value); return value; } private String getVersionFromEnvironment() { String value = environment.getString(CFG_VERSION, DEFAULT_VERSION); - LOGGER.info(format(Messages.DS_VERSION, value)); + logEnvironmentVariable(CFG_VERSION, Messages.DS_VERSION, value); return value; } private Integer getChangeLogLockPollRateFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CHANGE_LOG_LOCK_POLL_RATE, DEFAULT_CHANGE_LOG_LOCK_POLL_RATE); - LOGGER.info(format(Messages.CHANGE_LOG_LOCK_POLL_RATE, value)); + logEnvironmentVariable(CFG_CHANGE_LOG_LOCK_POLL_RATE, Messages.CHANGE_LOG_LOCK_POLL_RATE, value); return value; } private Integer getChangeLogLockDurationFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CHANGE_LOG_LOCK_DURATION, DEFAULT_CHANGE_LOG_LOCK_DURATION); - LOGGER.info(format(Messages.CHANGE_LOG_LOCK_DURATION, value)); + logEnvironmentVariable(CFG_CHANGE_LOG_LOCK_DURATION, Messages.CHANGE_LOG_LOCK_DURATION, value); return value; } private Integer getChangeLogLockAttemptsFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CHANGE_LOG_LOCK_ATTEMPTS, DEFAULT_CHANGE_LOG_LOCK_ATTEMPTS); - LOGGER.info(format(Messages.CHANGE_LOG_LOCK_ATTEMPTS, value)); + logEnvironmentVariable(CFG_CHANGE_LOG_LOCK_ATTEMPTS, Messages.CHANGE_LOG_LOCK_ATTEMPTS, value); return value; } private String getGlobalConfigSpaceFromEnvironment() { String value = environment.getString(CFG_GLOBAL_CONFIG_SPACE); - LOGGER.debug(format(Messages.GLOBAL_CONFIG_SPACE, value)); + logEnvironmentVariable(CFG_GLOBAL_CONFIG_SPACE, Messages.GLOBAL_CONFIG_SPACE, value); return value; } @@ -937,56 +892,32 @@ private Integer getHealthCheckTimeRangeFromEnvironment() { private String getApplicationGuidFromEnvironment() { Map vcapApplicationMap = getVcapApplication(); String applicationId = (String) vcapApplicationMap.get("application_id"); - LOGGER.info(format(Messages.APPLICATION_GUID, applicationId)); + logEnvironmentVariable(APPLICATION_GUID, Messages.APPLICATION_GUID, applicationId); return applicationId; } private Integer getApplicationInstanceIndexFromEnvironment() { Integer applicationInstanceIndexFromEnvironment = environment.getInteger(CFG_CF_INSTANCE_INDEX); - LOGGER.info(format(Messages.APPLICATION_INSTANCE_INDEX, applicationInstanceIndexFromEnvironment)); + logEnvironmentVariable(CFG_CF_INSTANCE_INDEX, Messages.APPLICATION_INSTANCE_INDEX, applicationInstanceIndexFromEnvironment); return applicationInstanceIndexFromEnvironment; } - private Integer getAuditLogClientCoreThreadsFromEnvironment() { - Integer value = environment.getPositiveInteger(CFG_AUDIT_LOG_CLIENT_CORE_THREADS, DEFAULT_AUDIT_LOG_CLIENT_CORE_THREADS); - LOGGER.info(format(Messages.AUDIT_LOG_CLIENT_CORE_THREADS, value)); - return value; - } - - private Integer getAuditLogClientMaxThreadsFromEnvironment() { - Integer value = environment.getPositiveInteger(CFG_AUDIT_LOG_CLIENT_MAX_THREADS, DEFAULT_AUDIT_LOG_CLIENT_MAX_THREADS); - LOGGER.info(format(Messages.AUDIT_LOG_CLIENT_MAX_THREADS, value)); - return value; - } - - private Integer getAuditLogClientQueueCapacityFromEnvironment() { - Integer value = environment.getPositiveInteger(CFG_AUDIT_LOG_CLIENT_QUEUE_CAPACITY, DEFAULT_AUDIT_LOG_CLIENT_QUEUE_CAPACITY); - LOGGER.info(format(Messages.AUDIT_LOG_CLIENT_QUEUE_CAPACITY, value)); - return value; - } - - private Integer getAuditLogClientKeepAliveFromEnvironment() { - Integer value = environment.getPositiveInteger(CFG_AUDIT_LOG_CLIENT_KEEP_ALIVE, DEFAULT_AUDIT_LOG_CLIENT_KEEP_ALIVE); - LOGGER.info(format(Messages.AUDIT_LOG_CLIENT_KEEP_ALIVE, value)); - return value; - } - private Integer getFlowableJobExecutorCoreThreadsFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_FLOWABLE_JOB_EXECUTOR_CORE_THREADS, DEFAULT_FLOWABLE_JOB_EXECUTOR_CORE_THREADS); - LOGGER.info(format(Messages.FLOWABLE_JOB_EXECUTOR_CORE_THREADS, value)); + logEnvironmentVariable(CFG_FLOWABLE_JOB_EXECUTOR_CORE_THREADS, Messages.FLOWABLE_JOB_EXECUTOR_CORE_THREADS, value); return value; } private Integer getFlowableJobExecutorMaxThreadsFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_FLOWABLE_JOB_EXECUTOR_MAX_THREADS, DEFAULT_FLOWABLE_JOB_EXECUTOR_MAX_THREADS); - LOGGER.info(format(Messages.FLOWABLE_JOB_EXECUTOR_MAX_THREADS, value)); + logEnvironmentVariable(CFG_FLOWABLE_JOB_EXECUTOR_MAX_THREADS, Messages.FLOWABLE_JOB_EXECUTOR_MAX_THREADS, value); return value; } private Integer getFlowableJobExecutorQueueCapacityFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY, DEFAULT_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY); - LOGGER.info(format(Messages.FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY, value)); + logEnvironmentVariable(CFG_FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY, Messages.FLOWABLE_JOB_EXECUTOR_QUEUE_CAPACITY, value); return value; } @@ -1001,114 +932,120 @@ private String getCronExpression(String name, String defaultValue) { private Integer getFssCacheUpdateTimeoutMinutesFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_FSS_CACHE_UPDATE_TIMEOUT_MINUTES, DEFAULT_FSS_CACHE_UPDATE_TIMEOUT_MINUTES); - LOGGER.info(format(Messages.FSS_CACHE_UPDATE_TIMEOUT, value)); + logEnvironmentVariable(CFG_FSS_CACHE_UPDATE_TIMEOUT_MINUTES, Messages.FSS_CACHE_UPDATE_TIMEOUT, value); return value; } private Integer getThreadMonitorCacheUpdateInSecondsFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_THREAD_MONITOR_CACHE_UPDATE_IN_SECONDS, DEFAULT_THREAD_MONITOR_CACHE_UPDATE_IN_SECONDS); - LOGGER.info(format(Messages.THREAD_MONITOR_CACHE_TIMEOUT, value)); + logEnvironmentVariable(CFG_THREAD_MONITOR_CACHE_UPDATE_IN_SECONDS, Messages.THREAD_MONITOR_CACHE_TIMEOUT, value); return value; } private Integer getSpaceDeveloperCacheTimeInSecondsFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_SPACE_DEVELOPER_CACHE_TIME_IN_SECONDS, DEFAULT_SPACE_DEVELOPER_CACHE_TIME_IN_SECONDS); - LOGGER.info(format(Messages.SPACE_DEVELOPERS_CACHE_TIME_IN_SECONDS, value)); + logEnvironmentVariable(CFG_SPACE_DEVELOPER_CACHE_TIME_IN_SECONDS, Messages.SPACE_DEVELOPERS_CACHE_TIME_IN_SECONDS, value); return value; } private Duration getControllerClientSslHandshakeTimeoutFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CONTROLLER_CLIENT_SSL_HANDSHAKE_TIMEOUT_IN_SECONDS, DEFAULT_CONTROLLER_CLIENT_SSL_HANDSHAKE_TIMEOUT_IN_SECONDS); - LOGGER.info(format(Messages.CONTROLLER_CLIENT_SSL_HANDSHAKE_TIMEOUT_IN_SECONDS, value)); + logEnvironmentVariable(CFG_CONTROLLER_CLIENT_SSL_HANDSHAKE_TIMEOUT_IN_SECONDS, + Messages.CONTROLLER_CLIENT_SSL_HANDSHAKE_TIMEOUT_IN_SECONDS, value); return Duration.ofSeconds(value); } private Duration getControllerClientConnectTimeoutFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CONTROLLER_CLIENT_CONNECT_TIMEOUT_IN_SECONDS, DEFAULT_CONTROLLER_CLIENT_CONNECT_TIMEOUT_IN_SECONDS); - LOGGER.info(format(Messages.CONTROLLER_CLIENT_CONNECT_TIMEOUT_IN_SECONDS, value)); + logEnvironmentVariable(CFG_CONTROLLER_CLIENT_CONNECT_TIMEOUT_IN_SECONDS, Messages.CONTROLLER_CLIENT_CONNECT_TIMEOUT_IN_SECONDS, + value); return Duration.ofSeconds(value); } private Integer getControllerClientConnectionPoolSizeFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CONTROLLER_CLIENT_CONNECTION_POOL_SIZE, DEFAULT_CONTROLLER_CLIENT_CONNECTION_POOL_SIZE); - LOGGER.info(format(Messages.CONTROLLER_CLIENT_CONNECTION_POOL_SIZE, value)); + logEnvironmentVariable(CFG_CONTROLLER_CLIENT_CONNECTION_POOL_SIZE, Messages.CONTROLLER_CLIENT_CONNECTION_POOL_SIZE, value); return value; } private Integer getControllerClientThreadPoolSizeFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CONTROLLER_CLIENT_THREAD_POOL_SIZE, DEFAULT_CONTROLLER_CLIENT_THREAD_POOL_SIZE); - LOGGER.info(format(Messages.CONTROLLER_CLIENT_THREAD_POOL_SIZE, value)); + logEnvironmentVariable(CFG_CONTROLLER_CLIENT_THREAD_POOL_SIZE, Messages.CONTROLLER_CLIENT_THREAD_POOL_SIZE, value); return value; } private Duration getControllerClientResponseTimeoutFromEnvironment() { Integer value = environment.getPositiveInteger(CFG_CONTROLLER_CLIENT_RESPONSE_TIMEOUT, DEFAULT_CONTROLLER_CLIENT_RESPONSE_TIMEOUT_IN_SECONDS); - LOGGER.info(format(Messages.CONTROLLER_CLIENT_RESPONSE_TIMEOUT, value)); + logEnvironmentVariable(CFG_CONTROLLER_CLIENT_RESPONSE_TIMEOUT, Messages.CONTROLLER_CLIENT_RESPONSE_TIMEOUT, value); return Duration.ofSeconds(value); } private Integer getMicrometerStepInSecondsFromEnvironment() { Integer micrometerStepInSeconds = environment.getInteger(CFG_MICROMETER_STEP_IN_SECONDS, null); - LOGGER.info(format(Messages.MICROMETER_STEP_IN_SECONDS, micrometerStepInSeconds)); + logEnvironmentVariable(CFG_MICROMETER_STEP_IN_SECONDS, Messages.MICROMETER_STEP_IN_SECONDS, micrometerStepInSeconds); return micrometerStepInSeconds; } private Integer getDbTransactionTimeoutInSecondsFromEnvironment() { Integer dbTransactionTimeout = environment.getInteger(CFG_DB_TRANSACTION_TIMEOUT_IN_SECONDS, DEFAULT_DB_TRANSACTION_TIMEOUT_IN_SECONDS); - LOGGER.info(format(Messages.DB_TRANSACTION_TIMEOUT, dbTransactionTimeout)); + logEnvironmentVariable(CFG_DB_TRANSACTION_TIMEOUT_IN_SECONDS, Messages.DB_TRANSACTION_TIMEOUT, dbTransactionTimeout); return dbTransactionTimeout; } private Integer getSnakeyamlMaxAliasesForCollectionsFromEnvironment() { Integer snakeyamlMaxAliasesForCollections = environment.getPositiveInteger(CFG_SNAKEYAML_MAX_ALIASES_FOR_COLLECTIONS, DEFAULT_SNAKEYAML_MAX_ALIASES_FOR_COLLECTIONS); - LOGGER.info(format(Messages.SNAKEYAML_MAX_ALIASES_FOR_COLLECTIONS, snakeyamlMaxAliasesForCollections)); + logEnvironmentVariable(CFG_SNAKEYAML_MAX_ALIASES_FOR_COLLECTIONS, Messages.SNAKEYAML_MAX_ALIASES_FOR_COLLECTIONS, + snakeyamlMaxAliasesForCollections); return snakeyamlMaxAliasesForCollections; } private Integer getServiceHandlingMaxParallelThreadsFromEnvironment() { Integer serviceHandlingMaxParallelThreads = environment.getPositiveInteger(CFG_SERVICE_HANDLING_MAX_PARALLEL_THREADS, DEFAULT_SERVICE_HANDLING_MAX_PARALLEL_THREADS); - LOGGER.info(format(Messages.SERVICE_HANDLING_MAX_PARALLEL_THREADS, serviceHandlingMaxParallelThreads)); + logEnvironmentVariable(CFG_SERVICE_HANDLING_MAX_PARALLEL_THREADS, Messages.SERVICE_HANDLING_MAX_PARALLEL_THREADS, + serviceHandlingMaxParallelThreads); return serviceHandlingMaxParallelThreads; } private Integer getAbortedOperationsTtlInSecondsFromEnvironment() { Integer abortedOperationsTtlInSeconds = environment.getPositiveInteger(CFG_ABORTED_OPERATIONS_TTL_IN_MINUTES, DEFAULT_ABORTED_OPERATIONS_TTL_IN_SECONDS); - LOGGER.info(format(Messages.ABORTED_OPERATIONS_TTL_IN_SECONDS, abortedOperationsTtlInSeconds)); + logEnvironmentVariable(CFG_ABORTED_OPERATIONS_TTL_IN_MINUTES, Messages.ABORTED_OPERATIONS_TTL_IN_SECONDS, + abortedOperationsTtlInSeconds); return abortedOperationsTtlInSeconds; } private Boolean isOnStartFilesWithoutContentCleanerEnabledThroughEnvironment() { Boolean isOnStartFilesCleanerWithoutContentEnabled = environment.getBoolean(CFG_ENABLE_ON_START_FILES_WITHOUT_CONTENT_CLEANER, DEFAULT_ENABLE_ON_START_FILES_WITHOUT_CONTENT_CLEANER); - LOGGER.info(format(Messages.ON_START_FILES_CLEANER_WITHOUT_CONTENT_ENABLED_0, isOnStartFilesCleanerWithoutContentEnabled)); + logEnvironmentVariable(CFG_ENABLE_ON_START_FILES_WITHOUT_CONTENT_CLEANER, Messages.ON_START_FILES_CLEANER_WITHOUT_CONTENT_ENABLED_0, + isOnStartFilesCleanerWithoutContentEnabled); return isOnStartFilesCleanerWithoutContentEnabled; } private int getThreadsForFileUploadToControllerFromEnvironment() { int value = environment.getInteger(CFG_THREADS_FOR_FILE_UPLOAD_TO_CONTROLLER, DEFAULT_THREADS_FOR_FILE_UPLOAD_TO_CONTROLLER); - LOGGER.info(format(Messages.THREADS_FOR_FILE_STORAGE_UPLOAD_0, value)); + logEnvironmentVariable(CFG_THREADS_FOR_FILE_UPLOAD_TO_CONTROLLER, Messages.THREADS_FOR_FILE_STORAGE_UPLOAD_0, value); return value; } private int getThreadsForFileStorageUploadFromEnvironment() { int value = environment.getInteger(CFG_THREADS_FOR_FILE_STORAGE_UPLOAD, DEFAULT_THREADS_FOR_FILE_STORAGE_UPLOAD); - LOGGER.info(format(Messages.THREADS_FOR_FILE_UPLOAD_TO_CONTROLLER_0, value)); + logEnvironmentVariable(CFG_THREADS_FOR_FILE_STORAGE_UPLOAD, Messages.THREADS_FOR_FILE_UPLOAD_TO_CONTROLLER_0, value); return value; } public boolean isHealthCheckEnabledFromEnvironment() { boolean value = environment.getBoolean(CFG_IS_HEALTH_CHECK_ENABLED, DEFAULT_IS_HEALTH_CHECK_ENABLED); - LOGGER.info(format(Messages.IS_HEALTH_CHECK_ENABLED, value)); + logEnvironmentVariable(CFG_IS_HEALTH_CHECK_ENABLED, Messages.IS_HEALTH_CHECK_ENABLED, value); return value; } @@ -1132,8 +1069,7 @@ public String getInternalSupportChannel() { private String getCertificateCNFromEnvironment() { String value = environment.getString(CFG_CERTIFICATE_CN); - LOGGER.info(format(Messages.CERTIFICATE_CN, value)); + logEnvironmentVariable(CFG_CERTIFICATE_CN, Messages.CERTIFICATE_CN, value); return value; } - } \ No newline at end of file diff --git a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfigurationTest.java b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfigurationTest.java index a8ce36cd55..df0bf421ef 100644 --- a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfigurationTest.java +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/ApplicationConfigurationTest.java @@ -1,11 +1,5 @@ package org.cloudfoundry.multiapps.controller.core.util; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.when; - import java.net.URL; import java.text.MessageFormat; import java.time.Duration; @@ -30,6 +24,12 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; + class ApplicationConfigurationTest { private static final String VCAP_APPLICATION_WITHOUT_SPACE = "vcap-application-without-space.json"; @@ -178,14 +178,6 @@ void testGetMaxTtlForOldDataFromEnvironment() { Assertions.assertEquals(ApplicationConfiguration.DEFAULT_MAX_TTL_FOR_OLD_DATA, configuration.getMaxTtlForOldData()); } - @Test - void testShouldUseXSAuditLogging() { - Mockito.when(environment.getBoolean(ApplicationConfiguration.CFG_USE_XS_AUDIT_LOGGING, - ApplicationConfiguration.DEFAULT_USE_XS_AUDIT_LOGGING)) - .thenReturn(ApplicationConfiguration.DEFAULT_USE_XS_AUDIT_LOGGING); - Assertions.assertEquals(ApplicationConfiguration.DEFAULT_USE_XS_AUDIT_LOGGING, configuration.shouldUseXSAuditLogging()); - } - @Test void testGetOrgNameWithValidOrgName() { Map vcapApplication = injectFileInEnvironment(VCAP_APPLICATION, ApplicationConfiguration.CFG_VCAP_APPLICATION); @@ -351,40 +343,6 @@ void testGetApplicationInstanceIndex() { Assertions.assertEquals(instanceIndex, configuration.getApplicationInstanceIndex()); } - @Test - void testGetAuditLogClientCoreThreads() { - Mockito.when(environment.getPositiveInteger(ApplicationConfiguration.CFG_AUDIT_LOG_CLIENT_CORE_THREADS, - ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_CORE_THREADS)) - .thenReturn(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_CORE_THREADS); - Assertions.assertEquals(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_CORE_THREADS, - configuration.getAuditLogClientCoreThreads()); - } - - @Test - void testGetAuditLogClientMaxThreads() { - Mockito.when(environment.getPositiveInteger(ApplicationConfiguration.CFG_AUDIT_LOG_CLIENT_MAX_THREADS, - ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_MAX_THREADS)) - .thenReturn(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_MAX_THREADS); - Assertions.assertEquals(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_MAX_THREADS, configuration.getAuditLogClientMaxThreads()); - } - - @Test - void testGetAuditLogClientQueueCapacity() { - Mockito.when(environment.getPositiveInteger(ApplicationConfiguration.CFG_AUDIT_LOG_CLIENT_QUEUE_CAPACITY, - ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_QUEUE_CAPACITY)) - .thenReturn(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_QUEUE_CAPACITY); - Assertions.assertEquals(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_QUEUE_CAPACITY, - configuration.getAuditLogClientQueueCapacity()); - } - - @Test - void testGetAuditLogClientKeepAlive() { - Mockito.when(environment.getPositiveInteger(ApplicationConfiguration.CFG_AUDIT_LOG_CLIENT_KEEP_ALIVE, - ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_KEEP_ALIVE)) - .thenReturn(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_KEEP_ALIVE); - Assertions.assertEquals(ApplicationConfiguration.DEFAULT_AUDIT_LOG_CLIENT_KEEP_ALIVE, configuration.getAuditLogClientKeepAlive()); - } - @Test void testGetFlowableJobExecutorCoreThreads() { Mockito.when(environment.getPositiveInteger(ApplicationConfiguration.CFG_FLOWABLE_JOB_EXECUTOR_CORE_THREADS, diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStep.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStep.java index 09994ba95c..65abf85b9c 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStep.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStep.java @@ -1,12 +1,9 @@ package org.cloudfoundry.multiapps.controller.process.steps; -import java.text.MessageFormat; -import java.util.List; - import jakarta.inject.Inject; import jakarta.inject.Named; import jakarta.persistence.NoResultException; - +import org.cloudfoundry.multiapps.controller.core.auditlogging.ConfigurationSubscriptionServiceAuditLog; import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationSubscription; import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationSubscription.ResourceDto; import org.cloudfoundry.multiapps.controller.persistence.services.ConfigurationSubscriptionService; @@ -15,6 +12,9 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; +import java.text.MessageFormat; +import java.util.List; + @Named("createSubscriptionsStep") @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class CreateSubscriptionsStep extends SyncFlowableStep { @@ -22,6 +22,9 @@ public class CreateSubscriptionsStep extends SyncFlowableStep { @Inject private ConfigurationSubscriptionService configurationSubscriptionService; + @Inject + private ConfigurationSubscriptionServiceAuditLog configurationSubscriptionServiceAuditLog; + @Override protected StepPhase executeStep(ProcessContext context) { getStepLogger().debug(Messages.CREATING_SUBSCRIPTIONS); @@ -29,7 +32,7 @@ protected StepPhase executeStep(ProcessContext context) { List subscriptions = context.getVariable(Variables.SUBSCRIPTIONS_TO_CREATE); for (ConfigurationSubscription subscription : subscriptions) { - createSubscription(subscription); + createSubscription(context, subscription); getStepLogger().debug(Messages.CREATED_SUBSCRIPTION, subscription.getId()); } @@ -42,14 +45,19 @@ protected String getStepErrorMessage(ProcessContext context) { return Messages.ERROR_CREATING_SUBSCRIPTIONS; } - protected void createSubscription(ConfigurationSubscription subscription) { + protected void createSubscription(ProcessContext context, ConfigurationSubscription subscription) { infoSubscriptionCreation(subscription); ConfigurationSubscription existingSubscription = detectSubscription(subscription); if (existingSubscription != null) { configurationSubscriptionService.update(existingSubscription, subscription); + configurationSubscriptionServiceAuditLog.logUpdateConfigurationSubscription(context.getVariable(Variables.USER), + context.getVariable(Variables.SPACE_GUID), + existingSubscription, subscription); return; } configurationSubscriptionService.add(subscription); + configurationSubscriptionServiceAuditLog.logAddConfigurationSubscription(context.getVariable(Variables.USER), + context.getVariable(Variables.SPACE_GUID), subscription); } private void infoSubscriptionCreation(ConfigurationSubscription subscription) { diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStep.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStep.java index d0cd8fecc1..21a8756696 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStep.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStep.java @@ -1,17 +1,11 @@ package org.cloudfoundry.multiapps.controller.process.steps; -import java.text.MessageFormat; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - import jakarta.inject.Inject; import jakarta.inject.Named; - import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.cloudfoundry.multiapps.controller.client.lib.domain.CloudApplicationExtended; +import org.cloudfoundry.multiapps.controller.core.auditlogging.ConfigurationEntryServiceAuditLog; import org.cloudfoundry.multiapps.controller.core.model.DynamicResolvableParameter; import org.cloudfoundry.multiapps.controller.core.security.serialization.SecureSerialization; import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationEntry; @@ -22,6 +16,12 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; +import java.text.MessageFormat; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + @Named("publishProvidedDependenciesStep") @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class PublishConfigurationEntriesStep extends SyncFlowableStep { @@ -29,6 +29,9 @@ public class PublishConfigurationEntriesStep extends SyncFlowableStep { @Inject private ConfigurationEntryService configurationEntryService; + @Inject + private ConfigurationEntryServiceAuditLog configurationEntryServiceAuditLog; + @Inject private ConfigurationEntryDynamicParameterResolver dynamicParameterResolver; @@ -46,10 +49,11 @@ protected StepPhase executeStep(ProcessContext context) { return StepPhase.DONE; } Set dynamicResolvableParameters = context.getVariable(Variables.DYNAMIC_RESOLVABLE_PARAMETERS); - List resolvedEntriesToPublish = dynamicParameterResolver.resolveDynamicParametersOfConfigurationEntries(entriesToPublish, - dynamicResolvableParameters); + List resolvedEntriesToPublish = dynamicParameterResolver.resolveDynamicParametersOfConfigurationEntries( + entriesToPublish, + dynamicResolvableParameters); - List publishedEntries = publish(resolvedEntriesToPublish); + List publishedEntries = publish(context, resolvedEntriesToPublish); getStepLogger().debug(Messages.PUBLISHED_ENTRIES, SecureSerialization.toJson(publishedEntries)); context.setVariable(Variables.PUBLISHED_ENTRIES, publishedEntries); @@ -63,18 +67,22 @@ protected String getStepErrorMessage(ProcessContext context) { return Messages.ERROR_PUBLISHING_PUBLIC_PROVIDED_DEPENDENCIES; } - private List publish(List entriesToPublish) { + private List publish(ProcessContext context, List entriesToPublish) { return entriesToPublish.stream() - .map(this::publishConfigurationEntry) + .map(entry -> publishConfigurationEntry(context, entry)) .collect(Collectors.toList()); } - private ConfigurationEntry publishConfigurationEntry(ConfigurationEntry entry) { + private ConfigurationEntry publishConfigurationEntry(ProcessContext context, ConfigurationEntry entry) { infoConfigurationPublishment(entry); ConfigurationEntry currentEntry = getExistingEntry(entry); if (currentEntry == null) { + configurationEntryServiceAuditLog.logAddConfigurationEntry(context.getVariable(Variables.USER), + context.getVariable(Variables.SPACE_GUID), entry); return configurationEntryService.add(entry); } else { + configurationEntryServiceAuditLog.logUpdateConfigurationEntry(context.getVariable(Variables.USER), + context.getVariable(Variables.SPACE_GUID), currentEntry, entry); return configurationEntryService.update(currentEntry, entry); } } diff --git a/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStepTest.java b/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStepTest.java index 9851c808e5..457772137c 100644 --- a/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStepTest.java +++ b/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/CreateSubscriptionsStepTest.java @@ -1,17 +1,8 @@ package org.cloudfoundry.multiapps.controller.process.steps; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.when; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Stream; - import org.cloudfoundry.multiapps.common.test.TestUtil; import org.cloudfoundry.multiapps.common.util.JsonUtil; +import org.cloudfoundry.multiapps.controller.core.auditlogging.ConfigurationSubscriptionServiceAuditLog; import org.cloudfoundry.multiapps.controller.core.test.MockBuilder; import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationSubscription; import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationSubscription.ResourceDto; @@ -26,11 +17,21 @@ import org.mockito.Mock; import org.mockito.Mockito; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; + class CreateSubscriptionsStepTest extends SyncFlowableStepTest { public static Stream testExecute() { return Stream.of( -// @formatter:off + // @formatter:off // (0) Arguments.of("create-subscriptions-step-input-00.json", null), // (1) @@ -46,6 +47,9 @@ public static Stream testExecute() { @Mock(answer = Answers.RETURNS_SELF) private ConfigurationSubscriptionQuery configurationSubscriptionQuery; + @Mock + private ConfigurationSubscriptionServiceAuditLog configurationSubscriptionServiceAuditLog; + @ParameterizedTest @MethodSource void testExecute(String inputLocation, String expectedExceptionMessage) { @@ -87,10 +91,14 @@ private void prepareSubscriptionService(StepInput input) { if (resourceDto == null) { continue; } - ConfigurationSubscriptionQuery queryMock = new MockBuilder<>(configurationSubscriptionQuery).on(query -> query.appName(subscription.getAppName())) - .on(query -> query.spaceId(subscription.getSpaceId())) - .on(query -> query.resourceName(resourceDto.getName())) - .on(query -> query.mtaId(subscription.getMtaId())) + ConfigurationSubscriptionQuery queryMock = new MockBuilder<>(configurationSubscriptionQuery).on( + query -> query.appName(subscription.getAppName())) + .on(query -> query.spaceId( + subscription.getSpaceId())) + .on(query -> query.resourceName( + resourceDto.getName())) + .on(query -> query.mtaId( + subscription.getMtaId())) .build(); doReturn(setId(subscription)).when(queryMock) .singleResult(); diff --git a/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStepTest.java b/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStepTest.java index 70ba663e9a..39579c07f8 100644 --- a/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStepTest.java +++ b/multiapps-controller-process/src/test/java/org/cloudfoundry/multiapps/controller/process/steps/PublishConfigurationEntriesStepTest.java @@ -12,6 +12,7 @@ import org.cloudfoundry.multiapps.controller.client.facade.domain.CloudMetadata; import org.cloudfoundry.multiapps.controller.client.lib.domain.CloudApplicationExtended; import org.cloudfoundry.multiapps.controller.client.lib.domain.ImmutableCloudApplicationExtended; +import org.cloudfoundry.multiapps.controller.core.auditlogging.ConfigurationEntryServiceAuditLog; import org.cloudfoundry.multiapps.controller.core.test.MockBuilder; import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationEntry; import org.cloudfoundry.multiapps.controller.persistence.query.ConfigurationEntryQuery; @@ -51,6 +52,9 @@ private static class StepInput { @Mock private ConfigurationEntryDynamicParameterResolver dynamicParameterResolver; + @Mock + private ConfigurationEntryServiceAuditLog configurationEntryServiceAuditLog; + public static Stream test() { return Stream.of( // @formatter:off diff --git a/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/AsyncProcessLoggerConfiguration.java b/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/AsyncProcessLoggerConfiguration.java index 153c312f83..ea8963e9a9 100644 --- a/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/AsyncProcessLoggerConfiguration.java +++ b/multiapps-controller-web/src/main/java/org/cloudfoundry/multiapps/controller/web/configuration/AsyncProcessLoggerConfiguration.java @@ -1,18 +1,20 @@ package org.cloudfoundry.multiapps.controller.web.configuration; -import java.util.concurrent.Executor; - +import jakarta.inject.Inject; import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import java.util.concurrent.Executor; + @Configuration @EnableAsync public class AsyncProcessLoggerConfiguration { - - final ApplicationConfiguration configuration = new ApplicationConfiguration(); + + @Inject + private ApplicationConfiguration configuration; @Bean("asyncExecutor") public Executor getAsyncExecutor() { diff --git a/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/monitoring/FssMonitorTest.java b/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/monitoring/FssMonitorTest.java index 772ead4824..1687173796 100644 --- a/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/monitoring/FssMonitorTest.java +++ b/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/monitoring/FssMonitorTest.java @@ -1,7 +1,5 @@ package org.cloudfoundry.multiapps.controller.web.monitoring; -import static org.junit.jupiter.api.Assertions.assertEquals; - import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -17,6 +15,9 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.assertEquals; class FssMonitorTest { @@ -36,6 +37,7 @@ static void teardownAfterAll() throws IOException { @BeforeEach void setUpBefore() { + MockitoAnnotations.openMocks(this); ApplicationConfiguration appConfigurations = new ApplicationConfiguration(); fssMonitor = new FssMonitor(appConfigurations); } @@ -51,7 +53,8 @@ void testGetUsedSpace(File path, LocalDateTime lastCheck, long cachedValue, long static Stream testGetUsedSpace() throws IOException { return Stream.of(Arguments.of(tempDir.toFile(), LocalDateTime.now(), 10, 10), Arguments.of(tempDir.toFile(), LocalDateTime.now() - .minusMinutes(10), + .minusMinutes( + 10), 200, 200), Arguments.of(tempDir.toFile(), LocalDateTime.now() .minusMinutes(50), diff --git a/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/security/AuthorizationCheckerTest.java b/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/security/AuthorizationCheckerTest.java index 617d3b8bfc..ba13a5fe26 100644 --- a/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/security/AuthorizationCheckerTest.java +++ b/multiapps-controller-web/src/test/java/org/cloudfoundry/multiapps/controller/web/security/AuthorizationCheckerTest.java @@ -57,14 +57,16 @@ class AuthorizationCheckerTest { private WebClientFactory webClientFactory; @Mock private CfRolesGetter rolesGetter; - private final ApplicationConfiguration applicationConfiguration = new ApplicationConfiguration(); + + private ApplicationConfiguration applicationConfiguration; private AuthorizationChecker authorizationChecker; @BeforeEach - void setUp() throws Exception { - MockitoAnnotations.openMocks(this) - .close(); - authorizationChecker = new AuthorizationChecker(clientFactory, tokenService, applicationConfiguration, webClientFactory) { + void setUp() { + MockitoAnnotations.openMocks(this); + applicationConfiguration = new ApplicationConfiguration(); + authorizationChecker = new AuthorizationChecker( + clientFactory, tokenService, applicationConfiguration, webClientFactory) { @Override protected CfRolesGetter getRolesGetter(OAuth2AccessTokenWithAdditionalInfo token) { return rolesGetter;