diff --git a/README.md b/README.md index 82b603a..0045c16 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Not all issues are taken into account: - Issues from collaborators are ignored - Issues with labels like "feature", "enhancement", "duplicate"… are ignored +- For the issue median closing time, issues closed and older than 6 months are ignored Ideas: diff --git a/src/Maintained/Application/View/home.twig b/src/Maintained/Application/View/home.twig index c993d5d..6f5f044 100644 --- a/src/Maintained/Application/View/home.twig +++ b/src/Maintained/Application/View/home.twig @@ -88,7 +88,8 @@
Issues or pull requests opened by the collaborators are ignored. Some issues are also ignored based on their labels (example of ignored - labels: "enhancement", "feature"…). + labels: "enhancement", "feature"…). For the median time needed to close an + issue, issues closed and older than 6 months are ignored too.
diff --git a/src/Maintained/Application/View/project.twig b/src/Maintained/Application/View/project.twig index d22de97..6a4a93c 100644 --- a/src/Maintained/Application/View/project.twig +++ b/src/Maintained/Application/View/project.twig @@ -36,6 +36,7 @@ Issues or pull requests opened by the collaborators are ignored. Some issues are also ignored based on their labels (example of ignored labels: "enhancement", "feature"…). + Issues closed and older than 6 months are ignored.Image: diff --git a/src/Maintained/Issue.php b/src/Maintained/Issue.php index 6f3a481..109c0b4 100644 --- a/src/Maintained/Issue.php +++ b/src/Maintained/Issue.php @@ -28,6 +28,13 @@ class Issue */ private $open; + /** + * Date the issue has been opened. + * + * @var DateTime + */ + private $openedAt; + /** * Duration the issue has been opened for. * @@ -56,14 +63,14 @@ class Issue $issue->author = $data['user']['login']; $issue->open = ($data['state'] === self::STATE_OPEN); - $openingDate = new DateTime($data['created_at']); + $issue->openedAt = new DateTime($data['created_at']); if (! $issue->open) { $endDate = new DateTime($data['closed_at']); } else { $endDate = new DateTime(); } - $issue->openedFor = TimeInterval::from($endDate, $openingDate); + $issue->openedFor = TimeInterval::from($endDate, $issue->openedAt); $labels = []; foreach ($data['labels'] as $dataLabel) { @@ -82,6 +89,14 @@ class Issue return $this->author; } + /** + * @return DateTime + */ + public function getOpenedAt() + { + return $this->openedAt; + } + /** * @return TimeInterval */ diff --git a/src/Maintained/Statistics/StatisticsComputer.php b/src/Maintained/Statistics/StatisticsComputer.php index 80c1d1c..77ce9a8 100644 --- a/src/Maintained/Statistics/StatisticsComputer.php +++ b/src/Maintained/Statistics/StatisticsComputer.php @@ -38,8 +38,10 @@ class StatisticsComputer implements StatisticsProvider $issues = $this->excludeIssuesCreatedByCollaborators($issues, $collaborators); $issues = $this->excludeIssuesByLabels($issues, $this->excludedLabels); + $latestIssues = $this->keepLatestIssues($issues); + $statistics = new Statistics(); - $statistics->resolutionTime = $this->computeResolutionTime($issues); + $statistics->resolutionTime = $this->computeResolutionTime($latestIssues); $statistics->openIssuesRatio = $this->computeOpenIssueRatio($issues); return $statistics; @@ -114,6 +116,22 @@ class StatisticsComputer implements StatisticsProvider }); } + /** + * @param Issue[] $issues + * @return Issue[] + */ + private function keepLatestIssues(array $issues) + { + $sixMonthsAgo = new \DateTime('-6 month'); + + return array_filter($issues, function (Issue $issue) use ($sixMonthsAgo) { + if ($issue->isOpen()) { + return true; + } + return $issue->getOpenedAt() > $sixMonthsAgo; + }); + } + /** * @param float[] $array * @return float