diff --git a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/fixtures/cf/CloudFoundryService.java b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/fixtures/cf/CloudFoundryService.java index 91154e3..b4fb495 100644 --- a/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/fixtures/cf/CloudFoundryService.java +++ b/spring-cloud-app-broker-acceptance-tests/src/test/java/org/springframework/cloud/appbroker/acceptance/fixtures/cf/CloudFoundryService.java @@ -71,8 +71,6 @@ import reactor.core.publisher.Mono; import org.springframework.stereotype.Service; -import static java.lang.String.format; - @Service public class CloudFoundryService { @@ -88,8 +86,7 @@ public class CloudFoundryService { private final CloudFoundryProperties cloudFoundryProperties; - public CloudFoundryService(CloudFoundryClient cloudFoundryClient, - CloudFoundryOperations cloudFoundryOperations, + public CloudFoundryService(CloudFoundryClient cloudFoundryClient, CloudFoundryOperations cloudFoundryOperations, CloudFoundryProperties cloudFoundryProperties) { this.cloudFoundryClient = cloudFoundryClient; this.cloudFoundryOperations = cloudFoundryOperations; @@ -97,47 +94,47 @@ public class CloudFoundryService { } public Mono enableServiceBrokerAccess(String serviceName) { - return cloudFoundryOperations.serviceAdmin() - .enableServiceAccess(EnableServiceAccessRequest.builder() - .serviceName(serviceName) - .build()) - .doOnSuccess(item -> LOG.info("Enabled access to service " + serviceName)) - .doOnError(error -> LOG.error("Error enabling access to service " + serviceName + ": " + error)); + return cloudFoundryOperations.serviceAdmin().enableServiceAccess(EnableServiceAccessRequest.builder() + .serviceName(serviceName) + .build()) + .doOnSuccess(v -> LOG.info("Enabled access to service. serviceName={}", serviceName)) + .doOnError(e -> LOG.error(String.format("Error enabling access to service. serviceName=%s, error=%s", + serviceName, e.getMessage()), e)); } public Mono createServiceBroker(String brokerName, String testBrokerAppName) { return getApplicationRoute(testBrokerAppName) - .flatMap(url -> cloudFoundryOperations.serviceAdmin() - .create(CreateServiceBrokerRequest.builder() - .name(brokerName) - .username("user") - .password("password") - .url(url) - .build()) - .doOnSuccess(item -> LOG.info("Created service broker " + brokerName)) - .doOnError(error -> LOG.error("Error creating service broker " + brokerName + ": " + error))); + .flatMap(url -> cloudFoundryOperations.serviceAdmin().create(CreateServiceBrokerRequest.builder() + .name(brokerName) + .username("user") + .password("password") + .url(url) + .build()) + .doOnSuccess(v -> LOG.info("Success creating service broker. brokerName={}", brokerName)) + .doOnError(e -> LOG.error(String.format("Error creating service broker. brokerName=%s, error=%s", + brokerName, e.getMessage()), e))); } public Mono updateServiceBroker(String brokerName, String testBrokerAppName) { return getApplicationRoute(testBrokerAppName) - .flatMap(url -> cloudFoundryOperations.serviceAdmin() - .update(UpdateServiceBrokerRequest.builder() - .name(brokerName) - .username("user") - .password("password") - .url(url) - .build()) - .doOnSuccess(item -> LOG.info("Updating service broker " + brokerName)) - .doOnError(error -> LOG.error("Error updating service broker " + brokerName + ": " + error))); + .flatMap(url -> cloudFoundryOperations.serviceAdmin().update(UpdateServiceBrokerRequest.builder() + .name(brokerName) + .username("user") + .password("password") + .url(url) + .build()) + .doOnSuccess(v -> LOG.info("Success updating service broker. brokerName={}", brokerName)) + .doOnError(e -> LOG.error(String.format("Error updating service broker. brokerName=%s, error=%s", + brokerName, e.getMessage()), e))); } public Mono getApplicationRoute(String appName) { - return cloudFoundryOperations.applications() - .get(GetApplicationRequest.builder() - .name(appName) - .build()) - .doOnSuccess(item -> LOG.info("Got route for app " + appName)) - .doOnError(error -> LOG.error("Error getting route for app " + appName + ": " + error)) + return cloudFoundryOperations.applications().get(GetApplicationRequest.builder() + .name(appName) + .build()) + .doOnSuccess(item -> LOG.info("Success getting route for app. appName={}", appName)) + .doOnError(e -> LOG.error(String.format("Error getting route for app. appName=%s, error=%s", appName, + e.getMessage()), e)) .map(ApplicationDetail::getUrls) .flatMapMany(Flux::fromIterable) .next() @@ -146,101 +143,99 @@ public class CloudFoundryService { public Mono pushBrokerApp(String appName, Path appPath, String brokerClientId, List appBrokerProperties) { - return cloudFoundryOperations.applications() - .pushManifest(PushApplicationManifestRequest.builder() - .manifest(ApplicationManifest.builder() - .environmentVariables(appBrokerDeployerEnvironmentVariables(brokerClientId)) - .putAllEnvironmentVariables(propertiesToEnvironment(appBrokerProperties)) - .name(appName) - .path(appPath) - .memory(1024) - .build()) + return cloudFoundryOperations.applications().pushManifest(PushApplicationManifestRequest.builder() + .manifest(ApplicationManifest.builder() + .environmentVariables(appBrokerDeployerEnvironmentVariables(brokerClientId)) + .putAllEnvironmentVariables(propertiesToEnvironment(appBrokerProperties)) + .name(appName) + .path(appPath) + .memory(1024) .build()) - .doOnSuccess(item -> LOG.info("Pushed broker app " + appName)) - .doOnError(error -> LOG.error("Error pushing broker app " + appName + ": " + error)); + .build()) + .doOnSuccess(v -> LOG.info("Success pushing broker app. appName={}", appName)) + .doOnError(e -> LOG.error(String.format("Error pushing broker app. appName=%s, error=%s", appName, + e.getMessage()), e)); } public Mono updateBrokerApp(String appName, String brokerClientId, List appBrokerProperties) { - return cloudFoundryOperations.applications() - .get(GetApplicationRequest.builder().name(appName).build()) + return cloudFoundryOperations.applications().get(GetApplicationRequest.builder().name(appName).build()) .map(ApplicationDetail::getId) - .flatMap(applicationId -> - cloudFoundryClient - .applicationsV2() - .update(UpdateApplicationRequest - .builder() - .applicationId(applicationId) - .putAllEnvironmentJsons(appBrokerDeployerEnvironmentVariables(brokerClientId)) - .putAllEnvironmentJsons(propertiesToEnvironment(appBrokerProperties)) - .name(appName) - .memory(1024) - .build()) - .thenReturn(applicationId)) - .then(cloudFoundryOperations.applications() - .restart(RestartApplicationRequest.builder().name(appName).build())) + .flatMap(applicationId -> cloudFoundryClient.applicationsV2().update(UpdateApplicationRequest + .builder() + .applicationId(applicationId) + .putAllEnvironmentJsons(appBrokerDeployerEnvironmentVariables(brokerClientId)) + .putAllEnvironmentJsons(propertiesToEnvironment(appBrokerProperties)) + .name(appName) + .memory(1024) + .build()) + .thenReturn(applicationId)) + .then(cloudFoundryOperations.applications().restart(RestartApplicationRequest.builder() + .name(appName) + .build())) .doOnSuccess(item -> LOG.info("Updated broker app " + appName)) .doOnError(error -> LOG.error("Error updating broker app " + appName + ": " + error)) .then(); } public Mono deleteApp(String appName) { - return cloudFoundryOperations.applications() - .delete(DeleteApplicationRequest.builder() - .name(appName) - .deleteRoutes(true) - .build()) - .doOnSuccess(item -> LOG.info("Deleted app " + appName)) - .doOnError(error -> LOG.warn("Error deleting app " + appName + ": " + error)) + return cloudFoundryOperations.applications().delete(DeleteApplicationRequest.builder() + .name(appName) + .deleteRoutes(true) + .build()) + .doOnSuccess(item -> LOG.info("Success deleting app. appName={}", appName)) + .doOnError(e -> LOG.warn(String.format("Error deleting app. appName=%s, error=%s", appName, + e.getMessage()), e)) .onErrorResume(e -> Mono.empty()); } public Mono deleteServiceBroker(String brokerName) { - return cloudFoundryOperations.serviceAdmin() - .delete(DeleteServiceBrokerRequest.builder() - .name(brokerName) - .build()) - .doOnSuccess(item -> LOG.info("Deleted service broker " + brokerName)) - .doOnError(error -> LOG.warn("Error deleting service broker " + brokerName + ": " + error)) + return cloudFoundryOperations.serviceAdmin().delete(DeleteServiceBrokerRequest.builder() + .name(brokerName) + .build()) + .doOnSuccess(item -> LOG.info("Success deleting service broker. brokerName={}", brokerName)) + .doOnError(e -> LOG.warn(String.format("Error deleting service broker. brokerName=%s, error=%s ", + brokerName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty()); } public Mono deleteServiceInstance(String serviceInstanceName) { return getServiceInstance(serviceInstanceName) - .flatMap(si -> cloudFoundryOperations.services() - .deleteInstance(DeleteServiceInstanceRequest.builder() - .name(si.getName()) - .build()) - .doOnSuccess(item -> LOG.info("Deleted service instance " + serviceInstanceName)) - .doOnError( - error -> LOG.error("Error deleting service instance " + serviceInstanceName + ": " + error)) + .flatMap(si -> cloudFoundryOperations.services().deleteInstance(DeleteServiceInstanceRequest.builder() + .name(si.getName()) + .build()) + .doOnSuccess(v -> LOG.info("Success deleting service instance. serviceInstanceName={}", + serviceInstanceName)) + .doOnError(e -> LOG.error(String.format("Error deleting service instance. serviceInstanceName=%s, " + + "error=%s", serviceInstanceName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty())) - .doOnError(error -> LOG.warn("Error getting service instance " + serviceInstanceName + ": " + error)) + .doOnError(e -> LOG.warn(String.format("Error getting service instance. serviceInstanceName=%s, " + + "error=%s", serviceInstanceName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty()); } - public Mono createServiceInstance(String planName, - String serviceName, - String serviceInstanceName, + public Mono createServiceInstance(String planName, String serviceName, String serviceInstanceName, Map parameters) { - return cloudFoundryOperations.services() - .createInstance(CreateServiceInstanceRequest.builder() - .planName(planName) - .serviceName(serviceName) - .serviceInstanceName(serviceInstanceName) - .parameters(parameters) - .build()) - .doOnSuccess(item -> LOG.info("Created service instance " + serviceInstanceName)) - .doOnError(error -> LOG.error("Error creating service instance " + serviceInstanceName + ": " + error)); + return cloudFoundryOperations.services().createInstance(CreateServiceInstanceRequest.builder() + .planName(planName) + .serviceName(serviceName) + .serviceInstanceName(serviceInstanceName) + .parameters(parameters) + .build()) + .doOnSuccess(item -> LOG.info("Success creating service instance. serviceInstanceName={}", + serviceInstanceName)) + .doOnError(e -> LOG.error(String.format("Error creating service instance. serviceInstanceName=%s, " + + "error=%s", serviceInstanceName, e.getMessage()), e)); } public Mono updateServiceInstance(String serviceInstanceName, Map parameters) { - return cloudFoundryOperations.services() - .updateInstance(UpdateServiceInstanceRequest.builder() - .serviceInstanceName(serviceInstanceName) - .parameters(parameters) - .build()) - .doOnSuccess(item -> LOG.info("Updated service instance " + serviceInstanceName)) - .doOnError(error -> LOG.error("Error updating service instance " + serviceInstanceName + ": " + error)); + return cloudFoundryOperations.services().updateInstance(UpdateServiceInstanceRequest.builder() + .serviceInstanceName(serviceInstanceName) + .parameters(parameters) + .build()) + .doOnSuccess(item -> LOG.info("Success updating service instance. serviceInstanceName={}", + serviceInstanceName)) + .doOnError(e -> LOG.error(String.format("Error updating service instance. serviceInstanceName=%s, " + + "error=%s", serviceInstanceName, e.getMessage()), e)); } public Flux listServiceInstances() { @@ -257,12 +252,13 @@ public class CloudFoundryService { private Mono getServiceInstance(CloudFoundryOperations operations, String serviceInstanceName) { - return operations.services() - .getInstance(GetServiceInstanceRequest.builder() - .name(serviceInstanceName) - .build()) - .doOnSuccess(item -> LOG.info("Got service instance " + serviceInstanceName)) - .doOnError(error -> LOG.error("Error getting service instance " + serviceInstanceName + ": " + error)); + return operations.services().getInstance(GetServiceInstanceRequest.builder() + .name(serviceInstanceName) + .build()) + .doOnSuccess(item -> LOG.info("Success getting service instance. serviceInstanceName={}", + serviceInstanceName)) + .doOnError(e -> LOG.error(String.format("Error getting service instance. serviceInstanceName=%s, " + + "error=%s", serviceInstanceName, e.getMessage()), e)); } public Mono> getApplications() { @@ -286,7 +282,7 @@ public class CloudFoundryService { return operations.applications() .list() .doOnComplete(() -> LOG.info("Listed applications")) - .doOnError(error -> LOG.error("Error listing applications: " + error)); + .doOnError(e -> LOG.error(String.format("Error listing applications. error=%s", e.getMessage()), e)); } public Mono getApplicationEnvironment(String appName) { @@ -302,8 +298,9 @@ public class CloudFoundryService { .getEnvironments(GetApplicationEnvironmentsRequest.builder() .name(appName) .build()) - .doOnSuccess(item -> LOG.info("Got environment for application " + appName)) - .doOnError(error -> LOG.error("Error getting environment for application " + appName + ": " + error)); + .doOnSuccess(item -> LOG.info("Success getting environment for application. appName={}", appName)) + .doOnError(e -> LOG.error(String.format("Error getting environment for application. appName=%s, " + + "error=%s", appName, e.getMessage()), e)); } public Mono stopApplication(String appName) { @@ -313,10 +310,9 @@ public class CloudFoundryService { } public Mono> getSpaces() { - return cloudFoundryOperations.spaces() - .list() - .doOnComplete(() -> LOG.info("Listed spaces")) - .doOnError(error -> LOG.error("Error listing spaces: " + error)) + return cloudFoundryOperations.spaces().list() + .doOnComplete(() -> LOG.info("Success listing spaces")) + .doOnError(e -> LOG.error(String.format("Error listing spaces. error=%s" + e.getMessage()), e)) .map(SpaceSummary::getName) .collectList(); } @@ -331,13 +327,11 @@ public class CloudFoundryService { .spaces(); final String defaultSpace = cloudFoundryProperties.getDefaultSpace(); - return getDefaultSpace(spaceOperations) - .switchIfEmpty(spaceOperations.create(CreateSpaceRequest - .builder() - .name(defaultSpace) - .organization(defaultOrg) - .build()) - .then(getDefaultSpace(spaceOperations))); + return getDefaultSpace(spaceOperations).switchIfEmpty(spaceOperations.create(CreateSpaceRequest.builder() + .name(defaultSpace) + .organization(defaultOrg) + .build()) + .then(getDefaultSpace(spaceOperations))); } public Mono getOrCreateDefaultOrganization() { @@ -345,11 +339,9 @@ public class CloudFoundryService { final String defaultOrg = cloudFoundryProperties.getDefaultOrg(); return getDefaultOrg(organizationOperations) - .switchIfEmpty(organizationOperations - .create(CreateOrganizationRequest - .builder() - .organizationName(defaultOrg) - .build()) + .switchIfEmpty(organizationOperations.create(CreateOrganizationRequest.builder() + .organizationName(defaultOrg) + .build()) .then(getDefaultOrg(organizationOperations))); } @@ -488,7 +480,7 @@ public class CloudFoundryService { environment.put(propertyKeyValue[0], propertyKeyValue[1]); } else { - throw new IllegalArgumentException(format("App Broker property '%s' is incorrectly formatted", + throw new IllegalArgumentException(String.format("App Broker property '%s' is incorrectly formatted", Arrays.toString(propertyKeyValue))); } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingAppDeploymentService.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingAppDeploymentService.java index ae0f574..397e3a4 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingAppDeploymentService.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingAppDeploymentService.java @@ -25,7 +25,9 @@ import reactor.util.Loggers; public class DefaultBackingAppDeploymentService implements BackingAppDeploymentService { - private final Logger log = Loggers.getLogger(DefaultBackingAppDeploymentService.class); + private static final Logger LOG = Loggers.getLogger(DefaultBackingAppDeploymentService.class); + + private static final String BACKINGAPPS_LOG_TEMPLATE = "backingApps={}"; private final DeployerClient deployerClient; @@ -40,11 +42,18 @@ public class DefaultBackingAppDeploymentService implements BackingAppDeploymentS .runOn(Schedulers.parallel()) .flatMap(backingApplication -> deployerClient.deploy(backingApplication, serviceInstanceId)) .sequential() - .doOnRequest(l -> log.debug("Deploying applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished deploying application {}", response)) - .doOnComplete(() -> log.debug("Finished deploying application {}", backingApps)) - .doOnError(exception -> log.error(String.format("Error deploying applications %s with error '%s'", - backingApps, exception.getMessage()), exception)); + .doOnRequest(l -> { + LOG.info("Deploying applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish deploying applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error deploying applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }); } @Override @@ -54,11 +63,18 @@ public class DefaultBackingAppDeploymentService implements BackingAppDeploymentS .runOn(Schedulers.parallel()) .flatMap(backingApplication -> deployerClient.update(backingApplication, serviceInstanceId)) .sequential() - .doOnRequest(l -> log.debug("Updating applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished updating application {}", response)) - .doOnComplete(() -> log.debug("Finished updating application {}", backingApps)) - .doOnError(exception -> log - .error(String.format("Error updating applications %s with error '%s'", backingApps, exception))); + .doOnRequest(l -> { + LOG.info("Updating applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish updating applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error updating applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }); } @Override @@ -68,11 +84,18 @@ public class DefaultBackingAppDeploymentService implements BackingAppDeploymentS .runOn(Schedulers.parallel()) .flatMap(deployerClient::undeploy) .sequential() - .doOnRequest(l -> log.debug("Undeploying applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished undeploying application {}", response)) - .doOnComplete(() -> log.debug("Finished undeploying application {}", backingApps)) - .doOnError(exception -> log.error(String.format("Error undeploying applications %s with error '%s'", - backingApps, exception.getMessage()), exception)); + .doOnRequest(l -> { + LOG.info("Undeploying applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish undeploying applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error undeploying applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }); } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingServicesProvisionService.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingServicesProvisionService.java index 5004b71..0174cd8 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingServicesProvisionService.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DefaultBackingServicesProvisionService.java @@ -25,7 +25,9 @@ import reactor.util.Loggers; public class DefaultBackingServicesProvisionService implements BackingServicesProvisionService { - private final Logger log = Loggers.getLogger(DefaultBackingServicesProvisionService.class); + private static final Logger LOG = Loggers.getLogger(DefaultBackingServicesProvisionService.class); + + private static final String BACKINGSERVICES_LOG_TEMPLATE = "backingServices={}"; private final DeployerClient deployerClient; @@ -40,11 +42,15 @@ public class DefaultBackingServicesProvisionService implements BackingServicesPr .runOn(Schedulers.parallel()) .flatMap(deployerClient::createServiceInstance) .sequential() - .doOnRequest(l -> log.debug("Creating backing services {}", backingServices)) - .doOnEach(response -> log.debug("Finished creating backing service {}", response)) - .doOnComplete(() -> log.debug("Finished creating backing services {}", backingServices)) - .doOnError(exception -> log.error(String.format("Error creating backing services %s with error '%s'", - backingServices, exception.getMessage()), exception)); + .doOnRequest(l -> { + LOG.info("Creating backing services"); + LOG.debug(BACKINGSERVICES_LOG_TEMPLATE, backingServices); + }) + .doOnComplete(() -> { + LOG.info("Finish creating backing services"); + LOG.debug(BACKINGSERVICES_LOG_TEMPLATE, backingServices); + }) + .doOnError(e -> LOG.error(String.format("Error creating backing services. error=%s", e.getMessage()), e)); } @Override @@ -54,11 +60,15 @@ public class DefaultBackingServicesProvisionService implements BackingServicesPr .runOn(Schedulers.parallel()) .flatMap(deployerClient::updateServiceInstance) .sequential() - .doOnRequest(l -> log.debug("Updating backing services {}", backingServices)) - .doOnEach(response -> log.debug("Finished updating backing service {}", response)) - .doOnComplete(() -> log.debug("Finished updating backing services {}", backingServices)) - .doOnError(exception -> log.error(String.format("Error updating backing services %s with error '%s'", - backingServices, exception.getMessage()), exception)); + .doOnRequest(l -> { + LOG.info("Updating backing services"); + LOG.debug(BACKINGSERVICES_LOG_TEMPLATE, backingServices); + }) + .doOnComplete(() -> { + LOG.info("Finish updating backing services"); + LOG.debug(BACKINGSERVICES_LOG_TEMPLATE, backingServices); + }) + .doOnError(e -> LOG.error(String.format("Error updating backing services. error=%s", e.getMessage()), e)); } @Override @@ -68,11 +78,15 @@ public class DefaultBackingServicesProvisionService implements BackingServicesPr .runOn(Schedulers.parallel()) .flatMap(deployerClient::deleteServiceInstance) .sequential() - .doOnRequest(l -> log.debug("Deleting backing services {}", backingServices)) - .doOnEach(response -> log.debug("Finished deleting backing service {}", response)) - .doOnComplete(() -> log.debug("Finished deleting backing services {}", backingServices)) - .doOnError(exception -> log.error(String.format("Error deleting backing services %s with error '%s'", - backingServices, exception.getMessage()), exception)); + .doOnRequest(l -> { + LOG.info("Deleting backing services"); + LOG.debug(BACKINGSERVICES_LOG_TEMPLATE, backingServices); + }) + .doOnComplete(() -> { + LOG.info("Finish deleting backing services"); + LOG.debug(BACKINGSERVICES_LOG_TEMPLATE, backingServices); + }) + .doOnError(e -> LOG.error(String.format("Error deleting backing services. error=%s", e.getMessage()), e)); } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DeployerClient.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DeployerClient.java index a9f6921..dd02458 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DeployerClient.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/deployer/DeployerClient.java @@ -24,7 +24,11 @@ import reactor.util.Loggers; public class DeployerClient { - private final Logger log = Loggers.getLogger(DeployerClient.class); + private static final Logger LOG = Loggers.getLogger(DeployerClient.class); + + private static final String BACKINGAPP_LOG_TEMPLATE = "backingApp={}"; + + private static final String BACKINGSERVICE_LOG_TEMPLATE = "backingService={}"; private final AppDeployer appDeployer; @@ -45,10 +49,19 @@ public class DeployerClient { .collect(Collectors.toList())) .serviceInstanceId(serviceInstanceId) .build()) - .doOnRequest(l -> log.debug("Deploying application {}", backingApplication)) - .doOnSuccess(response -> log.debug("Finished deploying application {}", backingApplication)) - .doOnError(exception -> log.error(String.format("Error deploying application %s with error '%s'", - backingApplication, exception.getMessage()), exception)) + .doOnRequest(l -> { + LOG.info("Deploying application. backingAppName={}", backingApplication.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApplication); + }) + .doOnSuccess(response -> { + LOG.info("Success deploying application. backingAppName={}", backingApplication.getName()); + LOG.debug("response={}, backingApp={}", response, backingApplication); + }) + .doOnError(e -> { + LOG.error(String.format("Error deploying application. backingAppName=%s, error=%s", + backingApplication.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApplication); + }) .map(DeployApplicationResponse::getName); } @@ -65,10 +78,19 @@ public class DeployerClient { .collect(Collectors.toList())) .serviceInstanceId(serviceInstanceId) .build()) - .doOnRequest(l -> log.debug("Updating application {}", backingApplication)) - .doOnSuccess(response -> log.debug("Finished updating application {}", backingApplication)) - .doOnError(exception -> log.error(String.format("Error updating application %s with error '%s'", - backingApplication, exception), exception)) + .doOnRequest(l -> { + LOG.info("Updating application. backingAppName={}", backingApplication.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApplication); + }) + .doOnSuccess(response -> { + LOG.info("Success updating application. backingAppName={}", backingApplication.getName()); + LOG.debug("response={}, backingApp={}", response, backingApplication); + }) + .doOnError(e -> { + LOG.error(String.format("Error updating application. backingAppName=%s, error=%s", + backingApplication.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApplication); + }) .map(UpdateApplicationResponse::getName); } @@ -79,10 +101,19 @@ public class DeployerClient { .properties(backingApplication.getProperties()) .name(backingApplication.getName()) .build()) - .doOnRequest(l -> log.debug("Undeploying application {}", backingApplication)) - .doOnSuccess(response -> log.debug("Finished undeploying application {}", backingApplication)) - .doOnError(exception -> log.error(String.format("Error undeploying application %s with error '%s'", - backingApplication, exception.getMessage()), exception)) + .doOnRequest(l -> { + LOG.info("Undeploying application. backingAppName={}", backingApplication.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApplication); + }) + .doOnSuccess(response -> { + LOG.info("Success undeploying application. backingAppName={}", backingApplication.getName()); + LOG.debug("response={}, backingApp={}", response, backingApplication); + }) + .doOnError(e -> { + LOG.error(String.format("Error undeploying application. backingAppName=%s, error=%s", + backingApplication.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApplication); + }) .onErrorReturn(UndeployApplicationResponse.builder() .name(backingApplication.getName()) .build()) @@ -100,10 +131,19 @@ public class DeployerClient { .parameters(backingService.getParameters()) .properties(backingService.getProperties()) .build()) - .doOnRequest(l -> log.debug("Creating backing service {}", backingService.getName())) - .doOnSuccess(response -> log.debug("Finished creating backing service {}", backingService.getName())) - .doOnError(exception -> log.error(String.format("Error creating backing service %s with error '%s'", - backingService.getName(), exception.getMessage()), exception)) + .doOnRequest(l -> { + LOG.info("Creating backing service {}", backingService.getName()); + LOG.debug(BACKINGSERVICE_LOG_TEMPLATE, backingService); + }) + .doOnSuccess(response -> { + LOG.info("Success creating backing service {}", backingService.getName()); + LOG.debug("response={}, backingService={}", response, backingService); + }) + .doOnError(e -> { + LOG.error(String.format("Error creating backing service. backingServiceName=%s, error=%s", + backingService.getName(), e.getMessage()), e); + LOG.debug(BACKINGSERVICE_LOG_TEMPLATE, backingService); + }) .map(CreateServiceInstanceResponse::getName); } @@ -117,10 +157,19 @@ public class DeployerClient { .properties(backingService.getProperties()) .rebindOnUpdate(backingService.isRebindOnUpdate()) .build()) - .doOnRequest(l -> log.debug("Updating backing service {}", backingService.getName())) - .doOnSuccess(response -> log.debug("Finished updating backing service {}", backingService.getName())) - .doOnError(exception -> log.error(String.format("Error updating backing service %s with error '%s'", - backingService.getName(), exception.getMessage()), exception)) + .doOnRequest(l -> { + LOG.info("Updating backing service {}", backingService.getName()); + LOG.debug(BACKINGSERVICE_LOG_TEMPLATE, backingService); + }) + .doOnSuccess(response -> { + LOG.info("Success updating backing service {}", backingService.getName()); + LOG.debug("response={}, backingService={}", response, backingService); + }) + .doOnError(e -> { + LOG.error(String.format("Error updating backing service. backingServiceName=%s, error=%s", + backingService.getName(), e.getMessage()), e); + LOG.debug(BACKINGSERVICE_LOG_TEMPLATE, backingService); + }) .map(UpdateServiceInstanceResponse::getName); } @@ -132,10 +181,19 @@ public class DeployerClient { .serviceInstanceName(backingService.getServiceInstanceName()) .properties(backingService.getProperties()) .build()) - .doOnRequest(l -> log.debug("Deleting backing service {}", backingService.getName())) - .doOnSuccess(response -> log.debug("Finished deleting backing service {}", backingService.getName())) - .doOnError(exception -> log.error(String.format("Error deleting backing service %s with error '%s'", - backingService.getName(), exception.getMessage()), exception)) + .doOnRequest(l -> { + LOG.info("Deleting backing service {}", backingService.getName()); + LOG.debug(BACKINGSERVICE_LOG_TEMPLATE, backingService); + }) + .doOnSuccess(response -> { + LOG.info("Success deleting backing service {}", backingService.getName()); + LOG.debug("response={}, backingService={}", response, backingService); + }) + .doOnError(e -> { + LOG.error(String.format("Error deleting backing service. backingServiceName=%s, error=%s", + backingService.getName(), e.getMessage()), e); + LOG.debug(BACKINGSERVICE_LOG_TEMPLATE, backingService); + }) .onErrorReturn(DeleteServiceInstanceResponse.builder() .name(backingService.getServiceInstanceName()) .build()) diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/parameters/EnvironmentMappingParametersTransformerFactory.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/parameters/EnvironmentMappingParametersTransformerFactory.java index 787ff98..d2412e5 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/parameters/EnvironmentMappingParametersTransformerFactory.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/parameters/EnvironmentMappingParametersTransformerFactory.java @@ -31,7 +31,7 @@ import org.springframework.cloud.appbroker.deployer.BackingApplication; public class EnvironmentMappingParametersTransformerFactory extends ParametersTransformerFactory { - private final Logger logger = Loggers.getLogger(EnvironmentMappingParametersTransformerFactory.class); + private static final Logger LOG = Loggers.getLogger(EnvironmentMappingParametersTransformerFactory.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -62,7 +62,7 @@ public class EnvironmentMappingParametersTransformerFactory extends valueString = OBJECT_MAPPER.writeValueAsString(value); } catch (JsonProcessingException e) { - logger.error("Failed to write object as JSON String", e); + LOG.error("Failed to write object as JSON String", e); valueString = value.toString(); } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/support/KebabCasePropertyBeanIntrospector.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/support/KebabCasePropertyBeanIntrospector.java index 1eb56ac..52a5082 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/support/KebabCasePropertyBeanIntrospector.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/extensions/support/KebabCasePropertyBeanIntrospector.java @@ -61,8 +61,8 @@ public class KebabCasePropertyBeanIntrospector implements BeanIntrospector { } catch (final IntrospectionException e) { if (LOG.isErrorEnabled()) { - LOG.error("Error when creating PropertyDescriptor for method '{}'. " + - "This property will be ignored. {}", m, e); + LOG.error(String.format("Error when creating PropertyDescriptor for method '%s'. This " + + "property will be ignored. %s", m), e); } } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/BackingAppManagementService.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/BackingAppManagementService.java index c39bf8f..e4c1782 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/BackingAppManagementService.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/BackingAppManagementService.java @@ -36,7 +36,9 @@ import org.springframework.cloud.appbroker.extensions.targets.TargetService; public class BackingAppManagementService { - private final Logger log = Loggers.getLogger(BackingAppManagementService.class); + private static final Logger LOG = Loggers.getLogger(BackingAppManagementService.class); + + private static final String BACKINGAPPS_LOG_TEMPLATE = "backingApp={}"; private final ManagementClient managementClient; @@ -60,11 +62,18 @@ public class BackingAppManagementService { .parallel() .runOn(Schedulers.parallel()) .flatMap(managementClient::stop) - .doOnRequest(l -> log.debug("Stopping applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished stopping application {}", response)) - .doOnComplete(() -> log.debug("Finished stopping application {}", backingApps)) - .doOnError(exception -> log.error(String.format("Error stopping applications %s with error '%s'", - backingApps, exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Stopping applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish stopping applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error stopping applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + })) .then(); } @@ -74,11 +83,18 @@ public class BackingAppManagementService { .parallel() .runOn(Schedulers.parallel()) .flatMap(managementClient::start) - .doOnRequest(l -> log.debug("Starting applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished starting application {}", response)) - .doOnComplete(() -> log.debug("Finished starting application {}", backingApps)) - .doOnError(exception -> log.error(String.format("Error starting applications %s with error '%s'", - backingApps, exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Starting applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish starting applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error starting applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + })) .then(); } @@ -88,11 +104,18 @@ public class BackingAppManagementService { .parallel() .runOn(Schedulers.parallel()) .flatMap(managementClient::restart) - .doOnRequest(l -> log.debug("Restarting applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished restarting application {}", response)) - .doOnComplete(() -> log.debug("Finished restarting application {}", backingApps)) - .doOnError(exception -> log.error(String.format("Error restarting applications %s with error '%s'", - backingApps, exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Restarting applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish restarting applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error restarting applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + })) .then(); } @@ -102,11 +125,18 @@ public class BackingAppManagementService { .parallel() .runOn(Schedulers.parallel()) .flatMap(managementClient::restage) - .doOnRequest(l -> log.debug("Restaging applications {}", backingApps)) - .doOnEach(response -> log.debug("Finished restaging application {}", response)) - .doOnComplete(() -> log.debug("Finished restaging application {}", backingApps)) - .doOnError(exception -> log.error(String.format("Error restaging applications %s with error '%s'", - backingApps, exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Restaging applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnComplete(() -> { + LOG.info("Finish restaging applications"); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + }) + .doOnError(e -> { + LOG.error(String.format("Error restaging applications. error=%s", e.getMessage()), e); + LOG.debug(BACKINGAPPS_LOG_TEMPLATE, backingApps); + })) .then(); } @@ -131,12 +161,19 @@ public class BackingAppManagementService { .services(services) .environment(response.getEnvironment()) .build())) - .doOnRequest(l -> log.debug("Getting deployed backing applications {}", app)) - .doOnError(exception -> log.error(String.format("Error getting deployed backing application %s " + - "with error '%s'", app.getName(), exception.getMessage()), exception)) + .doOnRequest(l -> { + LOG.info("Getting deployed backing application. appName={}", app.getName()); + LOG.debug("backingApp={}", app); + }) + .doOnError(e -> { + LOG.error(String.format("Error getting deployed backing application. appName=%s, error=%s", + app.getName(), e.getMessage()), e); + LOG.debug("backingApp={}", app); + }) .onErrorResume(exception -> Mono.empty())) .collectList() - .map(BackingApplications::new); + .map(BackingApplications::new) + .doOnSuccess(backingApplications -> LOG.debug("backingApplications={}", backingApplications)); } private Mono getBackingApplicationsForService(String serviceInstanceId) { diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/ManagementClient.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/ManagementClient.java index be55b9e..f0fde97 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/ManagementClient.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/manager/ManagementClient.java @@ -26,6 +26,8 @@ public class ManagementClient { private static final Logger LOG = Loggers.getLogger(ManagementClient.class); + private static final String BACKINGAPP_LOG_TEMPLATE = "backingApp={}"; + private final AppManager appManager; public ManagementClient(AppManager appManager) { @@ -38,10 +40,19 @@ public class ManagementClient { .name(backingApp.getName()) .properties(backingApp.getProperties()) .build()) - .doOnRequest(l -> LOG.debug("Starting application {}", backingApp)) - .doOnSuccess(response -> LOG.debug("Finished starting application {}", backingApp)) - .doOnError(exception -> LOG.error(String.format("Error starting application %s with error '%s'", - backingApp, exception.getMessage()), exception))); + .doOnRequest(l -> { + LOG.info("Starting application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnSuccess(response -> { + LOG.info("Success starting application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnError(e -> { + LOG.error(String.format("Error starting application. backingAppName=%s, error=%s", + backingApp.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + })); } public Mono stop(BackingApplication backingApplication) { @@ -50,10 +61,19 @@ public class ManagementClient { .name(backingApp.getName()) .properties(backingApp.getProperties()) .build()) - .doOnRequest(l -> LOG.debug("Stopping application {}", backingApp)) - .doOnSuccess(response -> LOG.debug("Finished stopping application {}", backingApp)) - .doOnError(exception -> LOG.error(String.format("Error stopping application %s with error '%s'", - backingApp, exception.getMessage()), exception))); + .doOnRequest(l -> { + LOG.info("Stopping application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnSuccess(response -> { + LOG.info("Success stopping application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnError(e -> { + LOG.error(String.format("Error stopping application. backingAppName=%s, error=%s", + backingApp.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + })); } public Mono restart(BackingApplication backingApplication) { @@ -62,10 +82,19 @@ public class ManagementClient { .name(backingApp.getName()) .properties(backingApp.getProperties()) .build()) - .doOnRequest(l -> LOG.debug("Restarting application {}", backingApp)) - .doOnSuccess(response -> LOG.debug("Finished restarting application {}", backingApp)) - .doOnError(exception -> LOG.error(String.format("Error restarting application %s with error '%s'", - backingApp, exception.getMessage()), exception))); + .doOnRequest(l -> { + LOG.info("Restarting application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnSuccess(response -> { + LOG.info("Success restarting application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnError(e -> { + LOG.error(String.format("Error restarting application. backingAppName=%s, error=%s", + backingApp.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + })); } public Mono restage(BackingApplication backingApplication) { @@ -74,10 +103,19 @@ public class ManagementClient { .name(backingApp.getName()) .properties(backingApp.getProperties()) .build()) - .doOnRequest(l -> LOG.debug("Restaging application {}", backingApp)) - .doOnSuccess(response -> LOG.debug("Finished restaging application {}", backingApp)) - .doOnError(exception -> LOG.error(String.format("Error restaging application %s with error '%s'", - backingApp, exception.getMessage()), exception))); + .doOnRequest(l -> { + LOG.info("Restaging application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnSuccess(response -> { + LOG.info("Success restaging application. backingAppName={}", backingApp.getName()); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + }) + .doOnError(e -> { + LOG.error(String.format("Error restaging application. backingAppName=%s, error=%s", + backingApp.getName(), e.getMessage()), e); + LOG.debug(BACKINGAPP_LOG_TEMPLATE, backingApp); + })); } } diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceBindingService.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceBindingService.java index 5e0cb96..4cb7f2d 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceBindingService.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceBindingService.java @@ -152,10 +152,16 @@ public class WorkflowServiceInstanceBindingService implements ServiceInstanceBin return stateRepository.saveState(request.getServiceInstanceId(), request.getBindingId(), OperationState.IN_PROGRESS, "create service instance binding started") .thenMany(invokeCreateWorkflows(request, response) - .doOnRequest(l -> LOG.debug("Creating service instance binding")) - .doOnComplete(() -> LOG.debug("Finished creating service instance binding")) - .doOnError(exception -> LOG.error(String.format("Error creating service instance binding with error " + - "'%s'", exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Creating service instance binding"); + LOG.debug("request={}", request); + }) + .doOnComplete(() -> { + LOG.debug("Finish creating service instance binding"); + LOG.debug("request={}, response={}", request, response); + }) + .doOnError(e -> LOG.error(String.format("Error creating service instance binding. error=%s", + e.getMessage()), e))) .thenEmpty(stateRepository.saveState(request.getServiceInstanceId(), request.getBindingId(), OperationState.SUCCEEDED, "create service instance binding completed") .then()) @@ -218,10 +224,16 @@ public class WorkflowServiceInstanceBindingService implements ServiceInstanceBin return stateRepository.saveState(request.getServiceInstanceId(), request.getBindingId(), OperationState.IN_PROGRESS, "delete service instance binding started") .thenMany(invokeDeleteWorkflows(request, response) - .doOnRequest(l -> LOG.debug("Deleting service instance binding")) - .doOnComplete(() -> LOG.debug("Finished deleting service instance binding")) - .doOnError(exception -> LOG.error(String.format("Error deleting service instance binding with error " + - "'%s'", exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Deleting service instance binding"); + LOG.debug("request={}", request); + }) + .doOnComplete(() -> { + LOG.info("Finish deleting service instance binding"); + LOG.debug("request={}, response={}", request, response); + }) + .doOnError(e -> LOG.error(String.format("Error deleting service instance binding. error=%s", + e.getMessage()), e))) .thenEmpty(stateRepository.saveState(request.getServiceInstanceId(), request.getBindingId(), OperationState.SUCCEEDED, "delete service instance binding completed") .then()) diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceService.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceService.java index afd8b0d..b7733ee 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceService.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/service/WorkflowServiceInstanceService.java @@ -50,7 +50,7 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; */ public class WorkflowServiceInstanceService implements ServiceInstanceService { - private final Logger log = Loggers.getLogger(WorkflowServiceInstanceService.class); + private static final Logger LOG = Loggers.getLogger(WorkflowServiceInstanceService.class); private final List createServiceInstanceWorkflows; @@ -99,10 +99,16 @@ public class WorkflowServiceInstanceService implements ServiceInstanceService { OperationState.IN_PROGRESS, "create service instance started") .thenMany(invokeCreateWorkflows(request, response) - .doOnRequest(l -> log.debug("Creating service instance")) - .doOnComplete(() -> log.debug("Finished creating service instance")) - .doOnError(exception -> log.error(String.format("Error creating service instance with error '%s'", - exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Creating service instance"); + LOG.debug("request={}", request); + }) + .doOnComplete(() -> { + LOG.info("Finish creating service instance"); + LOG.debug("request={}, response={}", request, response); + }) + .doOnError(e -> LOG.error(String.format("Error creating service instance. error=%s", + e.getMessage()), e))) .thenEmpty(stateRepository.saveState(request.getServiceInstanceId(), OperationState.SUCCEEDED, "create service instance completed") .then()) @@ -142,10 +148,16 @@ public class WorkflowServiceInstanceService implements ServiceInstanceService { return stateRepository.saveState(request.getServiceInstanceId(), OperationState.IN_PROGRESS, "delete service instance started") .thenMany(invokeDeleteWorkflows(request, response) - .doOnRequest(l -> log.debug("Deleting service instance")) - .doOnComplete(() -> log.debug("Finished deleting service instance")) - .doOnError(exception -> log.error(String.format("Error deleting service instance with error '%s'", - exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Deleting service instance"); + LOG.debug("request={}", request); + }) + .doOnComplete(() -> { + LOG.info("Finish deleting service instance"); + LOG.debug("request={}, response={}", request, response); + }) + .doOnError(e -> LOG.error(String.format("Error deleting service instance. error=%s", + e.getMessage()), e))) .thenEmpty(stateRepository.saveState(request.getServiceInstanceId(), OperationState.SUCCEEDED, "delete service instance completed") .then()) @@ -185,10 +197,16 @@ public class WorkflowServiceInstanceService implements ServiceInstanceService { return stateRepository.saveState(request.getServiceInstanceId(), OperationState.IN_PROGRESS, "update service instance started") .thenMany(invokeUpdateWorkflows(request, response) - .doOnRequest(l -> log.debug("Updating service instance")) - .doOnComplete(() -> log.debug("Finished updating service instance")) - .doOnError(exception -> log.error(String.format("Error updating service instance with error '%s'", - exception.getMessage()), exception))) + .doOnRequest(l -> { + LOG.info("Updating service instance"); + LOG.debug("request={}", request); + }) + .doOnComplete(() -> { + LOG.info("Finish updating service instance"); + LOG.debug("request={}, response={}", request, response); + }) + .doOnError(e -> LOG.error(String.format("Error updating service instance. error=%s", + e.getMessage()), e))) .thenEmpty(stateRepository.saveState(request.getServiceInstanceId(), OperationState.SUCCEEDED, "update service instance completed") .then()) diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentCreateServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentCreateServiceInstanceWorkflow.java index d8af115..9075af4 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentCreateServiceInstanceWorkflow.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentCreateServiceInstanceWorkflow.java @@ -39,7 +39,9 @@ public class AppDeploymentCreateServiceInstanceWorkflow extends AppDeploymentInstanceWorkflow implements CreateServiceInstanceWorkflow { - private final Logger log = Loggers.getLogger(AppDeploymentCreateServiceInstanceWorkflow.class); + private static final Logger LOG = Loggers.getLogger(AppDeploymentCreateServiceInstanceWorkflow.class); + + private static final String REQUEST_LOG_TEMPLATE = "request={}"; private final BackingAppDeploymentService deploymentService; @@ -86,13 +88,24 @@ public class AppDeploymentCreateServiceInstanceWorkflow servicesParametersTransformationService.transformParameters(backingServices, request.getParameters())) .flatMapMany(backingServicesProvisionService::createServiceInstance) - .doOnRequest(l -> log.debug("Creating backing services for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnComplete(() -> log.debug("Finished creating backing services for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnError(exception -> log.error(String.format("Error creating backing services for %s/%s with error '%s'", - request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), - exception)); + .doOnRequest(l -> { + LOG.info("Creating backing services. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnComplete(() -> { + LOG.info("Finish creating backing services. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + if (LOG.isErrorEnabled()) { + LOG.error(String.format("Error creating backing services. serviceDefinitionName=%s, planName=%s, " + + "error=%s", + request.getServiceDefinition().getName(), request.getPlan().getName(), e.getMessage()), e); + } + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }); } private Flux deployBackingApplications(CreateServiceInstanceRequest request) { @@ -108,14 +121,24 @@ public class AppDeploymentCreateServiceInstanceWorkflow credentialProviderService.addCredentials(backingApps, request.getServiceInstanceId())) .flatMapMany(backingApps -> deploymentService.deploy(backingApps, request.getServiceInstanceId())) - .doOnRequest(l -> log.debug("Deploying backing applications for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnComplete(() -> log.debug("Finished deploying backing applications for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnError( - exception -> log.error(String.format("Error deploying backing applications for %s/%s with error '%s'", - request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), - exception)); + .doOnRequest(l -> { + LOG.info("Deploying backing applications. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnComplete(() -> { + LOG.info("Finish deploying backing applications. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + if (LOG.isErrorEnabled()) { + LOG.error(String.format("Error deploying backing applications. serviceDefinitionName=%s, " + + "planName=%s, error=%s", request.getServiceDefinition().getName(), request.getPlan().getName(), + e.getMessage()), e); + } + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }); } @Override diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentDeleteServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentDeleteServiceInstanceWorkflow.java index 96cd255..62095e8 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentDeleteServiceInstanceWorkflow.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentDeleteServiceInstanceWorkflow.java @@ -44,7 +44,9 @@ public class AppDeploymentDeleteServiceInstanceWorkflow extends AppDeploymentInstanceWorkflow implements DeleteServiceInstanceWorkflow { - private final Logger log = Loggers.getLogger(AppDeploymentDeleteServiceInstanceWorkflow.class); + private static final Logger LOG = Loggers.getLogger(AppDeploymentDeleteServiceInstanceWorkflow.class); + + private static final String REQUEST_LOG_TEMPLATE = "request={}"; private final BackingAppDeploymentService deploymentService; @@ -86,11 +88,24 @@ public class AppDeploymentDeleteServiceInstanceWorkflow } return Flux.empty(); }) - .doOnComplete(() -> log.debug("Finished deleting backing services for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnError(exception -> log.error(String.format("Error deleting backing services for %s/%s with error '%s'", - request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), - exception)); + .doOnRequest(l -> { + LOG.info("Deleting backing services. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnComplete(() -> { + LOG.info("Finish deleting backing services. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + if (LOG.isErrorEnabled()) { + LOG.error(String.format("Error deleting backing services. " + + "serviceDefinitionName=%s, planName=%s, error=%s", request.getServiceDefinition().getName(), + request.getPlan().getName(), e.getMessage()), e); + } + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }); } private Flux collectBackingServices(DeleteServiceInstanceRequest request) { @@ -138,14 +153,24 @@ public class AppDeploymentDeleteServiceInstanceWorkflow request.getServiceInstanceId())) .defaultIfEmpty(backingApps)) .flatMapMany(deploymentService::undeploy) - .doOnRequest(l -> log.debug("Undeploying backing applications for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnComplete(() -> log.debug("Finished undeploying backing applications for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnError( - exception -> log.error(String.format("Error undeploying backing applications for %s/%s with error '%s'", - request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), - exception)); + .doOnRequest(l -> { + LOG.info("Undeploying backing applications. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnComplete(() -> { + LOG.info("Finish undeploying backing applications. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + if (LOG.isErrorEnabled()) { + LOG.error(String.format("Error undeploying backing applications. serviceDefinitionName=%s, " + + "planName=%s, error=%s", request.getServiceDefinition().getName(), request.getPlan().getName(), + e.getMessage()), e); + } + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }); } @Override diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentUpdateServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentUpdateServiceInstanceWorkflow.java index 867cdc4..f51fd41 100644 --- a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentUpdateServiceInstanceWorkflow.java +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/instance/AppDeploymentUpdateServiceInstanceWorkflow.java @@ -48,7 +48,9 @@ import org.springframework.core.annotation.Order; public class AppDeploymentUpdateServiceInstanceWorkflow extends AppDeploymentInstanceWorkflow implements UpdateServiceInstanceWorkflow { - private final Logger log = Loggers.getLogger(AppDeploymentUpdateServiceInstanceWorkflow.class); + private static final Logger LOG = Loggers.getLogger(AppDeploymentUpdateServiceInstanceWorkflow.class); + + private static final String REQUEST_LOG_TEMPLATE = "request={}"; private final BackingAppDeploymentService deploymentService; @@ -110,9 +112,9 @@ public class AppDeploymentUpdateServiceInstanceWorkflow extends AppDeploymentIns List servicesToDelete = servicesInNameList(existingServices, serviceNamesToDelete); - log.debug("Backing services to update: {}", serviceNamesToUpdate); - log.debug("Backing services to create: {}", serviceNamesToCreate); - log.debug("Backing services to delete: {}", serviceNamesToDelete); + LOG.debug("Backing services to update: {}", serviceNamesToUpdate); + LOG.debug("Backing services to create: {}", serviceNamesToCreate); + LOG.debug("Backing services to delete: {}", serviceNamesToDelete); return Flux.concat( backingServicesProvisionService.updateServiceInstance(servicesToUpdate), @@ -121,14 +123,24 @@ public class AppDeploymentUpdateServiceInstanceWorkflow extends AppDeploymentIns .parallel() .runOn(Schedulers.parallel()); }) - .doOnRequest(l -> log.debug("Updating backing services for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnComplete(() -> log.debug("Finished updating backing services for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnError( - exception -> log.error(String.format("Error updating backing services for %s/%s with error '%s'", - request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), - exception)); + .doOnRequest(l -> { + LOG.info("Updating backing services. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnComplete(() -> { + LOG.info("Finish updating backing services. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + if (LOG.isErrorEnabled()) { + LOG.error(String.format("Error updating backing services. serviceDefinitionName=%s, planName=%s, " + + "error=%s", request.getServiceDefinition().getName(), request.getPlan().getName(), + e.getMessage()), e); + } + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }); } private Mono> getExistingBackingServiceNameMap(UpdateServiceInstanceRequest request) { @@ -170,14 +182,24 @@ public class AppDeploymentUpdateServiceInstanceWorkflow extends AppDeploymentIns .flatMap(backingApps -> appsParametersTransformationService.transformParameters(backingApps, request.getParameters())) .flatMapMany(backingApps -> deploymentService.update(backingApps, request.getServiceInstanceId())) - .doOnRequest(l -> log.debug("Updating backing applications for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnComplete(() -> log.debug("Finished updating backing applications for {}/{}", - request.getServiceDefinition().getName(), request.getPlan().getName())) - .doOnError( - exception -> log.error(String.format("Error updating backing applications for %s/%s with error '%s'", - request.getServiceDefinition().getName(), request.getPlan().getName(), exception.getMessage()), - exception)); + .doOnRequest(l -> { + LOG.info("Updating backing applications. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnComplete(() -> { + LOG.info("Finish updating backing applications. serviceDefinitionName={}, planName={}", + request.getServiceDefinition().getName(), request.getPlan().getName()); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + if (LOG.isErrorEnabled()) { + LOG.error(String.format("Error updating backing applications. serviceDefinitionName=%s, " + + "planName=%s, error=%s", request.getServiceDefinition().getName(), request.getPlan().getName(), + e.getMessage()), e); + } + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }); } @Override diff --git a/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppDeployer.java b/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppDeployer.java index 754820b..d2f0e63 100644 --- a/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppDeployer.java +++ b/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppDeployer.java @@ -136,6 +136,12 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware private static final Logger LOG = LoggerFactory.getLogger(CloudFoundryAppDeployer.class); + private static final String REQUEST_LOG_TEMPLATE = "request={}"; + + private static final String RESPONSE_LOG_TEMPLATE = "response={}"; + + private static final String ERROR_LOG_TEMPLATE = "error=%s"; + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final CloudFoundryDeploymentProperties defaultDeploymentProperties; @@ -171,18 +177,27 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware @Override public Mono get(GetApplicationRequest request) { - final String name = request.getName(); + final String appName = request.getName(); return operationsUtils.getOperations(request.getProperties()) .flatMap(cfOperations -> cfOperations.applications() - .get(org.cloudfoundry.operations.applications.GetApplicationRequest.builder().name(name).build()) - .doOnRequest(l -> LOG.debug("Getting application {}", name)) - .doOnSuccess(response -> LOG.info("Success getting application {} id: {}", name, response.getId())) - .doOnError(e -> LOG.warn(String.format("Error getting application %s: %s", name, e.getMessage()))) + .get(org.cloudfoundry.operations.applications.GetApplicationRequest.builder() + .name(appName) + .build()) + .doOnRequest(l -> { + LOG.info("Getting application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(response -> { + LOG.info("Success getting application. appName={}", appName); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error getting application. appName=%s, " + ERROR_LOG_TEMPLATE, + appName, e.getMessage()), e)) .map(ApplicationDetail::getId) - .flatMap(id -> - client.applicationsV2() - .summary(SummaryApplicationRequest.builder().applicationId(id).build()))) + .flatMap(id -> client.applicationsV2().summary(SummaryApplicationRequest.builder() + .applicationId(id) + .build()))) .flatMap(summary -> Flux.fromIterable(summary.getServices()) .map(org.cloudfoundry.client.v2.serviceinstances.ServiceInstance::getName) .collectList() @@ -192,9 +207,16 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .services(services) .environment(summary.getEnvironmentJsons()) .build())) - .doOnRequest(l -> LOG.debug("Getting application summary for {}", name)) - .doOnSuccess(item -> LOG.info("Success getting application summary for {}", name)) - .doOnError(error -> LOG.error("Failed to get application summary for {}", name)); + .doOnRequest(l -> { + LOG.info("Getting application summary. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(response -> { + LOG.info("Success getting application summary. appName={}", appName); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error getting application summary. appName=%s, " + + ERROR_LOG_TEMPLATE, appName, e.getMessage()), e)); } @Override @@ -211,16 +233,13 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware return pushApplication(request, deploymentProperties, appResource) .timeout(Duration.ofSeconds(this.defaultDeploymentProperties.getApiTimeout())) .doOnSuccess(item -> LOG.info("Successfully deployed {}", appName)) - .doOnError(error -> { - if (httpStatusNotFoundPredicate().test(error)) { - if (LOG.isWarnEnabled()) { - LOG.warn( - "Unable to deploy application. It may have been destroyed before start completed: " + error - .getMessage()); - } + .doOnError(e -> { + if (httpStatusNotFoundPredicate().test(e)) { + LOG.error(String.format("Unable to deploy application. It may have been destroyed before " + + "start completed. " + ERROR_LOG_TEMPLATE, e.getMessage()), e); } else { - logError(String.format("Failed to deploy %s", appName)).accept(error); + logError(String.format("Error deploying application. appName=%s", appName)).accept(e); } }) .thenReturn(DeployApplicationResponse.builder() @@ -230,9 +249,12 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware @Override public Mono update(UpdateApplicationRequest request) { - final String name = request.getName(); + final String appName = request.getName(); - return get(GetApplicationRequest.builder().name(name).properties(request.getProperties()).build()) + return get(GetApplicationRequest.builder() + .name(appName) + .properties(request.getProperties()) + .build()) .flatMap(response -> bindNewServices(response, request.getServices(), request.getProperties())) .flatMap(applicationId -> { if (request.getProperties().containsKey("routes")) { @@ -261,10 +283,16 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware }) .map(CreateDeploymentResponse::getId) .flatMap(this::waitForDeploymentDeployed) - .doOnRequest(l -> LOG.debug("Updating application {}", name)) - .doOnSuccess(item -> LOG.info("Successfully updated application {}", name)) - .doOnError(error -> LOG.error("Failed to update application {}", name)) - .thenReturn(UpdateApplicationResponse.builder().name(name).build()); + .doOnRequest(l -> { + LOG.info("Updating application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(response -> { + LOG.info("Success updating application. appName={}", appName); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error updating application. appName=%s", appName), e)) + .thenReturn(UpdateApplicationResponse.builder().name(appName).build()); } private Mono bindNewServices(GetApplicationResponse deployedApp, List services, @@ -278,17 +306,19 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware return Mono.just(id); } - String name = deployedApp.getName(); + String appName = deployedApp.getName(); return operationsUtils.getOperations(properties) .flatMapMany(cfOperations -> Flux.fromIterable(servicesToBind) - .flatMap(service -> cfOperations.services() - .bind(BindServiceInstanceRequest.builder() - .applicationName(name) - .serviceInstanceName(service) - .build()) - .doOnRequest(l -> LOG.debug("Binding application {} to service {}", name, service)) - .doOnNext(item -> LOG.info("Successfully bind application {} to service {}", name, service)) - .doOnError(error -> LOG.error("Failed to bind application {} to service {}", name, service)))) + .flatMap(service -> cfOperations.services().bind(BindServiceInstanceRequest.builder() + .applicationName(appName) + .serviceInstanceName(service) + .build()) + .doOnRequest( + l -> LOG.info("Binding application to service. appName={}, serviceName={}", appName, service)) + .doOnNext(v -> LOG.info("Success binding application to service. appName={}, service={}", appName, + service)) + .doOnError(e -> LOG.error(String.format("Error binding application to service. appName=%s, " + + "service=%s", appName, service), e)))) .then() .thenReturn(id); } @@ -324,8 +354,8 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware return Mono.just(routes) .zipWith(operationsUtils.getOperations(properties) - .map(cfOperations -> cfOperations.domains().list()) - .flatMap(domains -> domains.collectMap(Domain::getName))) + .map(cfOperations -> cfOperations.domains().list()) + .flatMap(domains -> domains.collectMap(Domain::getName))) .zipWith(getSpaceId(properties)) .flatMapMany(routesDomainsAndSpace -> { List routesComponents = routesDomainsAndSpace.getT1().getT1(); @@ -334,8 +364,10 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware return Flux.fromStream(routesComponents.stream() .map(route -> new String[] {route[0], domainsByName.get(route[1]).getId()})) - .flatMap(hostAndDomainId -> associateHostForDomain(applicationId, hostAndDomainId[0], hostAndDomainId[1], spaceId)); - }) + .flatMap( + hostAndDomainId -> associateHostForDomain(applicationId, hostAndDomainId[0], hostAndDomainId[1], + spaceId)); + }) .then(Mono.just(applicationId)); } @@ -347,7 +379,7 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .host(host) .build()) .map(response -> response.getMetadata().getId()) - .doOnError(error -> LOG.info("Host was already associated: " + host)) + .doOnError(error -> LOG.info("Host was already associated. host={}", host)) .onErrorResume(e -> Mono.empty()) .flatMap(routeId -> client.applicationsV2().associateRoute(AssociateApplicationRouteRequest.builder() .applicationId(applicationId) @@ -402,10 +434,13 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .build()) .filter(p -> p.getState().equals(DeploymentState.DEPLOYED)) .repeatWhenEmpty(getExponentialBackOff()) - .doOnRequest(l -> LOG.debug("Waiting for deployment deployed {}", deploymentId)) - .doOnSuccess(response -> LOG.info("Deployment deployed {}", deploymentId)) - .doOnError(e -> LOG - .warn(String.format("Error waiting for deployment deployed %s: %s", deploymentId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Waiting for deployment to complete. deploymentId={}", deploymentId)) + .doOnSuccess(response -> { + LOG.info("Success waiting for deployment to complete. deploymentId={}", deploymentId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error waiting for deployment to complete. deploymentId=%s, " + + ERROR_LOG_TEMPLATE, deploymentId, e.getMessage()), e)); } private Mono createDeployment(String dropletId, String applicationId) { @@ -423,21 +458,28 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .build() ).build()) .build()) - .doOnRequest(l -> LOG.debug("Creating deployment for application {}", applicationId)) - .doOnSuccess(response -> LOG.info("Created deployment for application {}", applicationId)) - .doOnError(e -> LOG.warn( - String.format("Error creating deployment for application %s: %s", applicationId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Creating deployment for application. applicationId={}", applicationId)) + .doOnSuccess(response -> { + LOG.info("Success creating deployment for application. applicationId={}", applicationId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error creating deployment for application. applicationId=%s, " + + ERROR_LOG_TEMPLATE, applicationId, e.getMessage()), e)); } private Mono waitForBuildStaged(String buildId) { - return this.client - .builds().get(GetBuildRequest.builder().buildId(buildId).build()) + return this.client.builds().get(GetBuildRequest.builder() + .buildId(buildId) + .build()) .filter(p -> p.getState().equals(BuildState.STAGED)) .repeatWhenEmpty(getExponentialBackOff()) - .doOnRequest(l -> LOG.debug("Waiting for build staged {}", buildId)) - .doOnSuccess(response -> LOG.info("Build staged {}", buildId)) - .doOnError( - e -> LOG.warn(String.format("Error waiting for build staged %s: %s", buildId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Waiting for build to stage. buildId={}", buildId)) + .doOnSuccess(response -> { + LOG.info("Success waiting for build to stage. buildId={}", buildId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error waiting for build to stage. buildId=%s, " + + ERROR_LOG_TEMPLATE, buildId, e.getMessage()), e)); } private Mono createBuildForPackage(String packageId) { @@ -448,10 +490,13 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .getPackage(Relationship.builder().id(packageId).build()) .build()) .map(CreateBuildResponse::getId) - .doOnRequest(l -> LOG.debug("Creating build for package {}", packageId)) - .doOnSuccess(response -> LOG.info("Created build for package {}", packageId)) - .doOnError( - e -> LOG.warn(String.format("Error creating build package %s: %s", packageId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Creating build for package. packageId={}", packageId)) + .doOnSuccess(response -> { + LOG.info("Success creating build for package. packageId={}", packageId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error creating build package. packageId=%s, " + + ERROR_LOG_TEMPLATE, packageId, e.getMessage()), e)); } private Mono waitForPackageReady(String packageId) { @@ -460,10 +505,13 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .get(GetPackageRequest.builder().packageId(packageId).build()) .filter(p -> p.getState().equals(PackageState.READY)) .repeatWhenEmpty(getExponentialBackOff()) - .doOnRequest(l -> LOG.debug("Waiting for package ready {}", packageId)) - .doOnSuccess(response -> LOG.info("Package ready {}", packageId)) - .doOnError( - e -> LOG.warn(String.format("Error waiting for package ready %s: %s", packageId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Waiting for package ready. packageId={}", packageId)) + .doOnSuccess(response -> { + LOG.info("Success waiting for package ready. packageId={}", packageId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error waiting for package ready. packageId=%s, " + + ERROR_LOG_TEMPLATE, packageId, e.getMessage()), e)); } private Mono uploadPackage(UpdateApplicationRequest request, String packageId) { @@ -475,10 +523,16 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .packageId(packageId) .bits(Paths.get(getAppResource(request.getPath()).getURI())) .build()) - .doOnRequest(l -> LOG.debug("Uploading package {}", packageId)) - .doOnSuccess(response -> LOG.info("Package uploaded {}", packageId)) - .doOnError( - e -> LOG.warn(String.format("Error uploading package %s: %s", packageId, e.getMessage()))); + .doOnRequest(l -> { + LOG.info("Uploading package. packageId={}", packageId); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(response -> { + LOG.info("Success uploading package. packageId={}", packageId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error uploading package. packageId=%s, " + ERROR_LOG_TEMPLATE, + packageId, e.getMessage()), e)); } catch (IOException e) { throw Exceptions.propagate(e); @@ -514,10 +568,13 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .applicationId(applicationId) .state(PackageState.READY) .build()) - .doOnRequest(l -> LOG.debug("Getting application package for application {}", applicationId)) - .doOnSuccess(response -> LOG.info("Got application package for application {}", applicationId)) - .doOnError(e -> LOG.warn(String - .format("Error getting application package for application %s: %s", applicationId, e.getMessage()))) + .doOnRequest(l -> LOG.debug("Getting application package. applicationId={}", applicationId)) + .doOnSuccess(response -> { + LOG.info("Success getting application package. applicationId={}", applicationId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error getting application package. applicationId=%s, " + + ERROR_LOG_TEMPLATE, applicationId, e.getMessage()), e)) .map(ListApplicationPackagesResponse::getResources) .map(this::getLastUpdatedPackageId); } @@ -547,10 +604,13 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .build()) .type(PackageType.BITS) .build()) - .doOnRequest(l -> LOG.debug("Creating package for application {}", applicationId)) - .doOnSuccess(response -> LOG.info("Created package for application {}", applicationId)) - .doOnError(e -> LOG - .warn(String.format("Error creating package for application %s: %s", applicationId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Creating package. applicationId={}", applicationId)) + .doOnSuccess(response -> { + LOG.info("Success creating package. applicationId={}", applicationId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error creating package. applicationId=%s, " + ERROR_LOG_TEMPLATE, + applicationId, e.getMessage()), e)); } private Mono updateApplicationEnvironment( @@ -565,24 +625,24 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .memory(memory(properties)) .putAllEnvironmentJsons(environmentVariables) .build()) - .doOnRequest(l -> LOG.debug("Updating environment for application {}", applicationId)) - .doOnSuccess(response -> LOG.info("Updated environment for application {}", applicationId)) - .doOnError(e -> LOG.warn( - String.format("Error Updating environment for application %s: %s", applicationId, e.getMessage()))); + .doOnRequest(l -> LOG.debug("Updating environment. applicationId={}", applicationId)) + .doOnSuccess(response -> { + LOG.info("Success updating environment. applicationId={}", applicationId); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error updating environment. applicationId=%s, " + + ERROR_LOG_TEMPLATE, applicationId, e.getMessage()), e)); } private Function, Publisher> getExponentialBackOff() { return DelayUtils.exponentialBackOff(Duration.ofSeconds(2), Duration.ofMinutes(5), Duration.ofMinutes(10)); } - private Mono pushApplication(DeployApplicationRequest request, - Map deploymentProperties, + private Mono pushApplication(DeployApplicationRequest request, Map deploymentProperties, Resource appResource) { ApplicationManifest manifest = buildAppManifest(request, deploymentProperties, appResource); - if (LOG.isDebugEnabled()) { - LOG.debug("Pushing manifest" + manifest.toString()); - } + LOG.debug("Pushing app manifest. manifest={}", manifest.toString()); PushApplicationManifestRequest applicationManifestRequest = PushApplicationManifestRequest.builder() @@ -602,9 +662,9 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware } return requestPushApplication - .doOnSuccess(v -> LOG.info("Done uploading bits for {}", request.getName())) - .doOnError(e -> LOG.error( - String.format("Error creating app %s. Exception Message %s", request.getName(), e.getMessage()))); + .doOnSuccess(v -> LOG.info("Success pushing app manifest. appName={}", request.getName())) + .doOnError(e -> LOG.error(String.format("Error pushing app manifest. appName=%s, " + ERROR_LOG_TEMPLATE, + request.getName(), e.getMessage()), e)); } private ApplicationManifest buildAppManifest(DeployApplicationRequest request, @@ -669,9 +729,12 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .organizationId(orgId) .name(spaceName) .build()) - .doOnSuccess(response -> LOG.info("Created space {}", spaceName)) - .doOnError( - e -> LOG.warn(String.format("Error creating space %s: %s", spaceName, e.getMessage()))) + .doOnSuccess(response -> { + LOG.info("Success creating space. spaceName={}", spaceName); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error creating space. spaceName=%s, " + + ERROR_LOG_TEMPLATE, spaceName, e.getMessage()), e)) .map(response -> response.getMetadata().getId()) .flatMap(spaceId -> addSpaceDeveloperRoleForCurrentUser(orgName, spaceName, spaceId) .thenReturn(spaceId))))); @@ -684,9 +747,12 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .spaceId(spaceId) .developerId(targetProperties.getClientId()) .build()) - .doOnSuccess(v -> LOG.info("Set space developer role for space {}", spaceName)) - .doOnError(e -> LOG.warn(String - .format("Error setting space developer role for space %s: %s", spaceName, e.getMessage()))) + .doOnSuccess(response -> { + LOG.info("Setting space developer role. spaceName={}", spaceName); + LOG.debug(RESPONSE_LOG_TEMPLATE, response); + }) + .doOnError(e -> LOG.error(String.format("Error setting space developer role. spaceName=%s, " + + ERROR_LOG_TEMPLATE, spaceName, e.getMessage()), e)) .then(); } else if (StringUtils.hasText(targetProperties.getUsername())) { @@ -696,9 +762,9 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .spaceName(spaceName) .username(targetProperties.getUsername()) .build()) - .doOnSuccess(v -> LOG.info("Set space developer role for space {}", spaceName)) - .doOnError(e -> LOG.warn(String - .format("Error setting space developer role for space %s: %s", spaceName, e.getMessage()))); + .doOnSuccess(v -> LOG.info("Seting space developer role. spaceName={}", spaceName)) + .doOnError(e -> LOG.error(String.format("Error setting space developer role. spaceName=%s, " + + ERROR_LOG_TEMPLATE, spaceName, e.getMessage()), e)); } return Mono.empty(); }); @@ -713,7 +779,7 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware @Override public Mono undeploy(UndeployApplicationRequest request) { - LOG.trace("Undeploying application: request={}", request); + LOG.trace("Undeploying application. request={}", request); String appName = request.getName(); Map deploymentProperties = request.getProperties(); @@ -730,8 +796,8 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware return requestDeleteApplication .timeout(Duration.ofSeconds(this.defaultDeploymentProperties.getApiTimeout())) - .doOnSuccess(v -> LOG.info("Successfully undeployed app {}", appName)) - .doOnError(logError(String.format("Failed to undeploy app %s", appName))) + .doOnSuccess(v -> LOG.info("Success undeploying application. appName={}", appName)) + .doOnError(logError(String.format("Error undeploying application. appName=%s", appName))) .then(Mono.just(UndeployApplicationResponse.builder() .name(appName) .build())); @@ -747,27 +813,30 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware private Mono deleteApplicationInSpace(String name, String spaceName) { return getSpaceId(spaceName) - .doOnError(error -> LOG.warn("Unable to get space name: {} ", spaceName)) + .doOnError(e -> LOG.error(String.format("Unable to get space name. spaceName=%s, " + ERROR_LOG_TEMPLATE, + spaceName, e.getMessage()), e)) .then(operationsUtils.getOperationsForSpace(spaceName)) .flatMap(cfOperations -> cfOperations.applications().delete(DeleteApplicationRequest.builder() .deleteRoutes(this.defaultDeploymentProperties.isDeleteRoutes()) .name(name) .build()) - .doOnError(error -> LOG.warn("Unable to delete application: {} ", name))) + .doOnError(e -> LOG.error(String.format("Error deleting application. appName=%s, " + ERROR_LOG_TEMPLATE, + name, e.getMessage()), e))) .onErrorResume(e -> Mono.empty()); } private Mono deleteSpace(String spaceName) { return getSpaceId(spaceName) - .doOnError(error -> LOG.warn("Unable to get space name: {} ", spaceName)) + .doOnError(e -> LOG.error(String.format("Unable to get space name. spaceName=%s, " + ERROR_LOG_TEMPLATE, + spaceName, e.getMessage()), e)) .flatMap(spaceId -> this.client.spaces() .delete(DeleteSpaceRequest.builder() .spaceId(spaceId) .recursive(true) .build()) .then()) - .doOnError(exception -> LOG.debug("Error deleting space {} with error '{}'", - spaceName, exception.getMessage())) + .doOnError(e -> LOG.error(String.format("Error deleting space. spaceName=%s, " + ERROR_LOG_TEMPLATE, + spaceName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty()); } @@ -1113,8 +1182,10 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware } return requestDeleteServiceInstance - .doOnSuccess(v -> LOG.info("Successfully deleted service instance {}", serviceInstanceName)) - .doOnError(logError(String.format("Failed to delete service instance %s", serviceInstanceName))) + .doOnSuccess(v -> LOG.info("Success deleting service instance. serviceInstanceName={}", + serviceInstanceName)) + .doOnError(logError(String.format("Error deleting service instance. serviceInstanceName=%s", + serviceInstanceName))) .thenReturn(DeleteServiceInstanceResponse.builder() .name(serviceInstanceName) .build()); @@ -1124,13 +1195,12 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware CloudFoundryOperations cloudFoundryOperations, Map deploymentProperties) { return cloudFoundryOperations.services().deleteInstance( - org.cloudfoundry.operations.services.DeleteServiceInstanceRequest - .builder() + org.cloudfoundry.operations.services.DeleteServiceInstanceRequest.builder() .name(serviceInstanceName) .completionTimeout(apiPollingTimeout(deploymentProperties)) .build()) - .doOnError(exception -> LOG.debug(String.format("Error deleting service instance %s with error '%s'", - serviceInstanceName, exception.getMessage()), exception)) + .doOnError(e -> LOG.error(String.format("Error deleting service instance. serviceInstanceName=%s, " + + ERROR_LOG_TEMPLATE, serviceInstanceName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty()); } @@ -1140,8 +1210,8 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .getInstance(org.cloudfoundry.operations.services.GetServiceInstanceRequest.builder() .name(serviceInstanceName) .build()) - .doOnError(exception -> LOG.debug("Error unbinding service instance {} with error '{}'", - serviceInstanceName, exception.getMessage())) + .doOnError(e -> LOG.error(String.format("Error getting service instance. serviceInstanceName=%s, " + + ERROR_LOG_TEMPLATE, serviceInstanceName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty()) .map(ServiceInstance::getApplications) .flatMap(applications -> Flux.fromIterable(applications) @@ -1151,6 +1221,8 @@ public class CloudFoundryAppDeployer implements AppDeployer, ResourceLoaderAware .serviceInstanceName(serviceInstanceName) .build()) ) + .doOnError(e -> LOG.error(String.format("Error unbinding service instance. serviceInstanceName=%s, " + + ERROR_LOG_TEMPLATE, serviceInstanceName, e.getMessage()), e)) .onErrorResume(e -> Mono.empty()) .then(Mono.empty())); } diff --git a/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppManager.java b/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppManager.java index 459e80a..81a4702 100644 --- a/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppManager.java +++ b/spring-cloud-app-broker-deployer-cloudfoundry/src/main/java/org/springframework/cloud/appbroker/deployer/cloudfoundry/CloudFoundryAppManager.java @@ -30,6 +30,8 @@ public class CloudFoundryAppManager implements AppManager { private static final Logger LOG = LoggerFactory.getLogger(CloudFoundryAppManager.class); + private static final String REQUEST_LOG_TEMPLATE = "request={}"; + private final CloudFoundryOperationsUtils operationsUtils; public CloudFoundryAppManager(CloudFoundryOperationsUtils operationsUtils) { @@ -45,9 +47,19 @@ public class CloudFoundryAppManager implements AppManager { org.cloudfoundry.operations.applications.StartApplicationRequest.builder() .name(appName) .build()) - .doOnRequest(l -> LOG.debug("Starting application {}", appName)) - .doOnSuccess(item -> LOG.info("Successfully started application {}", appName)) - .doOnError(error -> LOG.error("Failed to start application {}", appName))))); + .doOnRequest(l -> { + LOG.info("Starting application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(v -> { + LOG.info("Success starting application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + LOG.error(String.format("Error starting application. appName=%s, error=%s", appName, + e.getMessage()), e); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + })))); } @Override @@ -59,9 +71,19 @@ public class CloudFoundryAppManager implements AppManager { org.cloudfoundry.operations.applications.StopApplicationRequest.builder() .name(appName) .build()) - .doOnRequest(l -> LOG.debug("Stopping application {}", appName)) - .doOnSuccess(item -> LOG.info("Successfully stopped application {}", appName)) - .doOnError(error -> LOG.error("Failed to stop application {}", appName))))); + .doOnRequest(l -> { + LOG.info("Stopping application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(v -> { + LOG.info("Success stopping application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + LOG.error(String.format("Error stopping application. appName=%s, error=%s", appName, + e.getMessage()), e); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + })))); } @Override @@ -73,9 +95,19 @@ public class CloudFoundryAppManager implements AppManager { org.cloudfoundry.operations.applications.RestartApplicationRequest.builder() .name(appName) .build()) - .doOnRequest(l -> LOG.debug("Restarting application {}", appName)) - .doOnSuccess(item -> LOG.info("Successfully restarted application {}", appName)) - .doOnError(error -> LOG.error("Failed to restart application {}", appName))))); + .doOnRequest(l -> { + LOG.info("Restarting application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(v -> { + LOG.info("Success restarting application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + LOG.error(String.format("Error restarting application. appName=%s, error=%s", appName, + e.getMessage()), e); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + })))); } @Override @@ -87,9 +119,19 @@ public class CloudFoundryAppManager implements AppManager { org.cloudfoundry.operations.applications.RestageApplicationRequest.builder() .name(appName) .build()) - .doOnRequest(l -> LOG.debug("Restaging application {}", appName)) - .doOnSuccess(item -> LOG.info("Successfully restaged application {}", appName)) - .doOnError(error -> LOG.error("Failed to restage application {}", appName))))); + .doOnRequest(l -> { + LOG.info("Restaging application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnSuccess(v -> { + LOG.info("Success restaging application. appName={}", appName); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + }) + .doOnError(e -> { + LOG.error(String.format("Error restaging application. appName=%s, error=%s", appName, + e.getMessage()), e); + LOG.debug(REQUEST_LOG_TEMPLATE, request); + })))); } }