@spinajs/telemetry 2.0.482

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +482 -0
  2. package/lib/cjs/InMemoryPerfSink.d.ts +51 -0
  3. package/lib/cjs/InMemoryPerfSink.d.ts.map +1 -0
  4. package/lib/cjs/InMemoryPerfSink.js +100 -0
  5. package/lib/cjs/InMemoryPerfSink.js.map +1 -0
  6. package/lib/cjs/PromMetricSink.d.ts +26 -0
  7. package/lib/cjs/PromMetricSink.d.ts.map +1 -0
  8. package/lib/cjs/PromMetricSink.js +68 -0
  9. package/lib/cjs/PromMetricSink.js.map +1 -0
  10. package/lib/cjs/bootstrap.d.ts +13 -0
  11. package/lib/cjs/bootstrap.d.ts.map +1 -0
  12. package/lib/cjs/bootstrap.js +57 -0
  13. package/lib/cjs/bootstrap.js.map +1 -0
  14. package/lib/cjs/config/telemetry.d.ts +63 -0
  15. package/lib/cjs/config/telemetry.d.ts.map +1 -0
  16. package/lib/cjs/config/telemetry.js +78 -0
  17. package/lib/cjs/config/telemetry.js.map +1 -0
  18. package/lib/cjs/controllers/Metrics.d.ts +26 -0
  19. package/lib/cjs/controllers/Metrics.d.ts.map +1 -0
  20. package/lib/cjs/controllers/Metrics.js +63 -0
  21. package/lib/cjs/controllers/Metrics.js.map +1 -0
  22. package/lib/cjs/controllers/Telemetry.d.ts +92 -0
  23. package/lib/cjs/controllers/Telemetry.d.ts.map +1 -0
  24. package/lib/cjs/controllers/Telemetry.js +226 -0
  25. package/lib/cjs/controllers/Telemetry.js.map +1 -0
  26. package/lib/cjs/dto/index.d.ts +21 -0
  27. package/lib/cjs/dto/index.d.ts.map +1 -0
  28. package/lib/cjs/dto/index.js +64 -0
  29. package/lib/cjs/dto/index.js.map +1 -0
  30. package/lib/cjs/endpoints.d.ts +32 -0
  31. package/lib/cjs/endpoints.d.ts.map +1 -0
  32. package/lib/cjs/endpoints.js +38 -0
  33. package/lib/cjs/endpoints.js.map +1 -0
  34. package/lib/cjs/health.d.ts +55 -0
  35. package/lib/cjs/health.d.ts.map +1 -0
  36. package/lib/cjs/health.js +111 -0
  37. package/lib/cjs/health.js.map +1 -0
  38. package/lib/cjs/index.d.ts +16 -0
  39. package/lib/cjs/index.d.ts.map +1 -0
  40. package/lib/cjs/index.js +32 -0
  41. package/lib/cjs/index.js.map +1 -0
  42. package/lib/cjs/metrics.d.ts +16 -0
  43. package/lib/cjs/metrics.d.ts.map +1 -0
  44. package/lib/cjs/metrics.js +32 -0
  45. package/lib/cjs/metrics.js.map +1 -0
  46. package/lib/cjs/middleware.d.ts +81 -0
  47. package/lib/cjs/middleware.d.ts.map +1 -0
  48. package/lib/cjs/middleware.js +210 -0
  49. package/lib/cjs/middleware.js.map +1 -0
  50. package/lib/cjs/package.json +1 -0
  51. package/lib/cjs/policies/PublicPolicy.d.ts +16 -0
  52. package/lib/cjs/policies/PublicPolicy.d.ts.map +1 -0
  53. package/lib/cjs/policies/PublicPolicy.js +34 -0
  54. package/lib/cjs/policies/PublicPolicy.js.map +1 -0
  55. package/lib/cjs/policies/TelemetryTokenPolicy.d.ts +19 -0
  56. package/lib/cjs/policies/TelemetryTokenPolicy.d.ts.map +1 -0
  57. package/lib/cjs/policies/TelemetryTokenPolicy.js +65 -0
  58. package/lib/cjs/policies/TelemetryTokenPolicy.js.map +1 -0
  59. package/lib/cjs/requestStats.d.ts +81 -0
  60. package/lib/cjs/requestStats.d.ts.map +1 -0
  61. package/lib/cjs/requestStats.js +134 -0
  62. package/lib/cjs/requestStats.js.map +1 -0
  63. package/lib/cjs/responses.d.ts +23 -0
  64. package/lib/cjs/responses.d.ts.map +1 -0
  65. package/lib/cjs/responses.js +35 -0
  66. package/lib/cjs/responses.js.map +1 -0
  67. package/lib/cjs/routeStats.d.ts +43 -0
  68. package/lib/cjs/routeStats.d.ts.map +1 -0
  69. package/lib/cjs/routeStats.js +59 -0
  70. package/lib/cjs/routeStats.js.map +1 -0
  71. package/lib/cjs/schemas/HealthResponse.schema.d.ts +30 -0
  72. package/lib/cjs/schemas/HealthResponse.schema.d.ts.map +1 -0
  73. package/lib/cjs/schemas/HealthResponse.schema.js +15 -0
  74. package/lib/cjs/schemas/HealthResponse.schema.js.map +1 -0
  75. package/lib/cjs/schemas/PerfResponse.schema.d.ts +56 -0
  76. package/lib/cjs/schemas/PerfResponse.schema.d.ts.map +1 -0
  77. package/lib/cjs/schemas/PerfResponse.schema.js +36 -0
  78. package/lib/cjs/schemas/PerfResponse.schema.js.map +1 -0
  79. package/lib/cjs/schemas/ReadyResponse.schema.d.ts +36 -0
  80. package/lib/cjs/schemas/ReadyResponse.schema.d.ts.map +1 -0
  81. package/lib/cjs/schemas/ReadyResponse.schema.js +23 -0
  82. package/lib/cjs/schemas/ReadyResponse.schema.js.map +1 -0
  83. package/lib/cjs/schemas/RequestStatsSnapshot.schema.d.ts +79 -0
  84. package/lib/cjs/schemas/RequestStatsSnapshot.schema.d.ts.map +1 -0
  85. package/lib/cjs/schemas/RequestStatsSnapshot.schema.js +30 -0
  86. package/lib/cjs/schemas/RequestStatsSnapshot.schema.js.map +1 -0
  87. package/lib/cjs/schemas/RoutesResponse.schema.d.ts +100 -0
  88. package/lib/cjs/schemas/RoutesResponse.schema.d.ts.map +1 -0
  89. package/lib/cjs/schemas/RoutesResponse.schema.js +25 -0
  90. package/lib/cjs/schemas/RoutesResponse.schema.js.map +1 -0
  91. package/lib/cjs/schemas/StatsResponse.schema.d.ts +158 -0
  92. package/lib/cjs/schemas/StatsResponse.schema.d.ts.map +1 -0
  93. package/lib/cjs/schemas/StatsResponse.schema.js +19 -0
  94. package/lib/cjs/schemas/StatsResponse.schema.js.map +1 -0
  95. package/lib/cjs/schemas/TimelineResponse.schema.d.ts +109 -0
  96. package/lib/cjs/schemas/TimelineResponse.schema.d.ts.map +1 -0
  97. package/lib/cjs/schemas/TimelineResponse.schema.js +28 -0
  98. package/lib/cjs/schemas/TimelineResponse.schema.js.map +1 -0
  99. package/lib/cjs/store.d.ts +58 -0
  100. package/lib/cjs/store.d.ts.map +1 -0
  101. package/lib/cjs/store.js +108 -0
  102. package/lib/cjs/store.js.map +1 -0
  103. package/lib/cjs/timeline.d.ts +48 -0
  104. package/lib/cjs/timeline.d.ts.map +1 -0
  105. package/lib/cjs/timeline.js +70 -0
  106. package/lib/cjs/timeline.js.map +1 -0
  107. package/lib/mjs/InMemoryPerfSink.d.ts +51 -0
  108. package/lib/mjs/InMemoryPerfSink.d.ts.map +1 -0
  109. package/lib/mjs/InMemoryPerfSink.js +97 -0
  110. package/lib/mjs/InMemoryPerfSink.js.map +1 -0
  111. package/lib/mjs/PromMetricSink.d.ts +26 -0
  112. package/lib/mjs/PromMetricSink.d.ts.map +1 -0
  113. package/lib/mjs/PromMetricSink.js +65 -0
  114. package/lib/mjs/PromMetricSink.js.map +1 -0
  115. package/lib/mjs/bootstrap.d.ts +13 -0
  116. package/lib/mjs/bootstrap.d.ts.map +1 -0
  117. package/lib/mjs/bootstrap.js +54 -0
  118. package/lib/mjs/bootstrap.js.map +1 -0
  119. package/lib/mjs/config/telemetry.d.ts +63 -0
  120. package/lib/mjs/config/telemetry.d.ts.map +1 -0
  121. package/lib/mjs/config/telemetry.js +76 -0
  122. package/lib/mjs/config/telemetry.js.map +1 -0
  123. package/lib/mjs/controllers/Metrics.d.ts +26 -0
  124. package/lib/mjs/controllers/Metrics.d.ts.map +1 -0
  125. package/lib/mjs/controllers/Metrics.js +60 -0
  126. package/lib/mjs/controllers/Metrics.js.map +1 -0
  127. package/lib/mjs/controllers/Telemetry.d.ts +92 -0
  128. package/lib/mjs/controllers/Telemetry.d.ts.map +1 -0
  129. package/lib/mjs/controllers/Telemetry.js +223 -0
  130. package/lib/mjs/controllers/Telemetry.js.map +1 -0
  131. package/lib/mjs/dto/index.d.ts +21 -0
  132. package/lib/mjs/dto/index.d.ts.map +1 -0
  133. package/lib/mjs/dto/index.js +58 -0
  134. package/lib/mjs/dto/index.js.map +1 -0
  135. package/lib/mjs/endpoints.d.ts +32 -0
  136. package/lib/mjs/endpoints.d.ts.map +1 -0
  137. package/lib/mjs/endpoints.js +34 -0
  138. package/lib/mjs/endpoints.js.map +1 -0
  139. package/lib/mjs/health.d.ts +55 -0
  140. package/lib/mjs/health.d.ts.map +1 -0
  141. package/lib/mjs/health.js +107 -0
  142. package/lib/mjs/health.js.map +1 -0
  143. package/lib/mjs/index.d.ts +16 -0
  144. package/lib/mjs/index.d.ts.map +1 -0
  145. package/lib/mjs/index.js +16 -0
  146. package/lib/mjs/index.js.map +1 -0
  147. package/lib/mjs/metrics.d.ts +16 -0
  148. package/lib/mjs/metrics.d.ts.map +1 -0
  149. package/lib/mjs/metrics.js +16 -0
  150. package/lib/mjs/metrics.js.map +1 -0
  151. package/lib/mjs/middleware.d.ts +81 -0
  152. package/lib/mjs/middleware.d.ts.map +1 -0
  153. package/lib/mjs/middleware.js +207 -0
  154. package/lib/mjs/middleware.js.map +1 -0
  155. package/lib/mjs/package.json +1 -0
  156. package/lib/mjs/policies/PublicPolicy.d.ts +16 -0
  157. package/lib/mjs/policies/PublicPolicy.d.ts.map +1 -0
  158. package/lib/mjs/policies/PublicPolicy.js +31 -0
  159. package/lib/mjs/policies/PublicPolicy.js.map +1 -0
  160. package/lib/mjs/policies/TelemetryTokenPolicy.d.ts +19 -0
  161. package/lib/mjs/policies/TelemetryTokenPolicy.d.ts.map +1 -0
  162. package/lib/mjs/policies/TelemetryTokenPolicy.js +62 -0
  163. package/lib/mjs/policies/TelemetryTokenPolicy.js.map +1 -0
  164. package/lib/mjs/requestStats.d.ts +81 -0
  165. package/lib/mjs/requestStats.d.ts.map +1 -0
  166. package/lib/mjs/requestStats.js +130 -0
  167. package/lib/mjs/requestStats.js.map +1 -0
  168. package/lib/mjs/responses.d.ts +23 -0
  169. package/lib/mjs/responses.d.ts.map +1 -0
  170. package/lib/mjs/responses.js +30 -0
  171. package/lib/mjs/responses.js.map +1 -0
  172. package/lib/mjs/routeStats.d.ts +43 -0
  173. package/lib/mjs/routeStats.d.ts.map +1 -0
  174. package/lib/mjs/routeStats.js +55 -0
  175. package/lib/mjs/routeStats.js.map +1 -0
  176. package/lib/mjs/schemas/HealthResponse.schema.d.ts +30 -0
  177. package/lib/mjs/schemas/HealthResponse.schema.d.ts.map +1 -0
  178. package/lib/mjs/schemas/HealthResponse.schema.js +13 -0
  179. package/lib/mjs/schemas/HealthResponse.schema.js.map +1 -0
  180. package/lib/mjs/schemas/PerfResponse.schema.d.ts +56 -0
  181. package/lib/mjs/schemas/PerfResponse.schema.d.ts.map +1 -0
  182. package/lib/mjs/schemas/PerfResponse.schema.js +34 -0
  183. package/lib/mjs/schemas/PerfResponse.schema.js.map +1 -0
  184. package/lib/mjs/schemas/ReadyResponse.schema.d.ts +36 -0
  185. package/lib/mjs/schemas/ReadyResponse.schema.d.ts.map +1 -0
  186. package/lib/mjs/schemas/ReadyResponse.schema.js +21 -0
  187. package/lib/mjs/schemas/ReadyResponse.schema.js.map +1 -0
  188. package/lib/mjs/schemas/RequestStatsSnapshot.schema.d.ts +79 -0
  189. package/lib/mjs/schemas/RequestStatsSnapshot.schema.d.ts.map +1 -0
  190. package/lib/mjs/schemas/RequestStatsSnapshot.schema.js +28 -0
  191. package/lib/mjs/schemas/RequestStatsSnapshot.schema.js.map +1 -0
  192. package/lib/mjs/schemas/RoutesResponse.schema.d.ts +100 -0
  193. package/lib/mjs/schemas/RoutesResponse.schema.d.ts.map +1 -0
  194. package/lib/mjs/schemas/RoutesResponse.schema.js +20 -0
  195. package/lib/mjs/schemas/RoutesResponse.schema.js.map +1 -0
  196. package/lib/mjs/schemas/StatsResponse.schema.d.ts +158 -0
  197. package/lib/mjs/schemas/StatsResponse.schema.d.ts.map +1 -0
  198. package/lib/mjs/schemas/StatsResponse.schema.js +14 -0
  199. package/lib/mjs/schemas/StatsResponse.schema.js.map +1 -0
  200. package/lib/mjs/schemas/TimelineResponse.schema.d.ts +109 -0
  201. package/lib/mjs/schemas/TimelineResponse.schema.d.ts.map +1 -0
  202. package/lib/mjs/schemas/TimelineResponse.schema.js +23 -0
  203. package/lib/mjs/schemas/TimelineResponse.schema.js.map +1 -0
  204. package/lib/mjs/store.d.ts +58 -0
  205. package/lib/mjs/store.d.ts.map +1 -0
  206. package/lib/mjs/store.js +105 -0
  207. package/lib/mjs/store.js.map +1 -0
  208. package/lib/mjs/timeline.d.ts +48 -0
  209. package/lib/mjs/timeline.d.ts.map +1 -0
  210. package/lib/mjs/timeline.js +66 -0
  211. package/lib/mjs/timeline.js.map +1 -0
  212. package/lib/tsconfig.cjs.tsbuildinfo +1 -0
  213. package/lib/tsconfig.mjs.tsbuildinfo +1 -0
  214. package/package.json +69 -0
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestStats = void 0;
4
+ const DEFAULT_APDEX_THRESHOLD_MS = 25;
5
+ /**
6
+ * Port of swagger-stats' `swsReqResStats` — accumulates request/response
7
+ * counters, response-time aggregates ( total / max / min / avg ), an Apdex
8
+ * score, and request/error rates over its lifetime.
9
+ *
10
+ * Pure and dependency-free; time is always passed in so it is deterministic.
11
+ */
12
+ class RequestStats {
13
+ constructor(apdexThreshold = DEFAULT_APDEX_THRESHOLD_MS) {
14
+ // request/response counters
15
+ this.requests = 0;
16
+ this.responses = 0;
17
+ this.errors = 0;
18
+ // status-class counters
19
+ this.info = 0;
20
+ this.success = 0;
21
+ this.redirect = 0;
22
+ this.client_error = 0;
23
+ this.server_error = 0;
24
+ // response-time aggregates ( ms )
25
+ this.totalTime = 0;
26
+ this.maxTime = 0;
27
+ this.minTime = 0;
28
+ this.avgTime = 0;
29
+ // apdex accumulators
30
+ this.apdexSatisfied = 0;
31
+ this.apdexTolerated = 0;
32
+ // rates ( per second )
33
+ this.reqRate = 0;
34
+ this.errRate = 0;
35
+ this.apdexThreshold = apdexThreshold;
36
+ }
37
+ /**
38
+ * Count an inbound request ( before the response is known ).
39
+ */
40
+ countRequest() {
41
+ this.requests += 1;
42
+ }
43
+ /**
44
+ * Count a completed response, updating status-class counters, response-time
45
+ * aggregates and Apdex.
46
+ *
47
+ * @param statusCode - the HTTP status code of the response
48
+ * @param durationMs - the request duration in milliseconds
49
+ */
50
+ countResponse(statusCode, durationMs) {
51
+ this.responses += 1;
52
+ // status class counters
53
+ if (statusCode >= 100 && statusCode < 200)
54
+ this.info += 1;
55
+ else if (statusCode >= 200 && statusCode < 300)
56
+ this.success += 1;
57
+ else if (statusCode >= 300 && statusCode < 400)
58
+ this.redirect += 1;
59
+ else if (statusCode >= 400 && statusCode < 500)
60
+ this.client_error += 1;
61
+ else if (statusCode >= 500)
62
+ this.server_error += 1;
63
+ const isError = statusCode >= 400;
64
+ if (isError)
65
+ this.errors += 1;
66
+ // response-time aggregates
67
+ this.totalTime += durationMs;
68
+ if (durationMs > this.maxTime)
69
+ this.maxTime = durationMs;
70
+ if (this.minTime === 0 || durationMs < this.minTime)
71
+ this.minTime = durationMs;
72
+ this.avgTime = this.responses > 0 ? this.totalTime / this.responses : 0;
73
+ // Apdex — a "satisfactory" response is a non-error ( < 500 and not a
74
+ // client/server error ). swagger-stats treats any error ( 4xx/5xx ) as
75
+ // frustrating, so only 1xx/2xx/3xx responses can be satisfied/tolerated.
76
+ const satisfactory = !isError;
77
+ if (satisfactory) {
78
+ if (durationMs <= this.apdexThreshold)
79
+ this.apdexSatisfied += 1;
80
+ else if (durationMs <= 4 * this.apdexThreshold)
81
+ this.apdexTolerated += 1;
82
+ }
83
+ }
84
+ /**
85
+ * The current Apdex score: `(satisfied + tolerated/2) / responses`.
86
+ * Returns 0 when there are no responses yet.
87
+ */
88
+ apdex() {
89
+ if (this.responses === 0)
90
+ return 0;
91
+ return (this.apdexSatisfied + this.apdexTolerated / 2) / this.responses;
92
+ }
93
+ /**
94
+ * Recompute request/error rates ( per second ) over an elapsed window.
95
+ *
96
+ * @param elapsedMs - the width of the window in milliseconds
97
+ */
98
+ updateRates(elapsedMs) {
99
+ if (elapsedMs <= 0) {
100
+ this.reqRate = 0;
101
+ this.errRate = 0;
102
+ return;
103
+ }
104
+ const seconds = elapsedMs / 1000;
105
+ this.reqRate = this.requests / seconds;
106
+ this.errRate = this.errors / seconds;
107
+ }
108
+ /**
109
+ * A plain-object snapshot of the current stats.
110
+ */
111
+ toJSON() {
112
+ return {
113
+ requests: this.requests,
114
+ responses: this.responses,
115
+ errors: this.errors,
116
+ info: this.info,
117
+ success: this.success,
118
+ redirect: this.redirect,
119
+ client_error: this.client_error,
120
+ server_error: this.server_error,
121
+ total_time: this.totalTime,
122
+ max_time: this.maxTime,
123
+ min_time: this.minTime,
124
+ avg_time: this.avgTime,
125
+ apdex_satisfied: this.apdexSatisfied,
126
+ apdex_tolerated: this.apdexTolerated,
127
+ apdex_score: this.apdex(),
128
+ req_rate: this.reqRate,
129
+ err_rate: this.errRate,
130
+ };
131
+ }
132
+ }
133
+ exports.RequestStats = RequestStats;
134
+ //# sourceMappingURL=requestStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestStats.js","sourceRoot":"","sources":["../../src/requestStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import * as express from 'express';
2
+ import { Response, HTTP_STATUS_CODE } from '@spinajs/http';
3
+ import { Metrics } from './metrics.js';
4
+ /**
5
+ * Writes prometheus exposition text with the registry's own content type.
6
+ * Bypasses the json/pug response pipeline entirely — a scrape endpoint has
7
+ * exactly one representation.
8
+ */
9
+ export declare class PrometheusResponse extends Response {
10
+ protected metrics: Metrics;
11
+ constructor(metrics: Metrics);
12
+ execute(_req: express.Request, res: express.Response): Promise<void>;
13
+ }
14
+ /**
15
+ * HTTP 503. Needed because `Response.execute` overwrites any `StatusCode` given
16
+ * through `IResponseOptions` with the class's own `_errorCode`, so
17
+ * `new Ok( body, { StatusCode: 503 } )` silently returns 200.
18
+ */
19
+ export declare class ServiceUnavailable<T = any> extends Response<T> {
20
+ protected _errorCode: HTTP_STATUS_CODE;
21
+ protected _template: string;
22
+ }
23
+ //# sourceMappingURL=responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IAClC,SAAS,CAAC,OAAO,EAAE,OAAO;gBAAhB,OAAO,EAAE,OAAO;IAIzB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ;CAMlE;AAED;;;;GAIG;AACH,qBAAa,kBAAkB,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC1D,SAAS,CAAC,UAAU,mBAAwC;IAC5D,SAAS,CAAC,SAAS,SAAqB;CACzC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceUnavailable = exports.PrometheusResponse = void 0;
4
+ const http_1 = require("@spinajs/http");
5
+ /**
6
+ * Writes prometheus exposition text with the registry's own content type.
7
+ * Bypasses the json/pug response pipeline entirely — a scrape endpoint has
8
+ * exactly one representation.
9
+ */
10
+ class PrometheusResponse extends http_1.Response {
11
+ constructor(metrics) {
12
+ super(null);
13
+ this.metrics = metrics;
14
+ }
15
+ async execute(_req, res) {
16
+ const result = await this.metrics.render();
17
+ res.contentType(this.metrics.contentType());
18
+ res.end(result);
19
+ }
20
+ }
21
+ exports.PrometheusResponse = PrometheusResponse;
22
+ /**
23
+ * HTTP 503. Needed because `Response.execute` overwrites any `StatusCode` given
24
+ * through `IResponseOptions` with the class's own `_errorCode`, so
25
+ * `new Ok( body, { StatusCode: 503 } )` silently returns 200.
26
+ */
27
+ class ServiceUnavailable extends http_1.Response {
28
+ constructor() {
29
+ super(...arguments);
30
+ this._errorCode = http_1.HTTP_STATUS_CODE.SERVICE_UNAVAILABLE;
31
+ this._template = 'serverError.pug';
32
+ }
33
+ }
34
+ exports.ServiceUnavailable = ServiceUnavailable;
35
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":";;;AACA,wCAA2D;AAI3D;;;;GAIG;AACH,MAAa,kBAAmB,SAAQ,eAAQ;IAC9C,YAAsB,OAAgB;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC;QADQ,YAAO,GAAP,OAAO,CAAS;IAEtC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,GAAqB;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAE3C,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;CACF;AAXD,gDAWC;AAED;;;;GAIG;AACH,MAAa,kBAA4B,SAAQ,eAAW;IAA5D;;QACY,eAAU,GAAG,uBAAgB,CAAC,mBAAmB,CAAC;QAClD,cAAS,GAAG,iBAAiB,CAAC;IAC1C,CAAC;CAAA;AAHD,gDAGC"}
@@ -0,0 +1,43 @@
1
+ import { IRequestStatsSnapshot } from './requestStats.js';
2
+ /**
3
+ * One row of the per-route breakdown.
4
+ */
5
+ export interface IRouteStatsEntry {
6
+ method: string;
7
+ route: string;
8
+ stats: IRequestStatsSnapshot;
9
+ }
10
+ /**
11
+ * Serializable snapshot of {@link RouteStats}.
12
+ */
13
+ export interface IRouteStatsSnapshot {
14
+ /** True once the entry cap was hit and new routes stopped being tracked. */
15
+ truncated: boolean;
16
+ routes: IRouteStatsEntry[];
17
+ }
18
+ /**
19
+ * A bounded `method + route -> RequestStats` map.
20
+ *
21
+ * The bound is not optional. The telemetry middleware falls back to the raw
22
+ * request path when no route matched, so an unbounded map would grow one entry
23
+ * per distinct URL a 404-scanning bot tries.
24
+ */
25
+ export declare class RouteStats {
26
+ readonly maxEntries: number;
27
+ readonly apdexThreshold: number;
28
+ private entries;
29
+ private truncated;
30
+ constructor(maxEntries: number, apdexThreshold: number);
31
+ /**
32
+ * True once at least one route was dropped because the cap was reached.
33
+ */
34
+ get Truncated(): boolean;
35
+ /**
36
+ * Record one completed response. A new method+route key is only created while
37
+ * under `maxEntries`; past that, known routes keep accumulating and unknown
38
+ * ones are dropped.
39
+ */
40
+ record(method: string, route: string, statusCode: number, durationMs: number): void;
41
+ toJSON(): IRouteStatsSnapshot;
42
+ }
43
+ //# sourceMappingURL=routeStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeStats.d.ts","sourceRoot":"","sources":["../../src/routeStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAgB,MAAM,mBAAmB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAID;;;;;;GAMG;AACH,qBAAa,UAAU;aAIO,UAAU,EAAE,MAAM;aAAkB,cAAc,EAAE,MAAM;IAHtF,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAS;gBAEE,UAAU,EAAE,MAAM,EAAkB,cAAc,EAAE,MAAM;IAEtF;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;;OAIG;IACI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAiBnF,MAAM,IAAI,mBAAmB;CAcrC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteStats = void 0;
4
+ const requestStats_js_1 = require("./requestStats.js");
5
+ const KEY_SEPARATOR = ' ';
6
+ /**
7
+ * A bounded `method + route -> RequestStats` map.
8
+ *
9
+ * The bound is not optional. The telemetry middleware falls back to the raw
10
+ * request path when no route matched, so an unbounded map would grow one entry
11
+ * per distinct URL a 404-scanning bot tries.
12
+ */
13
+ class RouteStats {
14
+ constructor(maxEntries, apdexThreshold) {
15
+ this.maxEntries = maxEntries;
16
+ this.apdexThreshold = apdexThreshold;
17
+ this.entries = new Map();
18
+ this.truncated = false;
19
+ }
20
+ /**
21
+ * True once at least one route was dropped because the cap was reached.
22
+ */
23
+ get Truncated() {
24
+ return this.truncated;
25
+ }
26
+ /**
27
+ * Record one completed response. A new method+route key is only created while
28
+ * under `maxEntries`; past that, known routes keep accumulating and unknown
29
+ * ones are dropped.
30
+ */
31
+ record(method, route, statusCode, durationMs) {
32
+ const key = `${method}${KEY_SEPARATOR}${route}`;
33
+ let stats = this.entries.get(key);
34
+ if (!stats) {
35
+ if (this.entries.size >= this.maxEntries) {
36
+ this.truncated = true;
37
+ return;
38
+ }
39
+ stats = new requestStats_js_1.RequestStats(this.apdexThreshold);
40
+ this.entries.set(key, stats);
41
+ }
42
+ stats.countRequest();
43
+ stats.countResponse(statusCode, durationMs);
44
+ }
45
+ toJSON() {
46
+ const routes = [];
47
+ for (const [key, stats] of this.entries) {
48
+ const separator = key.indexOf(KEY_SEPARATOR);
49
+ routes.push({
50
+ method: key.substring(0, separator),
51
+ route: key.substring(separator + 1),
52
+ stats: stats.toJSON(),
53
+ });
54
+ }
55
+ return { truncated: this.truncated, routes };
56
+ }
57
+ }
58
+ exports.RouteStats = RouteStats;
59
+ //# sourceMappingURL=routeStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeStats.js","sourceRoot":"","sources":["../../src/routeStats.ts"],"names":[],"mappings":";;;AAAA,uDAAwE;AAoBxE,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B;;;;;;GAMG;AACH,MAAa,UAAU;IAIrB,YAA4B,UAAkB,EAAkB,cAAsB;QAA1D,eAAU,GAAV,UAAU,CAAQ;QAAkB,mBAAc,GAAd,cAAc,CAAQ;QAH9E,YAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC1C,cAAS,GAAG,KAAK,CAAC;IAE+D,CAAC;IAE1F;;OAEG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,MAAc,EAAE,KAAa,EAAE,UAAkB,EAAE,UAAkB;QACjF,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,EAAE,CAAC;QAEhD,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,KAAK,GAAG,IAAI,8BAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAEM,MAAM;QACX,MAAM,MAAM,GAAuB,EAAE,CAAC;QAEtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;gBACnC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC;CACF;AAjDD,gCAiDC"}
@@ -0,0 +1,30 @@
1
+ declare const HealthResponseSchema: {
2
+ type: string;
3
+ properties: {
4
+ status: {
5
+ type: string;
6
+ enum: string[];
7
+ description: string;
8
+ };
9
+ startedAt: {
10
+ type: string;
11
+ description: string;
12
+ };
13
+ uptimeMs: {
14
+ type: string;
15
+ };
16
+ pid: {
17
+ type: string;
18
+ };
19
+ version: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ node: {
24
+ type: string;
25
+ description: string;
26
+ };
27
+ };
28
+ };
29
+ export default HealthResponseSchema;
30
+ //# sourceMappingURL=HealthResponse.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthResponse.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/HealthResponse.schema.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUzB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const HealthResponseSchema = {
4
+ type: 'object',
5
+ properties: {
6
+ status: { type: 'string', enum: ['up'], description: 'Always "up" — this endpoint runs no checks' },
7
+ startedAt: { type: 'number', description: 'Process start, epoch ms' },
8
+ uptimeMs: { type: 'number' },
9
+ pid: { type: 'number' },
10
+ version: { type: 'string', description: 'telemetry.health.version; omitted when unset' },
11
+ node: { type: 'string', description: 'Node runtime version' },
12
+ },
13
+ };
14
+ exports.default = HealthResponseSchema;
15
+ //# sourceMappingURL=HealthResponse.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthResponse.schema.js","sourceRoot":"","sources":["../../../src/schemas/HealthResponse.schema.ts"],"names":[],"mappings":";;AAAA,MAAM,oBAAoB,GAAG;IAC3B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,4CAA4C,EAAE;QACnG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACrE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;QACxF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;KAC9D;CACF,CAAC;AAEF,kBAAe,oBAAoB,CAAC"}
@@ -0,0 +1,56 @@
1
+ declare const PerfResponseSchema: {
2
+ type: string;
3
+ properties: {
4
+ truncated: {
5
+ type: string;
6
+ description: string;
7
+ };
8
+ spans: {
9
+ type: string;
10
+ description: string;
11
+ items: {
12
+ type: string;
13
+ properties: {
14
+ name: {
15
+ type: string;
16
+ description: string;
17
+ };
18
+ count: {
19
+ type: string;
20
+ };
21
+ totalMs: {
22
+ type: string;
23
+ };
24
+ avgMs: {
25
+ type: string;
26
+ };
27
+ maxMs: {
28
+ type: string;
29
+ };
30
+ };
31
+ };
32
+ };
33
+ events: {
34
+ type: string;
35
+ description: string;
36
+ items: {
37
+ type: string;
38
+ properties: {
39
+ name: {
40
+ type: string;
41
+ };
42
+ count: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ total: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ };
51
+ };
52
+ };
53
+ };
54
+ };
55
+ export default PerfResponseSchema;
56
+ //# sourceMappingURL=PerfResponse.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerfResponse.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/PerfResponse.schema.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BvB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const PerfResponseSchema = {
4
+ type: 'object',
5
+ properties: {
6
+ truncated: { type: 'boolean', description: 'True once the measurement-name cap was hit' },
7
+ spans: {
8
+ type: 'array',
9
+ description: 'Timed spans, slowest total first',
10
+ items: {
11
+ type: 'object',
12
+ properties: {
13
+ name: { type: 'string', description: 'Measurement name, eg. orm.query' },
14
+ count: { type: 'number' },
15
+ totalMs: { type: 'number' },
16
+ avgMs: { type: 'number' },
17
+ maxMs: { type: 'number' },
18
+ },
19
+ },
20
+ },
21
+ events: {
22
+ type: 'array',
23
+ description: 'Counter and value events, largest total first',
24
+ items: {
25
+ type: 'object',
26
+ properties: {
27
+ name: { type: 'string' },
28
+ count: { type: 'number', description: 'Number of emissions' },
29
+ total: { type: 'number', description: 'Summed value across emissions' },
30
+ },
31
+ },
32
+ },
33
+ },
34
+ };
35
+ exports.default = PerfResponseSchema;
36
+ //# sourceMappingURL=PerfResponse.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerfResponse.schema.js","sourceRoot":"","sources":["../../../src/schemas/PerfResponse.schema.ts"],"names":[],"mappings":";;AAAA,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4CAA4C,EAAE;QACzF,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;oBACxE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;aACF;SACF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,+CAA+C;YAC5D,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;oBAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;iBACxE;aACF;SACF;KACF;CACF,CAAC;AAEF,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,36 @@
1
+ declare const ReadyResponseSchema: {
2
+ type: string;
3
+ properties: {
4
+ status: {
5
+ type: string;
6
+ enum: string[];
7
+ description: string;
8
+ };
9
+ checks: {
10
+ type: string;
11
+ items: {
12
+ type: string;
13
+ properties: {
14
+ name: {
15
+ type: string;
16
+ };
17
+ status: {
18
+ type: string;
19
+ enum: string[];
20
+ };
21
+ durationMs: {
22
+ type: string;
23
+ };
24
+ message: {
25
+ type: string;
26
+ };
27
+ data: {
28
+ type: string;
29
+ };
30
+ };
31
+ };
32
+ };
33
+ };
34
+ };
35
+ export default ReadyResponseSchema;
36
+ //# sourceMappingURL=ReadyResponse.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadyResponse.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/ReadyResponse.schema.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBxB,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ReadyResponseSchema = {
4
+ type: 'object',
5
+ properties: {
6
+ status: { type: 'string', enum: ['up', 'degraded', 'down'], description: 'Worst status across all checks' },
7
+ checks: {
8
+ type: 'array',
9
+ items: {
10
+ type: 'object',
11
+ properties: {
12
+ name: { type: 'string' },
13
+ status: { type: 'string', enum: ['up', 'degraded', 'down'] },
14
+ durationMs: { type: 'number' },
15
+ message: { type: 'string' },
16
+ data: { type: 'object' },
17
+ },
18
+ },
19
+ },
20
+ },
21
+ };
22
+ exports.default = ReadyResponseSchema;
23
+ //# sourceMappingURL=ReadyResponse.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadyResponse.schema.js","sourceRoot":"","sources":["../../../src/schemas/ReadyResponse.schema.ts"],"names":[],"mappings":";;AAAA,MAAM,mBAAmB,GAAG;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QAC3G,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;oBAC5D,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACzB;aACF;SACF;KACF;CACF,CAAC;AAEF,kBAAe,mBAAmB,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Shape of `IRequestStatsSnapshot`. Reused by the stats, timeline and routes
3
+ * responses, so it is declared once and spread into each.
4
+ */
5
+ declare const RequestStatsSnapshotSchema: {
6
+ type: string;
7
+ properties: {
8
+ requests: {
9
+ type: string;
10
+ description: string;
11
+ };
12
+ responses: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ errors: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ info: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ success: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ redirect: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ client_error: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ server_error: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ total_time: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ max_time: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ min_time: {
49
+ type: string;
50
+ description: string;
51
+ };
52
+ avg_time: {
53
+ type: string;
54
+ description: string;
55
+ };
56
+ apdex_satisfied: {
57
+ type: string;
58
+ description: string;
59
+ };
60
+ apdex_tolerated: {
61
+ type: string;
62
+ description: string;
63
+ };
64
+ apdex_score: {
65
+ type: string;
66
+ description: string;
67
+ };
68
+ req_rate: {
69
+ type: string;
70
+ description: string;
71
+ };
72
+ err_rate: {
73
+ type: string;
74
+ description: string;
75
+ };
76
+ };
77
+ };
78
+ export default RequestStatsSnapshotSchema;
79
+ //# sourceMappingURL=RequestStatsSnapshot.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestStatsSnapshot.schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/RequestStatsSnapshot.schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyB/B,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Shape of `IRequestStatsSnapshot`. Reused by the stats, timeline and routes
5
+ * responses, so it is declared once and spread into each.
6
+ */
7
+ const RequestStatsSnapshotSchema = {
8
+ type: 'object',
9
+ properties: {
10
+ requests: { type: 'number', description: 'Requests counted' },
11
+ responses: { type: 'number', description: 'Responses counted' },
12
+ errors: { type: 'number', description: 'Responses with status >= 400' },
13
+ info: { type: 'number', description: '1xx responses' },
14
+ success: { type: 'number', description: '2xx responses' },
15
+ redirect: { type: 'number', description: '3xx responses' },
16
+ client_error: { type: 'number', description: '4xx responses' },
17
+ server_error: { type: 'number', description: '5xx responses' },
18
+ total_time: { type: 'number', description: 'Summed response time in ms' },
19
+ max_time: { type: 'number', description: 'Slowest response in ms' },
20
+ min_time: { type: 'number', description: 'Fastest response in ms' },
21
+ avg_time: { type: 'number', description: 'Mean response time in ms' },
22
+ apdex_satisfied: { type: 'number', description: 'Responses within the apdex threshold' },
23
+ apdex_tolerated: { type: 'number', description: 'Responses within 4x the apdex threshold' },
24
+ apdex_score: { type: 'number', description: '( satisfied + tolerated / 2 ) / responses' },
25
+ req_rate: { type: 'number', description: 'Requests per second over the window' },
26
+ err_rate: { type: 'number', description: 'Errors per second over the window' },
27
+ },
28
+ };
29
+ exports.default = RequestStatsSnapshotSchema;
30
+ //# sourceMappingURL=RequestStatsSnapshot.schema.js.map