1616package io .javaoperatorsdk .operator .health ;
1717
1818import java .util .Map ;
19+ import java .util .function .Predicate ;
20+ import java .util .stream .Collector ;
1921import java .util .stream .Collectors ;
22+ import java .util .stream .Stream ;
2023
2124import io .javaoperatorsdk .operator .processing .event .EventSourceManager ;
2225import io .javaoperatorsdk .operator .processing .event .source .EventSource ;
2528@ SuppressWarnings ("rawtypes" )
2629public class ControllerHealthInfo {
2730
31+ private static final Predicate <EventSource > UNHEALTHY = e -> e .getStatus () == Status .UNHEALTHY ;
32+ private static final Predicate <EventSource > INFORMER =
33+ e -> e instanceof InformerWrappingEventSourceHealthIndicator ;
34+ private static final Predicate <EventSource > UNHEALTHY_INFORMER =
35+ e -> INFORMER .test (e ) && e .getStatus () == Status .HEALTHY ;
36+ private static final Collector <EventSource , ?, Map <String , EventSourceHealthIndicator >>
37+ NAME_TO_ES_MAP = Collectors .toMap (EventSource ::name , e -> e );
38+ private static final Collector <
39+ EventSource , ?, Map <String , InformerWrappingEventSourceHealthIndicator >>
40+ NAME_TO_ES_HEALTH_MAP =
41+ Collectors .toMap (EventSource ::name , e -> (InformerWrappingEventSourceHealthIndicator ) e );
2842 private final EventSourceManager <?> eventSourceManager ;
2943
3044 public ControllerHealthInfo (EventSourceManager eventSourceManager ) {
3145 this .eventSourceManager = eventSourceManager ;
3246 }
3347
3448 public Map <String , EventSourceHealthIndicator > eventSourceHealthIndicators () {
35- return eventSourceManager .allEventSources ().stream ()
36- .collect (Collectors .toMap (EventSource ::name , e -> e ));
49+ return eventSourceManager .allEventSourcesStream ().collect (NAME_TO_ES_MAP );
50+ }
51+
52+ /**
53+ * Whether the associated {@link io.javaoperatorsdk.operator.processing.Controller} has unhealthy
54+ * event sources.
55+ *
56+ * @return {@code true} if any of the associated controller is unhealthy, {@code false} otherwise
57+ * @since 5.3.0
58+ */
59+ public boolean hasUnhealthyEventSources () {
60+ return filteredEventSources (UNHEALTHY ).findAny ().isPresent ();
3761 }
3862
3963 public Map <String , EventSourceHealthIndicator > unhealthyEventSources () {
40- return eventSourceManager .allEventSources ().stream ()
41- .filter (e -> e .getStatus () == Status .UNHEALTHY )
42- .collect (Collectors .toMap (EventSource ::name , e -> e ));
64+ return filteredEventSources (UNHEALTHY ).collect (NAME_TO_ES_MAP );
65+ }
66+
67+ private Stream <EventSource > filteredEventSources (Predicate <EventSource > filter ) {
68+ return eventSourceManager .allEventSourcesStream ().filter (filter );
4369 }
4470
4571 public Map <String , InformerWrappingEventSourceHealthIndicator >
4672 informerEventSourceHealthIndicators () {
47- return eventSourceManager .allEventSources ().stream ()
48- .filter (e -> e instanceof InformerWrappingEventSourceHealthIndicator )
49- .collect (
50- Collectors .toMap (
51- EventSource ::name , e -> (InformerWrappingEventSourceHealthIndicator ) e ));
73+ return filteredEventSources (INFORMER ).collect (NAME_TO_ES_HEALTH_MAP );
5274 }
5375
5476 /**
@@ -58,11 +80,6 @@ public Map<String, EventSourceHealthIndicator> unhealthyEventSources() {
5880 */
5981 public Map <String , InformerWrappingEventSourceHealthIndicator >
6082 unhealthyInformerEventSourceHealthIndicators () {
61- return eventSourceManager .allEventSources ().stream ()
62- .filter (e -> e .getStatus () == Status .UNHEALTHY )
63- .filter (e -> e instanceof InformerWrappingEventSourceHealthIndicator )
64- .collect (
65- Collectors .toMap (
66- EventSource ::name , e -> (InformerWrappingEventSourceHealthIndicator ) e ));
83+ return filteredEventSources (UNHEALTHY_INFORMER ).collect (NAME_TO_ES_HEALTH_MAP );
6784 }
6885}
0 commit comments