diff --git a/src/kpi/kpi.controller.ts b/src/kpi/kpi.controller.ts index dec3d45..3a2c5cb 100644 --- a/src/kpi/kpi.controller.ts +++ b/src/kpi/kpi.controller.ts @@ -29,18 +29,42 @@ export class KpiController { @Query('fileFilter') fileFilter?: string[], @Query('couplingSize') couplingSize?: number, @Query('occs') occurences?: number, + @Query('timeToComplete') timeToComplete?: number, ) { this.logger.log(`Received query for KPI with id ${id}`); switch (id) { - case 'fcr': + case 'icr': this.logger.log( - `Calculating feature rate completion for ${owner}/${repo}`, + `Calculating issue completion rate for ${owner}/${repo}`, ); return this.issueTrackingService.issueCompletionRate( owner, repo, labelFilter, ); + + case 'icc': + this.logger.log( + `Calculating issue completion capability for ${owner}/${repo}`, + ); + return this.issueTrackingService.issueCompletionCapability( + owner, + repo, + labelFilter, + timeToComplete, + ); + + case 'ice': + this.logger.log( + `Calculating issue completion efficiency for ${owner}/${repo}`, + ); + return this.issueTrackingService.issueCompletionEfficiency( + owner, + repo, + labelFilter, + timeToComplete, + ); + case 'devSpread': this.logger.log(`Calculating developer spread for ${owner}/${repo}`); return this.developerSpreadService.developerSpread( @@ -50,6 +74,7 @@ export class KpiController { since, to, ); + case 'releaseCycle': this.logger.log(`Calculating the release cycle for ${owner}/${repo}`); return this.releaseCycleService.releaseCycle( @@ -59,6 +84,7 @@ export class KpiController { since, to, ); + case 'coc': this.logger.log( `Calculating coupling of components for ${owner}/${repo}`, @@ -74,7 +100,9 @@ export class KpiController { ); case 'mttr': - this.logger.log('Get Mean Time To Resolution'); + this.logger.log( + `Calculating the mean time to resolution for ${owner}/${repo}`, + ); return this.meanTimeToResolutionService.meanTimeToResolution( { owner: owner, @@ -87,7 +115,7 @@ export class KpiController { ); default: - return 'no such kpi endpoint'; + return 'No such KPI'; } } diff --git a/src/kpi/statistics/issueTracking/issueTracking.service.ts b/src/kpi/statistics/issueTracking/issueTracking.service.ts index d3d3fcb..f0f0ee0 100644 --- a/src/kpi/statistics/issueTracking/issueTracking.service.ts +++ b/src/kpi/statistics/issueTracking/issueTracking.service.ts @@ -1,5 +1,4 @@ import { Injectable, Logger } from '@nestjs/common'; -import { RepositoryIdentifier } from '../../../entities/repositories/model'; import { RepositoryDocument } from '../../../entities/repositories/model/schemas'; import { calculateAvgCapability, @@ -19,13 +18,13 @@ export class IssueTrackingService { async issueCompletionRate( owner: string, repository: string, - labelNames?: string[], + labelFilter?: string[], ) { const repo = await this.repoService.read( { owner: owner, repo: repository }, { commits: false, diffs: false }, ); - await this.populateRepository(repo, labelNames); + await this.populateRepository(repo, labelFilter); const releaseIssueMap = mapReleasesToIssues(repo.releases, repo.issues); const { avgRate, rateMap } = calculateAvgRate(releaseIssueMap); @@ -36,12 +35,13 @@ export class IssueTrackingService { } async issueCompletionCapability( - repoIdent: RepositoryIdentifier, + owner: string, + repository: string, labelNames?: string[], timeToComplete: number = 14 * 24 * 60 * 60 * 1000, ) { const repo = await this.repoService.read( - { ...repoIdent }, + { owner: owner, repo: repository }, { commits: false, diffs: false }, ); await this.populateRepository(repo, labelNames); @@ -56,12 +56,13 @@ export class IssueTrackingService { } async issueCompletionEfficiency( - repoIdent: RepositoryIdentifier, + owner: string, + repository: string, labelNames?: string[], timeToComplete: number = 14 * 24 * 60 * 60 * 1000, ) { const repo = await this.repoService.read( - { ...repoIdent }, + { owner: owner, repo: repository }, { commits: false, diffs: false }, ); await this.populateRepository(repo, labelNames);