- ended = @components.map { |cname, c|
- if c[:job] and ["Complete", "Failed", "Cancelled"].include? c[:job][:state] then 1 else 0 end
- }.reduce(:+) || 0
-
- succeeded = @components.map { |cname, c|
- if c[:job] and ["Complete"].include? c[:job][:state] then 1 else 0 end
- }.reduce(:+) || 0
-
- failed = @components.map { |cname, c|
- if c[:job] and ["Failed", "Cancelled"].include? c[:job][:state] then 1 else 0 end
- }.reduce(:+) || 0
+ c_in_state = @components.values.group_by { |c|
+ c[:job] and c[:job][:state]
+ }
+ succeeded = c_in_state["Complete"].andand.count || 0
+ failed = (c_in_state["Failed"].andand.count || 0) + (c_in_state["Cancelled"].andand.count || 0)
+ ended = succeeded + failed