latency-test.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // NOTE:
  2. // requires the env vars HTTP_PORT and AUTH_TOKENS to be set
  3. import "dotenv/config";
  4. import _axios from "axios";
  5. import percentile from "percentile";
  6. const settings = {
  7. amount: 50,
  8. url: `http://127.0.0.1:${process.env.HTTP_PORT}/search/top?q=pink guy - dog festival directions`,
  9. };
  10. const axios = _axios.create({ timeout: 10_000 });
  11. async function run() {
  12. console.log(`\n\n>>> Running latency test with ${settings.amount} requests...\n`);
  13. const startTs = Date.now();
  14. const times = [];
  15. for(let i = 0; i < settings.amount; i++) {
  16. const start = Date.now();
  17. await axios.get(settings.url, {
  18. headers: {
  19. "Cache-Control": "no-cache",
  20. Authorization: `Bearer ${process.env.AUTH_TOKENS!.split(",")[0]}`,
  21. },
  22. });
  23. times.push(Date.now() - start);
  24. i % 10 === 0 && i !== 0 && console.log(`Sent ${i} of ${settings.amount} requests`);
  25. }
  26. const avg = (times.reduce((a, c) => a + c, 0) / times.length).toFixed(0);
  27. const perc80 = percentile(80, times);
  28. const perc95 = percentile(95, times);
  29. const perc99 = percentile(99, times);
  30. console.log(`\n>>> Latency test finished after ${((Date.now() - startTs) / 1000).toFixed(2)}s`);
  31. console.log(`avg:\t${avg}\tms`);
  32. console.log(`80th%:\t${perc80}\tms`);
  33. console.log(`95th%:\t${perc95}\tms`);
  34. console.log(`99th%:\t${perc99}\tms`);
  35. console.log();
  36. }
  37. run();