UNPKG

apitally

Version:

Simple API monitoring & analytics for REST APIs built with Express, Fastify, NestJS, AdonisJS, Hono, H3, Elysia, and Koa.

111 lines (110 loc) 4.61 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/common/requestCounter.ts var requestCounter_exports = {}; __export(requestCounter_exports, { default: () => RequestCounter }); module.exports = __toCommonJS(requestCounter_exports); var _RequestCounter = class _RequestCounter { requestCounts; requestSizeSums; responseSizeSums; responseTimes; requestSizes; responseSizes; constructor() { this.requestCounts = /* @__PURE__ */ new Map(); this.requestSizeSums = /* @__PURE__ */ new Map(); this.responseSizeSums = /* @__PURE__ */ new Map(); this.responseTimes = /* @__PURE__ */ new Map(); this.requestSizes = /* @__PURE__ */ new Map(); this.responseSizes = /* @__PURE__ */ new Map(); } getKey(requestInfo) { return [ requestInfo.consumer || "", requestInfo.method.toUpperCase(), requestInfo.path, requestInfo.statusCode ].join("|"); } addRequest(requestInfo) { const key = this.getKey(requestInfo); this.requestCounts.set(key, (this.requestCounts.get(key) || 0) + 1); if (!this.responseTimes.has(key)) { this.responseTimes.set(key, /* @__PURE__ */ new Map()); } const responseTimeMap = this.responseTimes.get(key); const responseTimeMsBin = Math.floor(requestInfo.responseTime / 10) * 10; responseTimeMap.set(responseTimeMsBin, (responseTimeMap.get(responseTimeMsBin) || 0) + 1); if (requestInfo.requestSize !== void 0) { requestInfo.requestSize = Number(requestInfo.requestSize); this.requestSizeSums.set(key, (this.requestSizeSums.get(key) || 0) + requestInfo.requestSize); if (!this.requestSizes.has(key)) { this.requestSizes.set(key, /* @__PURE__ */ new Map()); } const requestSizeMap = this.requestSizes.get(key); const requestSizeKbBin = Math.floor(requestInfo.requestSize / 1e3); requestSizeMap.set(requestSizeKbBin, (requestSizeMap.get(requestSizeKbBin) || 0) + 1); } if (requestInfo.responseSize !== void 0) { requestInfo.responseSize = Number(requestInfo.responseSize); this.responseSizeSums.set(key, (this.responseSizeSums.get(key) || 0) + requestInfo.responseSize); if (!this.responseSizes.has(key)) { this.responseSizes.set(key, /* @__PURE__ */ new Map()); } const responseSizeMap = this.responseSizes.get(key); const responseSizeKbBin = Math.floor(requestInfo.responseSize / 1e3); responseSizeMap.set(responseSizeKbBin, (responseSizeMap.get(responseSizeKbBin) || 0) + 1); } } getAndResetRequests() { const data = []; this.requestCounts.forEach((count, key) => { const [consumer, method, path, statusCodeStr] = key.split("|"); const responseTimes = this.responseTimes.get(key) || /* @__PURE__ */ new Map(); const requestSizes = this.requestSizes.get(key) || /* @__PURE__ */ new Map(); const responseSizes = this.responseSizes.get(key) || /* @__PURE__ */ new Map(); data.push({ consumer: consumer || null, method, path, status_code: parseInt(statusCodeStr), request_count: count, request_size_sum: this.requestSizeSums.get(key) || 0, response_size_sum: this.responseSizeSums.get(key) || 0, response_times: Object.fromEntries(responseTimes), request_sizes: Object.fromEntries(requestSizes), response_sizes: Object.fromEntries(responseSizes) }); }); this.requestCounts.clear(); this.requestSizeSums.clear(); this.responseSizeSums.clear(); this.responseTimes.clear(); this.requestSizes.clear(); this.responseSizes.clear(); return data; } }; __name(_RequestCounter, "RequestCounter"); var RequestCounter = _RequestCounter; //# sourceMappingURL=requestCounter.cjs.map