Skip to content

Commit 0782a8b

Browse files
authored
metric: add change request response time (X-lab2017#1156)
Signed-off-by: frank-zsy <[email protected]> Signed-off-by: frank-zsy <[email protected]>
1 parent 35b44e3 commit 0782a8b

File tree

5 files changed

+24
-5
lines changed

5 files changed

+24
-5
lines changed

.mocharc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
"ts"
44
],
55
"require": "ts-node/register",
6-
"timeout": "20000"
6+
"timeout": "30000"
77
}

src/metrics/chaoss.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -341,9 +341,9 @@ export const chaossIssueResolutionDuration = (config: QueryConfig<ResolutionDura
341341
export const chaossChangeRequestResolutionDuration = (config: QueryConfig<ResolutionDurationOptions>) =>
342342
chaossResolutionDuration(config, 'change request');
343343

344-
export const chaossIssueResponseTime = async (config: QueryConfig<TimeDurationOption>) => {
344+
const chaossResponseTime = async (config: QueryConfig<TimeDurationOption>, type: 'issue' | 'change request') => {
345345
config = getMergedConfig(config);
346-
const whereClauses: string[] = ["type IN ('IssueCommentEvent', 'IssuesEvent') AND actor_login NOT LIKE '%[bot]' "];
346+
const whereClauses: string[] = type === 'issue' ? ["type IN ('IssueCommentEvent', 'IssuesEvent') AND actor_login NOT LIKE '%[bot]'"] : ["type IN ('IssueCommentEvent', 'PullRequestEvent', 'PullRequestReviewCommentEvent', 'PullRequestReviewEvent') AND actor_login NOT LIKE '%[bot]'"];
347347
const repoWhereClause = await getRepoWhereClauseForClickhouse(config);
348348
if (repoWhereClause) whereClauses.push(repoWhereClause);
349349
const endDate = new Date(`${config.endYear}-${config.endMonth}-1`);
@@ -354,7 +354,7 @@ export const chaossIssueResponseTime = async (config: QueryConfig<TimeDurationOp
354354
const sortBy = filterEnumType(config.options?.sortBy, timeDurationConstants.sortByArray, 'avg');
355355

356356
const sql = `
357-
SELECT
357+
SELECT
358358
id,
359359
argMax(name, time),
360360
${getGroupArrayInsertAtClauseForClickhouse(config, { key: `avg`, defaultValue: 'NaN' })},
@@ -409,6 +409,11 @@ ${getOutterOrderAndLimit(config, sortBy, sortBy === 'levels' ? 1 : undefined)}`;
409409
});
410410
};
411411

412+
export const chaossIssueResponseTime = (config: QueryConfig<TimeDurationOption>) => chaossResponseTime(config, 'issue');
413+
414+
export const chaossChangeRequestResponseTime = (config: QueryConfig<TimeDurationOption>) =>
415+
chaossResponseTime(config, 'change request');
416+
412417
// Evolution - Code Development Efficiency
413418
export const chaossChangeRequestsAccepted = async (config: QueryConfig) => {
414419
config = getMergedConfig(config);

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, chaossChangeRequestResolutionDuration,
5+
chaossChangeRequests, chaossChangeRequestReviews, chaossNewContributors, chaossChangeRequestsDuration, chaossIssueResponseTime, chaossChangeRequestsAcceptanceRatio, chaossIssuesActive, chaossActiveDatesAndTimes, chaossChangeRequestResolutionDuration, chaossChangeRequestResponseTime,
66
} from './chaoss';
77
import { repoStars, repoIssueComments, repoParticipants, userEquivalentTimeZone } from './metrics';
88
import { getRelatedUsers } from './related_users';
@@ -26,6 +26,7 @@ module.exports = {
2626
chaossIssueResolutionDuration: chaossIssueResolutionDuration,
2727
chaossChangeRequestResolutionDuration: chaossChangeRequestResolutionDuration,
2828
chaossIssueResponseTime: chaossIssueResponseTime,
29+
chaossChangeRequestResponseTime: chaossChangeRequestResponseTime,
2930
chaossCodeChangeLines: chaossCodeChangeLines,
3031
chaossTechnicalFork: chaossTechnicalFork,
3132
chaossChangeRequests: chaossChangeRequests,

src/open_digger.js

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const openDigger = {
4343
newContributors: func.chaossNewContributors,
4444
changeRequestsDuration: func.chaossChangeRequestsDuration,
4545
issueResponseTime: func.chaossIssueResponseTime,
46+
changeRequestResponseTime: func.chaossChangeRequestResponseTime,
4647
technicalFork: func.chaossTechnicalFork,
4748
changeRequestsAcceptanceRatio: func.chaossChangeRequestsAcceptanceRatio,
4849
repoActiveDatesAndTimes: func.chaossRepoActiveDatesAndTimes,

test/metrics.test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@ describe('Index and metric test', () => {
115115
const p = getParams('levels');
116116
await commonAssert(p[0], p[1], { index: 1, ...p[2] });
117117
});
118+
it('change request response time', async () => {
119+
const getParams = (key: string): [() => any, string, any] =>
120+
[openDigger.chaossChangeRequestResponseTime, key, { noTotal: true, queryOptions: { options: { sortBy: key } } }];
121+
await commonAssert(...getParams('avg'));
122+
await commonAssert(...getParams('quantile_0'));
123+
await commonAssert(...getParams('quantile_1'));
124+
await commonAssert(...getParams('quantile_2'));
125+
await commonAssert(...getParams('quantile_3'));
126+
await commonAssert(...getParams('quantile_4'));
127+
const p = getParams('levels');
128+
await commonAssert(p[0], p[1], { index: 1, ...p[2] });
129+
});
118130
it('code change lines', async () => {
119131
await commonAssert(openDigger.chaossCodeChangeLines, 'lines');
120132
});

0 commit comments

Comments
 (0)