111111import org .cloudfoundry .client .v3 .applications .ApplicationResource ;
112112import org .cloudfoundry .client .v3 .applications .GetApplicationEnvironmentRequest ;
113113import org .cloudfoundry .client .v3 .applications .GetApplicationEnvironmentResponse ;
114+ import org .cloudfoundry .client .v3 .applications .GetApplicationProcessStatisticsRequest ;
115+ import org .cloudfoundry .client .v3 .applications .GetApplicationProcessStatisticsResponse ;
114116import org .cloudfoundry .client .v3 .applications .GetApplicationResponse ;
115117import org .cloudfoundry .client .v3 .applications .GetApplicationSshEnabledRequest ;
116118import 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