*/ private $condemned; /** @var array */ private $suspected; /** @var array */ private $failing; /** * @param array $condemned Request ids with a recorded failure, keyed by id. * @param array $suspected Request ids with no terminal record, keyed by id. */ public function __construct(array $condemned, array $suspected) { $this->condemned = $condemned; // A condemned request is never also suspected, whatever the caller passed. $this->suspected = array_diff_key($suspected, $condemned); $this->failing = $this->condemned + $this->suspected; } /** * @param array $groups */ public static function fromGroups(array $groups): self { $condemned = array(); $suspected = array(); foreach ($groups as $id => $group) { if ($group->isCondemned()) { $condemned[$id] = true; } elseif ($group->isSuspectedHang()) { $suspected[$id] = true; } } return new self($condemned, $suspected); } public function isCondemned(string $requestId): bool { return isset($this->condemned[$requestId]); } public function isSuspected(string $requestId): bool { return isset($this->suspected[$requestId]); } /** @return array */ public function condemnedIds(): array { return $this->condemned; } /** @return array Condemned first, then suspected. */ public function failingIds(): array { return $this->failing; } }