Generate metrics for released and unreleased bugs (#14637)

Updated KPI script to generate metrics on released and unreleased bugs.
Looks like this:

    Bugs:
    ---------------------------
    Number of open issues with the "bug" label in fleetdm/fleet: 118
    Average open time: 44 days.

Number of open issues with the "~unreleased bug" label in fleetdm/fleet:
20
    Average open time: 7 days.

Number of open issues with the "~released bug" label in fleetdm/fleet:
98
    Average open time: 52 days.

...
This commit is contained in:
Luke Heath 2023-10-18 23:26:58 -05:00 committed by GitHub
parent 52f84d2233
commit 0de2125e2a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -29,6 +29,10 @@ module.exports = {
const NUMBER_OF_RESULTS_REQUESTED = 100;
let daysSinceBugsWereOpened = [];
let daysSinceUnreleasedBugsWereOpened = [];
let daysSinceReleasedBugsWereOpened = [];
let allBugsWithUnreleasedLabel = [];
let allBugsWithReleasedLabel = [];
let daysSincePullRequestsWereOpened = [];
let daysSinceContributorPullRequestsWereOpened = [];
let commitToMergeTimesInDays = [];
@ -75,7 +79,7 @@ module.exports = {
}, 10000);
// iterate through the allIssuesWithBugLabel array, adding the number
for(let issue of allIssuesWithBugLabel) {
for (let issue of allIssuesWithBugLabel) {
// Create a date object from the issue's created_at timestamp.
let issueOpenedOn = new Date(issue.created_at);
// Get the amount of time this issue has been open in milliseconds.
@ -83,6 +87,18 @@ module.exports = {
// Convert the miliseconds to days and add the value to the daysSinceBugsWereOpened array
let timeOpenInDays = timeOpenInMS / ONE_DAY_IN_MILLISECONDS;
daysSinceBugsWereOpened.push(timeOpenInDays);
// Send to released or unreleased bugs array
if (issue.labels.some(label => label.name === '~unreleased bug')) {
allBugsWithUnreleasedLabel.push(issue);
daysSinceUnreleasedBugsWereOpened.push(timeOpenInDays);
} else if (issue.labels.some(label => label.name === '~released bug')) {
allBugsWithReleasedLabel.push(issue);
daysSinceReleasedBugsWereOpened.push(timeOpenInDays);
} else {
// If not labeled as a released or unreleased bug, log a warning.
sails.log.warn('Issue #'+issue.number+' is labeled as a bug but is not labeled as released or unreleased.');
}
}
},
@ -236,7 +252,9 @@ module.exports = {
]);
// Get the averages from the arrays of results.
let averageNumberOfDaysBugsAreOpenFor = Math.round(_.sum(daysSinceBugsWereOpened)/daysSinceBugsWereOpened.length);
let averageNumberOfDaysBugsAreOpenFor = Math.round(_.sum(daysSinceBugsWereOpened) / daysSinceBugsWereOpened.length);
let averageNumberOfDaysUnreleasedBugsAreOpenFor = Math.round(_.sum(daysSinceUnreleasedBugsWereOpened) / daysSinceUnreleasedBugsWereOpened.length);
let averageNumberOfDaysReleasedBugsAreOpenFor = Math.round(_.sum(daysSinceReleasedBugsWereOpened)/daysSinceReleasedBugsWereOpened.length);
let averageNumberOfDaysFromCommitToMerge = Math.round(_.sum(commitToMergeTimesInDays)/commitToMergeTimesInDays.length);
let averageDaysPullRequestsAreOpenFor = Math.round(_.sum(daysSincePullRequestsWereOpened)/daysSincePullRequestsWereOpened.length);
let averageDaysContributorPullRequestsAreOpenFor = Math.round(_.sum(daysSinceContributorPullRequestsWereOpened)/daysSinceContributorPullRequestsWereOpened.length);
@ -271,6 +289,11 @@ module.exports = {
Number of open issues with the "bug" label in fleetdm/fleet: ${daysSinceBugsWereOpened.length}
Average open time: ${averageNumberOfDaysBugsAreOpenFor} days.
Number of open issues with the "~unreleased bug" label in fleetdm/fleet: ${allBugsWithUnreleasedLabel.length}
Average open time: ${averageNumberOfDaysUnreleasedBugsAreOpenFor} days.
Number of open issues with the "~released bug" label in fleetdm/fleet: ${allBugsWithReleasedLabel.length}
Average open time: ${averageNumberOfDaysReleasedBugsAreOpenFor} days.
Closed pull requests:
---------------------------