Skip to content

Commit b287d58

Browse files
committed
ch4: JsonComparator and RequestPostProcessor
1 parent f13e97b commit b287d58

File tree

2 files changed

+703
-620
lines changed

2 files changed

+703
-620
lines changed

cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/applications/DefaultApplications.java

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@
111111
import org.cloudfoundry.client.v3.applications.ApplicationResource;
112112
import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentRequest;
113113
import org.cloudfoundry.client.v3.applications.GetApplicationEnvironmentResponse;
114+
import org.cloudfoundry.client.v3.applications.GetApplicationProcessStatisticsRequest;
115+
import org.cloudfoundry.client.v3.applications.GetApplicationProcessStatisticsResponse;
114116
import org.cloudfoundry.client.v3.applications.GetApplicationResponse;
115117
import org.cloudfoundry.client.v3.applications.GetApplicationSshEnabledRequest;
116118
import org.cloudfoundry.client.v3.applications.GetApplicationSshEnabledResponse;
@@ -821,14 +823,15 @@ private static String cleanName(ApplicationManifest manifest) {
821823
return manifest.getName().replaceAll("\\.", "");
822824
}
823825

824-
private static BiFunction<String, String, String> collectStates() {
826+
public static BiFunction<ProcessState, ProcessState, ProcessState> collectStates() {
825827
return (totalState, instanceState) -> {
826-
if ("RUNNING".equals(instanceState) || "RUNNING".equals(totalState)) {
827-
return "RUNNING";
828+
if (ProcessState.RUNNING.equals(instanceState)
829+
|| ProcessState.RUNNING.equals(totalState)) {
830+
return ProcessState.RUNNING;
828831
}
829832

830-
if ("FLAPPING".equals(instanceState) || "CRASHED".equals(instanceState)) {
831-
return "FAILED";
833+
if (ProcessState.CRASHED.equals(instanceState)) {
834+
return ProcessState.CRASHED;
832835
}
833836

834837
return totalState;
@@ -1434,8 +1437,8 @@ private static boolean isIdentical(String s, String t) {
14341437
return Objects.equals(s, t);
14351438
}
14361439

1437-
private static Predicate<String> isInstanceComplete() {
1438-
return state -> "RUNNING".equals(state) || "FAILED".equals(state);
1440+
private static Predicate<ProcessState> isInstanceComplete() {
1441+
return state -> ProcessState.RUNNING.equals(state) || ProcessState.CRASHED.equals(state);
14391442
}
14401443

14411444
private static Predicate<AbstractApplicationResource> isNotIn(String expectedState) {
@@ -1452,8 +1455,8 @@ private static boolean isRestartRequired(
14521455
&& STARTED_STATE.equals(ResourceUtils.getEntity(applicationResource).getState());
14531456
}
14541457

1455-
private static Predicate<String> isRunning() {
1456-
return "RUNNING"::equals;
1458+
private static Predicate<ProcessState> isRunning() {
1459+
return ProcessState.RUNNING::equals;
14571460
}
14581461

14591462
private static Predicate<String> isStaged() {
@@ -1643,6 +1646,17 @@ private Mono<ApplicationInstancesResponse> requestApplicationInstances(String ap
16431646
ApplicationInstancesRequest.builder().applicationId(applicationId).build());
16441647
}
16451648

1649+
private Mono<GetApplicationProcessStatisticsResponse> requestApplicationStatisticsV3(
1650+
String applicationId) {
1651+
return this.cloudFoundryClient
1652+
.applicationsV3()
1653+
.getProcessStatistics(
1654+
GetApplicationProcessStatisticsRequest.builder()
1655+
.applicationId(applicationId)
1656+
.type("web")
1657+
.build());
1658+
}
1659+
16461660
private Flux<org.cloudfoundry.client.v3.routes.RouteResource> requestApplicationRoutes(
16471661
String applicationId) {
16481662
return PaginationUtils.requestClientV3Resources(
@@ -2620,10 +2634,10 @@ private Mono<Void> waitForRunning(
26202634
String application, String applicationId, Duration startupTimeout) {
26212635
Duration timeout = Optional.ofNullable(startupTimeout).orElse(Duration.ofMinutes(5));
26222636

2623-
return requestApplicationInstances(applicationId)
2624-
.flatMapMany(response -> Flux.fromIterable(response.getInstances().values()))
2625-
.map(ApplicationInstanceInfo::getState)
2626-
.reduce("UNKNOWN", collectStates())
2637+
return requestApplicationStatisticsV3(applicationId)
2638+
.flatMapIterable(GetApplicationProcessStatisticsResponse::getResources)
2639+
.map(ProcessStatisticsResource::getState)
2640+
.reduce(ProcessState.STARTING, collectStates())
26272641
.filter(isInstanceComplete())
26282642
.repeatWhenEmpty(
26292643
exponentialBackOff(Duration.ofSeconds(1), Duration.ofSeconds(15), timeout))

0 commit comments

Comments
 (0)