diff --git a/lib/workers/repository/stats.spec.ts b/lib/workers/repository/stats.spec.ts index ff321b4206f91d79b90afc34fc650a2fcf29537b..0e313453314cbbf40320ef03bba3b239128fdff9 100644 --- a/lib/workers/repository/stats.spec.ts +++ b/lib/workers/repository/stats.spec.ts @@ -133,11 +133,13 @@ describe('workers/repository/stats', () => { "avgMs": 40, "count": 4, "maxMs": 100, + "medianMs": 20, }, "set": { "avgMs": 70, "count": 3, "maxMs": 110, + "medianMs": 80, }, } `); diff --git a/lib/workers/repository/stats.ts b/lib/workers/repository/stats.ts index f6d2a584d4d8f2e267cc40f2e19f00d2e450c52c..dd95bb0b333993a92f8d7b593991a4998192dcdd 100644 --- a/lib/workers/repository/stats.ts +++ b/lib/workers/repository/stats.ts @@ -7,6 +7,7 @@ import type { RequestStats } from '../../util/http/types'; interface CacheStats { count: number; avgMs?: number; + medianMs?: number; maxMs?: number; } @@ -29,13 +30,23 @@ export function printRequestStats(): void { packageCacheStats.get.avgMs = Math.round( packageCacheGets.reduce((a, b) => a + b, 0) / packageCacheGets.length ); - packageCacheStats.get.maxMs = packageCacheGets[packageCacheGets.length - 1]; + if (packageCacheGets.length > 1) { + packageCacheStats.get.medianMs = + packageCacheGets[Math.round(packageCacheGets.length / 2) - 1]; + packageCacheStats.get.maxMs = + packageCacheGets[packageCacheGets.length - 1]; + } } if (packageCacheSets.length) { packageCacheStats.set.avgMs = Math.round( packageCacheSets.reduce((a, b) => a + b, 0) / packageCacheSets.length ); - packageCacheStats.set.maxMs = packageCacheSets[packageCacheSets.length - 1]; + if (packageCacheSets.length > 1) { + packageCacheStats.set.medianMs = + packageCacheSets[Math.round(packageCacheSets.length / 2) - 1]; + packageCacheStats.set.maxMs = + packageCacheSets[packageCacheSets.length - 1]; + } } logger.debug(packageCacheStats, 'Package cache statistics'); const httpRequests = memCache.get<RequestStats[]>('http-requests');