Bläddra i källkod

feat: latency test

Sven 2 år sedan
förälder
incheckning
ddeb2acbb0
3 ändrade filer med 64 tillägg och 3 borttagningar
  1. 15 2
      package-lock.json
  2. 2 1
      package.json
  3. 47 0
      test/latency-test.ts

+ 15 - 2
package-lock.json

@@ -6,7 +6,7 @@
   "packages": {
     "": {
       "name": "geniurl",
-      "version": "1.3.0",
+      "version": "1.3.1",
       "license": "MIT",
       "dependencies": {
         "axios": "^1.2.1",
@@ -34,6 +34,7 @@
         "eslint": "^8.9.0",
         "jest": "^29.3.1",
         "nodemon": "^2.0.20",
+        "percentile": "^1.6.0",
         "ts-node": "^10.9.1",
         "tslib": "^2.4.0"
       },
@@ -4908,6 +4909,12 @@
         "node": ">=8"
       }
     },
+    "node_modules/percentile": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/percentile/-/percentile-1.6.0.tgz",
+      "integrity": "sha512-8vSyjdzwxGDHHwH+cSGch3A9Uj2On3UpgOWxWXMKwUvoAbnujx6DaqmV1duWXNiH/oEWpyVd6nSQccix6DM3Ng==",
+      "dev": true
+    },
     "node_modules/picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -9852,6 +9859,12 @@
       "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
       "dev": true
     },
+    "percentile": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/percentile/-/percentile-1.6.0.tgz",
+      "integrity": "sha512-8vSyjdzwxGDHHwH+cSGch3A9Uj2On3UpgOWxWXMKwUvoAbnujx6DaqmV1duWXNiH/oEWpyVd6nSQccix6DM3Ng==",
+      "dev": true
+    },
     "picocolors": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -10777,4 +10790,4 @@
       "dev": true
     }
   }
-}
+}

+ 2 - 1
package.json

@@ -57,7 +57,8 @@
     "eslint": "^8.9.0",
     "jest": "^29.3.1",
     "nodemon": "^2.0.20",
+    "percentile": "^1.6.0",
     "ts-node": "^10.9.1",
     "tslib": "^2.4.0"
   }
-}
+}

+ 47 - 0
test/latency-test.ts

@@ -0,0 +1,47 @@
+// NOTE:
+// requires the env vars HTTP_PORT and AUTH_TOKENS to be set
+
+import "dotenv/config";
+import _axios from "axios";
+import percentile from "percentile";
+
+const settings = {
+    amount: 50,
+    url: `http://127.0.0.1:${process.env.HTTP_PORT}/search/top?q=pink guy - dog festival directions`,
+};
+
+
+const axios = _axios.create({ timeout: 10_000 });
+
+async function run() {
+    console.log(`\n\n>>> Running latency test with ${settings.amount} requests...\n`);
+    const startTs = Date.now();
+
+    const times = [];
+    for(let i = 0; i < settings.amount; i++) {
+        const start = Date.now();
+        await axios.get(settings.url, {
+            headers: {
+                "Cache-Control": "no-cache",
+                Authorization: `Bearer ${process.env.AUTH_TOKENS!.split(",")[0]}`,
+            },
+        });
+        times.push(Date.now() - start);
+
+        i % 10 === 0 && i !== 0 && console.log(`Sent ${i} of ${settings.amount} requests`);
+    }
+
+    const avg = (times.reduce((a, c) => a + c, 0) / times.length).toFixed(0);
+    const perc80 = percentile(80, times);
+    const perc95 = percentile(95, times);
+    const perc99 = percentile(99, times);
+
+    console.log(`\n>>> Latency test finished after ${((Date.now() - startTs) / 1000).toFixed(2)}s`);
+    console.log(`avg:\t${avg}\tms`);
+    console.log(`80th%:\t${perc80}\tms`);
+    console.log(`95th%:\t${perc95}\tms`);
+    console.log(`99th%:\t${perc99}\tms`);
+    console.log();
+}
+
+run();