@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 @@
1
+ {"version":3,"file":"TelemetryTokenPolicy.js","sourceRoot":"","sources":["../../../src/policies/TelemetryTokenPolicy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAgC,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;GAOG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,UAAU;IAA7C;;QAUK,uBAAkB,GAAG,iBAAiB,CAAC;IAsBnD,CAAC;IApBQ,SAAS,CAAC,OAAe,EAAE,SAAsB;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAY;QAC/B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,IAAI,CAAC,kBAAkB,uCAAuC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACxJ,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,IAAI,CAAC,kBAAkB,uCAAuC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAClJ,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF,CAAA;AA9BW;IADT,MAAM,CAAC,UAAU,CAAC;8BACJ,GAAG;iDAAC;AAGT;IADT,MAAM,CAAC,sBAAsB,CAAC;;mDACP;AAGd;IADT,MAAM,CAAC,6BAA6B,CAAC;;mDACb;AARd,oBAAoB;IADhC,UAAU,CAAC,UAAU,CAAC;GACV,oBAAoB,CAgChC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Serializable snapshot of {@link RequestStats}.
3
+ */
4
+ export interface IRequestStatsSnapshot {
5
+ requests: number;
6
+ responses: number;
7
+ errors: number;
8
+ info: number;
9
+ success: number;
10
+ redirect: number;
11
+ client_error: number;
12
+ server_error: number;
13
+ total_time: number;
14
+ max_time: number;
15
+ min_time: number;
16
+ avg_time: number;
17
+ apdex_satisfied: number;
18
+ apdex_tolerated: number;
19
+ apdex_score: number;
20
+ req_rate: number;
21
+ err_rate: number;
22
+ }
23
+ /**
24
+ * Port of swagger-stats' `swsReqResStats` — accumulates request/response
25
+ * counters, response-time aggregates ( total / max / min / avg ), an Apdex
26
+ * score, and request/error rates over its lifetime.
27
+ *
28
+ * Pure and dependency-free; time is always passed in so it is deterministic.
29
+ */
30
+ export declare class RequestStats {
31
+ /**
32
+ * Apdex satisfied-response threshold, in milliseconds. Responses up to
33
+ * `4 * threshold` are "tolerated".
34
+ */
35
+ readonly apdexThreshold: number;
36
+ requests: number;
37
+ responses: number;
38
+ errors: number;
39
+ info: number;
40
+ success: number;
41
+ redirect: number;
42
+ client_error: number;
43
+ server_error: number;
44
+ totalTime: number;
45
+ maxTime: number;
46
+ minTime: number;
47
+ avgTime: number;
48
+ apdexSatisfied: number;
49
+ apdexTolerated: number;
50
+ reqRate: number;
51
+ errRate: number;
52
+ constructor(apdexThreshold?: number);
53
+ /**
54
+ * Count an inbound request ( before the response is known ).
55
+ */
56
+ countRequest(): void;
57
+ /**
58
+ * Count a completed response, updating status-class counters, response-time
59
+ * aggregates and Apdex.
60
+ *
61
+ * @param statusCode - the HTTP status code of the response
62
+ * @param durationMs - the request duration in milliseconds
63
+ */
64
+ countResponse(statusCode: number, durationMs: number): void;
65
+ /**
66
+ * The current Apdex score: `(satisfied + tolerated/2) / responses`.
67
+ * Returns 0 when there are no responses yet.
68
+ */
69
+ apdex(): number;
70
+ /**
71
+ * Recompute request/error rates ( per second ) over an elapsed window.
72
+ *
73
+ * @param elapsedMs - the width of the window in milliseconds
74
+ */
75
+ updateRates(elapsedMs: number): void;
76
+ /**
77
+ * A plain-object snapshot of the current stats.
78
+ */
79
+ toJSON(): IRequestStatsSnapshot;
80
+ }
81
+ //# sourceMappingURL=requestStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestStats.d.ts","sourceRoot":"","sources":["../../src/requestStats.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACH,SAAgB,cAAc,EAAE,MAAM,CAAC;IAGhC,QAAQ,SAAK;IACb,SAAS,SAAK;IACd,MAAM,SAAK;IAGX,IAAI,SAAK;IACT,OAAO,SAAK;IACZ,QAAQ,SAAK;IACb,YAAY,SAAK;IACjB,YAAY,SAAK;IAGjB,SAAS,SAAK;IACd,OAAO,SAAK;IACZ,OAAO,SAAK;IACZ,OAAO,SAAK;IAGZ,cAAc,SAAK;IACnB,cAAc,SAAK;IAGnB,OAAO,SAAK;IACZ,OAAO,SAAK;gBAEP,cAAc,GAAE,MAAmC;IAI/D;;OAEG;IACI,YAAY,IAAI,IAAI;IAI3B;;;;;;OAMG;IACI,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA6BlE;;;OAGG;IACI,KAAK,IAAI,MAAM;IAKtB;;;;OAIG;IACI,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAW3C;;OAEG;IACI,MAAM,IAAI,qBAAqB;CAyBvC"}
@@ -0,0 +1,130 @@
1
+ const DEFAULT_APDEX_THRESHOLD_MS = 25;
2
+ /**
3
+ * Port of swagger-stats' `swsReqResStats` — accumulates request/response
4
+ * counters, response-time aggregates ( total / max / min / avg ), an Apdex
5
+ * score, and request/error rates over its lifetime.
6
+ *
7
+ * Pure and dependency-free; time is always passed in so it is deterministic.
8
+ */
9
+ export class RequestStats {
10
+ constructor(apdexThreshold = DEFAULT_APDEX_THRESHOLD_MS) {
11
+ // request/response counters
12
+ this.requests = 0;
13
+ this.responses = 0;
14
+ this.errors = 0;
15
+ // status-class counters
16
+ this.info = 0;
17
+ this.success = 0;
18
+ this.redirect = 0;
19
+ this.client_error = 0;
20
+ this.server_error = 0;
21
+ // response-time aggregates ( ms )
22
+ this.totalTime = 0;
23
+ this.maxTime = 0;
24
+ this.minTime = 0;
25
+ this.avgTime = 0;
26
+ // apdex accumulators
27
+ this.apdexSatisfied = 0;
28
+ this.apdexTolerated = 0;
29
+ // rates ( per second )
30
+ this.reqRate = 0;
31
+ this.errRate = 0;
32
+ this.apdexThreshold = apdexThreshold;
33
+ }
34
+ /**
35
+ * Count an inbound request ( before the response is known ).
36
+ */
37
+ countRequest() {
38
+ this.requests += 1;
39
+ }
40
+ /**
41
+ * Count a completed response, updating status-class counters, response-time
42
+ * aggregates and Apdex.
43
+ *
44
+ * @param statusCode - the HTTP status code of the response
45
+ * @param durationMs - the request duration in milliseconds
46
+ */
47
+ countResponse(statusCode, durationMs) {
48
+ this.responses += 1;
49
+ // status class counters
50
+ if (statusCode >= 100 && statusCode < 200)
51
+ this.info += 1;
52
+ else if (statusCode >= 200 && statusCode < 300)
53
+ this.success += 1;
54
+ else if (statusCode >= 300 && statusCode < 400)
55
+ this.redirect += 1;
56
+ else if (statusCode >= 400 && statusCode < 500)
57
+ this.client_error += 1;
58
+ else if (statusCode >= 500)
59
+ this.server_error += 1;
60
+ const isError = statusCode >= 400;
61
+ if (isError)
62
+ this.errors += 1;
63
+ // response-time aggregates
64
+ this.totalTime += durationMs;
65
+ if (durationMs > this.maxTime)
66
+ this.maxTime = durationMs;
67
+ if (this.minTime === 0 || durationMs < this.minTime)
68
+ this.minTime = durationMs;
69
+ this.avgTime = this.responses > 0 ? this.totalTime / this.responses : 0;
70
+ // Apdex — a "satisfactory" response is a non-error ( < 500 and not a
71
+ // client/server error ). swagger-stats treats any error ( 4xx/5xx ) as
72
+ // frustrating, so only 1xx/2xx/3xx responses can be satisfied/tolerated.
73
+ const satisfactory = !isError;
74
+ if (satisfactory) {
75
+ if (durationMs <= this.apdexThreshold)
76
+ this.apdexSatisfied += 1;
77
+ else if (durationMs <= 4 * this.apdexThreshold)
78
+ this.apdexTolerated += 1;
79
+ }
80
+ }
81
+ /**
82
+ * The current Apdex score: `(satisfied + tolerated/2) / responses`.
83
+ * Returns 0 when there are no responses yet.
84
+ */
85
+ apdex() {
86
+ if (this.responses === 0)
87
+ return 0;
88
+ return (this.apdexSatisfied + this.apdexTolerated / 2) / this.responses;
89
+ }
90
+ /**
91
+ * Recompute request/error rates ( per second ) over an elapsed window.
92
+ *
93
+ * @param elapsedMs - the width of the window in milliseconds
94
+ */
95
+ updateRates(elapsedMs) {
96
+ if (elapsedMs <= 0) {
97
+ this.reqRate = 0;
98
+ this.errRate = 0;
99
+ return;
100
+ }
101
+ const seconds = elapsedMs / 1000;
102
+ this.reqRate = this.requests / seconds;
103
+ this.errRate = this.errors / seconds;
104
+ }
105
+ /**
106
+ * A plain-object snapshot of the current stats.
107
+ */
108
+ toJSON() {
109
+ return {
110
+ requests: this.requests,
111
+ responses: this.responses,
112
+ errors: this.errors,
113
+ info: this.info,
114
+ success: this.success,
115
+ redirect: this.redirect,
116
+ client_error: this.client_error,
117
+ server_error: this.server_error,
118
+ total_time: this.totalTime,
119
+ max_time: this.maxTime,
120
+ min_time: this.minTime,
121
+ avg_time: this.avgTime,
122
+ apdex_satisfied: this.apdexSatisfied,
123
+ apdex_tolerated: this.apdexTolerated,
124
+ apdex_score: this.apdex(),
125
+ req_rate: this.reqRate,
126
+ err_rate: this.errRate,
127
+ };
128
+ }
129
+ }
130
+ //# 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,30 @@
1
+ import { Response, HTTP_STATUS_CODE } from '@spinajs/http';
2
+ /**
3
+ * Writes prometheus exposition text with the registry's own content type.
4
+ * Bypasses the json/pug response pipeline entirely — a scrape endpoint has
5
+ * exactly one representation.
6
+ */
7
+ export class PrometheusResponse extends Response {
8
+ constructor(metrics) {
9
+ super(null);
10
+ this.metrics = metrics;
11
+ }
12
+ async execute(_req, res) {
13
+ const result = await this.metrics.render();
14
+ res.contentType(this.metrics.contentType());
15
+ res.end(result);
16
+ }
17
+ }
18
+ /**
19
+ * HTTP 503. Needed because `Response.execute` overwrites any `StatusCode` given
20
+ * through `IResponseOptions` with the class's own `_errorCode`, so
21
+ * `new Ok( body, { StatusCode: 503 } )` silently returns 200.
22
+ */
23
+ export class ServiceUnavailable extends Response {
24
+ constructor() {
25
+ super(...arguments);
26
+ this._errorCode = HTTP_STATUS_CODE.SERVICE_UNAVAILABLE;
27
+ this._template = 'serverError.pug';
28
+ }
29
+ }
30
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAI3D;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;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;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAA4B,SAAQ,QAAW;IAA5D;;QACY,eAAU,GAAG,gBAAgB,CAAC,mBAAmB,CAAC;QAClD,cAAS,GAAG,iBAAiB,CAAC;IAC1C,CAAC;CAAA"}
@@ -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,55 @@
1
+ import { RequestStats } from './requestStats.js';
2
+ const KEY_SEPARATOR = ' ';
3
+ /**
4
+ * A bounded `method + route -> RequestStats` map.
5
+ *
6
+ * The bound is not optional. The telemetry middleware falls back to the raw
7
+ * request path when no route matched, so an unbounded map would grow one entry
8
+ * per distinct URL a 404-scanning bot tries.
9
+ */
10
+ export class RouteStats {
11
+ constructor(maxEntries, apdexThreshold) {
12
+ this.maxEntries = maxEntries;
13
+ this.apdexThreshold = apdexThreshold;
14
+ this.entries = new Map();
15
+ this.truncated = false;
16
+ }
17
+ /**
18
+ * True once at least one route was dropped because the cap was reached.
19
+ */
20
+ get Truncated() {
21
+ return this.truncated;
22
+ }
23
+ /**
24
+ * Record one completed response. A new method+route key is only created while
25
+ * under `maxEntries`; past that, known routes keep accumulating and unknown
26
+ * ones are dropped.
27
+ */
28
+ record(method, route, statusCode, durationMs) {
29
+ const key = `${method}${KEY_SEPARATOR}${route}`;
30
+ let stats = this.entries.get(key);
31
+ if (!stats) {
32
+ if (this.entries.size >= this.maxEntries) {
33
+ this.truncated = true;
34
+ return;
35
+ }
36
+ stats = new RequestStats(this.apdexThreshold);
37
+ this.entries.set(key, stats);
38
+ }
39
+ stats.countRequest();
40
+ stats.countResponse(statusCode, durationMs);
41
+ }
42
+ toJSON() {
43
+ const routes = [];
44
+ for (const [key, stats] of this.entries) {
45
+ const separator = key.indexOf(KEY_SEPARATOR);
46
+ routes.push({
47
+ method: key.substring(0, separator),
48
+ route: key.substring(separator + 1),
49
+ stats: stats.toJSON(),
50
+ });
51
+ }
52
+ return { truncated: this.truncated, routes };
53
+ }
54
+ }
55
+ //# sourceMappingURL=routeStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeStats.js","sourceRoot":"","sources":["../../src/routeStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBxE,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,OAAO,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,YAAY,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"}
@@ -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,13 @@
1
+ const HealthResponseSchema = {
2
+ type: 'object',
3
+ properties: {
4
+ status: { type: 'string', enum: ['up'], description: 'Always "up" — this endpoint runs no checks' },
5
+ startedAt: { type: 'number', description: 'Process start, epoch ms' },
6
+ uptimeMs: { type: 'number' },
7
+ pid: { type: 'number' },
8
+ version: { type: 'string', description: 'telemetry.health.version; omitted when unset' },
9
+ node: { type: 'string', description: 'Node runtime version' },
10
+ },
11
+ };
12
+ export default HealthResponseSchema;
13
+ //# 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,eAAe,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,34 @@
1
+ const PerfResponseSchema = {
2
+ type: 'object',
3
+ properties: {
4
+ truncated: { type: 'boolean', description: 'True once the measurement-name cap was hit' },
5
+ spans: {
6
+ type: 'array',
7
+ description: 'Timed spans, slowest total first',
8
+ items: {
9
+ type: 'object',
10
+ properties: {
11
+ name: { type: 'string', description: 'Measurement name, eg. orm.query' },
12
+ count: { type: 'number' },
13
+ totalMs: { type: 'number' },
14
+ avgMs: { type: 'number' },
15
+ maxMs: { type: 'number' },
16
+ },
17
+ },
18
+ },
19
+ events: {
20
+ type: 'array',
21
+ description: 'Counter and value events, largest total first',
22
+ items: {
23
+ type: 'object',
24
+ properties: {
25
+ name: { type: 'string' },
26
+ count: { type: 'number', description: 'Number of emissions' },
27
+ total: { type: 'number', description: 'Summed value across emissions' },
28
+ },
29
+ },
30
+ },
31
+ },
32
+ };
33
+ export default PerfResponseSchema;
34
+ //# 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,eAAe,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,21 @@
1
+ const ReadyResponseSchema = {
2
+ type: 'object',
3
+ properties: {
4
+ status: { type: 'string', enum: ['up', 'degraded', 'down'], description: 'Worst status across all checks' },
5
+ checks: {
6
+ type: 'array',
7
+ items: {
8
+ type: 'object',
9
+ properties: {
10
+ name: { type: 'string' },
11
+ status: { type: 'string', enum: ['up', 'degraded', 'down'] },
12
+ durationMs: { type: 'number' },
13
+ message: { type: 'string' },
14
+ data: { type: 'object' },
15
+ },
16
+ },
17
+ },
18
+ },
19
+ };
20
+ export default ReadyResponseSchema;
21
+ //# 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,eAAe,mBAAmB,CAAC"}