From a908cd2ab6f79e9c806ba985490e43fa1c7f438d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sat, 8 Oct 2022 07:00:27 +0200
Subject: [PATCH] feat: log package cache median ms (#18186)

Co-authored-by: Jamie Magee <jamie.magee@gmail.com>
---
 lib/workers/repository/stats.spec.ts |  2 ++
 lib/workers/repository/stats.ts      | 15 +++++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/lib/workers/repository/stats.spec.ts b/lib/workers/repository/stats.spec.ts
index ff321b4206..0e31345331 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 f6d2a584d4..dd95bb0b33 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');
-- 
GitLab