Skip to content

Commit 35b44e3

Browse files
authored
metric: add change request resolution duration (X-lab2017#1155)
Signed-off-by: frank-zsy <[email protected]> Signed-off-by: frank-zsy <[email protected]>
1 parent ed72f7a commit 35b44e3

File tree

4 files changed

+24
-4
lines changed

4 files changed

+24
-4
lines changed

src/metrics/chaoss.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,12 @@ ${getOutterOrderAndLimit(config, 'issues_close_count')}`;
261261
});
262262
};
263263

264-
interface IssueResolutionDurationOptions extends TimeDurationOption {
264+
interface ResolutionDurationOptions extends TimeDurationOption {
265265
by: 'open' | 'close';
266266
}
267-
export const chaossIssueResolutionDuration = async (config: QueryConfig<IssueResolutionDurationOptions>) => {
267+
const chaossResolutionDuration = async (config: QueryConfig<ResolutionDurationOptions>, type: 'issue' | 'change request') => {
268268
config = getMergedConfig(config);
269-
const whereClauses: string[] = ["type = 'IssuesEvent'"];
269+
const whereClauses: string[] = type === 'issue' ? ["type = 'IssuesEvent'"] : ["type = 'PullRequestEvent'"];
270270
const repoWhereClause = await getRepoWhereClauseForClickhouse(config);
271271
if (repoWhereClause) whereClauses.push(repoWhereClause);
272272

@@ -335,6 +335,12 @@ ${getOutterOrderAndLimit(config, sortBy, sortBy === 'levels' ? 1 : undefined)}`;
335335
});
336336
};
337337

338+
export const chaossIssueResolutionDuration = (config: QueryConfig<ResolutionDurationOptions>) =>
339+
chaossResolutionDuration(config, 'issue');
340+
341+
export const chaossChangeRequestResolutionDuration = (config: QueryConfig<ResolutionDurationOptions>) =>
342+
chaossResolutionDuration(config, 'change request');
343+
338344
export const chaossIssueResponseTime = async (config: QueryConfig<TimeDurationOption>) => {
339345
config = getMergedConfig(config);
340346
const whereClauses: string[] = ["type IN ('IssueCommentEvent', 'IssuesEvent') AND actor_login NOT LIKE '%[bot]' "];

src/metrics/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getRepoOpenrank, getRepoActivity, getUserOpenrank, getUserActivity, get
22
import {
33
chaossCodeChangeCommits, chaossBusFactor, chaossIssuesNew, chaossIssuesClosed, chaossChangeRequestsAccepted,
44
chaossChangeRequestsDeclined, chaossIssueResolutionDuration, chaossCodeChangeLines, chaossTechnicalFork,
5-
chaossChangeRequests, chaossChangeRequestReviews, chaossNewContributors, chaossChangeRequestsDuration, chaossIssueResponseTime, chaossChangeRequestsAcceptanceRatio, chaossIssuesActive, chaossActiveDatesAndTimes,
5+
chaossChangeRequests, chaossChangeRequestReviews, chaossNewContributors, chaossChangeRequestsDuration, chaossIssueResponseTime, chaossChangeRequestsAcceptanceRatio, chaossIssuesActive, chaossActiveDatesAndTimes, chaossChangeRequestResolutionDuration,
66
} from './chaoss';
77
import { repoStars, repoIssueComments, repoParticipants, userEquivalentTimeZone } from './metrics';
88
import { getRelatedUsers } from './related_users';
@@ -24,6 +24,7 @@ module.exports = {
2424
chaossChangeRequestsAccepted: chaossChangeRequestsAccepted,
2525
chaossChangeRequestsDeclined: chaossChangeRequestsDeclined,
2626
chaossIssueResolutionDuration: chaossIssueResolutionDuration,
27+
chaossChangeRequestResolutionDuration: chaossChangeRequestResolutionDuration,
2728
chaossIssueResponseTime: chaossIssueResponseTime,
2829
chaossCodeChangeLines: chaossCodeChangeLines,
2930
chaossTechnicalFork: chaossTechnicalFork,

src/open_digger.js

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const openDigger = {
3838
changeRequestsAccepted: func.chaossChangeRequestsAccepted,
3939
changeRequestsDeclined: func.chaossChangeRequestsDeclined,
4040
issueResolutionDuration: func.chaossIssueResolutionDuration,
41+
changeRequestResolutionDuration: func.chaossChangeRequestResolutionDuration,
4142
codeChangeLines: func.chaossCodeChangeLines,
4243
newContributors: func.chaossNewContributors,
4344
changeRequestsDuration: func.chaossChangeRequestsDuration,

test/metrics.test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ describe('Index and metric test', () => {
9191
const p = getParams('levels');
9292
await commonAssert(p[0], p[1], { index: 1, ...p[2] });
9393
});
94+
it('change request resolution duration', async () => {
95+
const getParams = (key: string): [() => any, string, any] =>
96+
[openDigger.chaossChangeRequestResolutionDuration, key, { noTotal: true, queryOptions: { options: { sortBy: key } } }];
97+
await commonAssert(...getParams('avg'));
98+
await commonAssert(...getParams('quantile_0'));
99+
await commonAssert(...getParams('quantile_1'));
100+
await commonAssert(...getParams('quantile_2'));
101+
await commonAssert(...getParams('quantile_3'));
102+
await commonAssert(...getParams('quantile_4'));
103+
const p = getParams('levels');
104+
await commonAssert(p[0], p[1], { index: 1, ...p[2] });
105+
});
94106
it('issue response time', async () => {
95107
const getParams = (key: string): [() => any, string, any] =>
96108
[openDigger.chaossIssueResponseTime, key, { noTotal: true, queryOptions: { options: { sortBy: key } } }];

0 commit comments

Comments
 (0)