@geekmidas/telescope 10.0.0-alpha.2 → 10.0.0-alpha.21
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.
- package/dist/{MetricsAggregator-4SqelGcG.d.cts → MetricsAggregator-BxBLQUPj.d.cts} +3 -6
- package/dist/MetricsAggregator-BxBLQUPj.d.cts.map +1 -0
- package/dist/{MetricsAggregator-DZrW8ls6.d.mts → MetricsAggregator-j9wmZ0K_.d.mts} +3 -6
- package/dist/MetricsAggregator-j9wmZ0K_.d.mts.map +1 -0
- package/dist/{Telescope-D4nmwDRA.d.cts → Telescope-BcrWTaar.d.mts} +4 -7
- package/dist/Telescope-BcrWTaar.d.mts.map +1 -0
- package/dist/{Telescope-Dl6VSfxd.d.mts → Telescope-DnCMZT7V.d.cts} +4 -7
- package/dist/Telescope-DnCMZT7V.d.cts.map +1 -0
- package/dist/Telescope.cjs +385 -4
- package/dist/Telescope.cjs.map +1 -0
- package/dist/Telescope.d.cts +1 -3
- package/dist/Telescope.d.mts +1 -3
- package/dist/Telescope.mjs +384 -4
- package/dist/Telescope.mjs.map +1 -0
- package/dist/adapters/index.d.cts +2 -2
- package/dist/adapters/index.d.mts +2 -2
- package/dist/adapters/index.mjs +1 -0
- package/dist/adapters/lambda.cjs +9 -10
- package/dist/adapters/lambda.cjs.map +1 -1
- package/dist/adapters/lambda.d.cts +9 -13
- package/dist/adapters/lambda.d.cts.map +1 -1
- package/dist/adapters/lambda.d.mts +9 -13
- package/dist/adapters/lambda.d.mts.map +1 -1
- package/dist/adapters/lambda.mjs +3 -4
- package/dist/adapters/lambda.mjs.map +1 -1
- package/dist/adapters/middy.cjs +236 -4
- package/dist/adapters/middy.cjs.map +1 -0
- package/dist/adapters/middy.d.cts +60 -5
- package/dist/adapters/middy.d.cts.map +1 -0
- package/dist/adapters/middy.d.mts +60 -5
- package/dist/adapters/middy.d.mts.map +1 -0
- package/dist/adapters/middy.mjs +234 -3
- package/dist/adapters/middy.mjs.map +1 -0
- package/dist/adapters/types.d.cts +162 -2
- package/dist/adapters/types.d.cts.map +1 -0
- package/dist/adapters/types.d.mts +162 -2
- package/dist/adapters/types.d.mts.map +1 -0
- package/dist/adapters/types.mjs +1 -0
- package/dist/core.cjs +22 -22
- package/dist/core.d.cts +4 -4
- package/dist/core.d.mts +4 -4
- package/dist/core.mjs +3 -4
- package/dist/index.cjs +8 -9
- package/dist/index.d.cts +5 -6
- package/dist/index.d.mts +5 -6
- package/dist/index.mjs +5 -7
- package/dist/instrumentation/core.cjs +147 -11
- package/dist/instrumentation/core.cjs.map +1 -0
- package/dist/instrumentation/core.d.cts +74 -3
- package/dist/instrumentation/core.d.cts.map +1 -0
- package/dist/instrumentation/core.d.mts +74 -3
- package/dist/instrumentation/core.d.mts.map +1 -0
- package/dist/instrumentation/core.mjs +137 -2
- package/dist/instrumentation/core.mjs.map +1 -0
- package/dist/instrumentation/hono.cjs +134 -6
- package/dist/instrumentation/hono.cjs.map +1 -0
- package/dist/instrumentation/hono.d.cts +67 -2
- package/dist/instrumentation/hono.d.cts.map +1 -0
- package/dist/instrumentation/hono.d.mts +67 -2
- package/dist/instrumentation/hono.d.mts.map +1 -0
- package/dist/instrumentation/hono.mjs +130 -3
- package/dist/instrumentation/hono.mjs.map +1 -0
- package/dist/instrumentation/http.cjs +164 -11
- package/dist/instrumentation/http.cjs.map +1 -0
- package/dist/instrumentation/http.d.cts +103 -2
- package/dist/instrumentation/http.d.cts.map +1 -0
- package/dist/instrumentation/http.d.mts +103 -2
- package/dist/instrumentation/http.d.mts.map +1 -0
- package/dist/instrumentation/http.mjs +154 -2
- package/dist/instrumentation/http.mjs.map +1 -0
- package/dist/instrumentation/index.cjs +47 -47
- package/dist/instrumentation/index.d.cts +9 -9
- package/dist/instrumentation/index.d.mts +9 -9
- package/dist/instrumentation/index.mjs +8 -9
- package/dist/instrumentation/middleware.cjs +162 -6
- package/dist/instrumentation/middleware.cjs.map +1 -0
- package/dist/instrumentation/middleware.d.cts +70 -2
- package/dist/instrumentation/middleware.d.cts.map +1 -0
- package/dist/instrumentation/middleware.d.mts +70 -2
- package/dist/instrumentation/middleware.d.mts.map +1 -0
- package/dist/instrumentation/middleware.mjs +158 -3
- package/dist/instrumentation/middleware.mjs.map +1 -0
- package/dist/instrumentation/otel.cjs +137 -3
- package/dist/instrumentation/otel.cjs.map +1 -0
- package/dist/instrumentation/otel.d.cts +97 -2
- package/dist/instrumentation/otel.d.cts.map +1 -0
- package/dist/instrumentation/otel.d.mts +97 -2
- package/dist/instrumentation/otel.d.mts.map +1 -0
- package/dist/instrumentation/otel.mjs +136 -3
- package/dist/instrumentation/otel.mjs.map +1 -0
- package/dist/instrumentation/setup.cjs +100 -4
- package/dist/instrumentation/setup.cjs.map +1 -0
- package/dist/instrumentation/setup.d.cts +83 -3
- package/dist/instrumentation/setup.d.cts.map +1 -0
- package/dist/instrumentation/setup.d.mts +83 -3
- package/dist/instrumentation/setup.d.mts.map +1 -0
- package/dist/instrumentation/setup.mjs +98 -3
- package/dist/instrumentation/setup.mjs.map +1 -0
- package/dist/instrumentation/tracing.cjs +114 -10
- package/dist/instrumentation/tracing.cjs.map +1 -0
- package/dist/instrumentation/tracing.d.cts +49 -2
- package/dist/instrumentation/tracing.d.cts.map +1 -0
- package/dist/instrumentation/tracing.d.mts +49 -2
- package/dist/instrumentation/tracing.d.mts.map +1 -0
- package/dist/instrumentation/tracing.mjs +105 -2
- package/dist/instrumentation/tracing.mjs.map +1 -0
- package/dist/logger/console.cjs +18 -12
- package/dist/logger/console.cjs.map +1 -1
- package/dist/logger/console.d.cts +7 -10
- package/dist/logger/console.d.cts.map +1 -1
- package/dist/logger/console.d.mts +7 -10
- package/dist/logger/console.d.mts.map +1 -1
- package/dist/logger/console.mjs +17 -11
- package/dist/logger/console.mjs.map +1 -1
- package/dist/logger/pino.cjs +6 -5
- package/dist/logger/pino.cjs.map +1 -1
- package/dist/logger/pino.d.cts +6 -10
- package/dist/logger/pino.d.cts.map +1 -1
- package/dist/logger/pino.d.mts +6 -10
- package/dist/logger/pino.d.mts.map +1 -1
- package/dist/logger/pino.mjs +2 -3
- package/dist/logger/pino.mjs.map +1 -1
- package/dist/metrics/MetricsAggregator.cjs +354 -2
- package/dist/metrics/MetricsAggregator.cjs.map +1 -0
- package/dist/metrics/MetricsAggregator.d.cts +1 -2
- package/dist/metrics/MetricsAggregator.d.mts +1 -2
- package/dist/metrics/MetricsAggregator.mjs +353 -2
- package/dist/metrics/MetricsAggregator.mjs.map +1 -0
- package/dist/metrics/index.cjs +3 -4
- package/dist/metrics/index.d.cts +2 -4
- package/dist/metrics/index.d.mts +2 -4
- package/dist/metrics/index.mjs +2 -4
- package/dist/metrics/storage/InMemoryMetricsStorage.cjs +240 -3
- package/dist/metrics/storage/InMemoryMetricsStorage.cjs.map +1 -0
- package/dist/metrics/storage/InMemoryMetricsStorage.d.cts +43 -4
- package/dist/metrics/storage/InMemoryMetricsStorage.d.cts.map +1 -0
- package/dist/metrics/storage/InMemoryMetricsStorage.d.mts +43 -4
- package/dist/metrics/storage/InMemoryMetricsStorage.d.mts.map +1 -0
- package/dist/metrics/storage/InMemoryMetricsStorage.mjs +239 -3
- package/dist/metrics/storage/InMemoryMetricsStorage.mjs.map +1 -0
- package/dist/metrics/storage/MetricsStorage.cjs +0 -1
- package/dist/metrics/storage/MetricsStorage.d.cts +56 -3
- package/dist/metrics/storage/MetricsStorage.d.cts.map +1 -0
- package/dist/metrics/storage/MetricsStorage.d.mts +56 -3
- package/dist/metrics/storage/MetricsStorage.d.mts.map +1 -0
- package/dist/metrics/storage/MetricsStorage.mjs +1 -1
- package/dist/metrics/storage/index.cjs +6 -6
- package/dist/metrics/storage/index.d.cts +3 -3
- package/dist/metrics/storage/index.d.mts +3 -3
- package/dist/metrics/storage/index.mjs +4 -5
- package/dist/metrics/storage/types.cjs +34 -2
- package/dist/metrics/storage/types.cjs.map +1 -0
- package/dist/metrics/storage/types.d.cts +207 -2
- package/dist/metrics/storage/types.d.cts.map +1 -0
- package/dist/metrics/storage/types.d.mts +207 -2
- package/dist/metrics/storage/types.d.mts.map +1 -0
- package/dist/metrics/storage/types.mjs +33 -2
- package/dist/metrics/storage/types.mjs.map +1 -0
- package/dist/otlp/hono.cjs +9 -15
- package/dist/otlp/hono.cjs.map +1 -1
- package/dist/otlp/hono.d.cts +3 -13
- package/dist/otlp/hono.d.cts.map +1 -1
- package/dist/otlp/hono.d.mts +3 -13
- package/dist/otlp/hono.d.mts.map +1 -1
- package/dist/otlp/hono.mjs +5 -11
- package/dist/otlp/hono.mjs.map +1 -1
- package/dist/otlp/index.cjs +11 -11
- package/dist/otlp/index.d.cts +4 -7
- package/dist/otlp/index.d.mts +4 -7
- package/dist/otlp/index.mjs +4 -5
- package/dist/otlp/receiver.cjs +88 -4
- package/dist/otlp/receiver.cjs.map +1 -0
- package/dist/otlp/receiver.d.cts +59 -7
- package/dist/otlp/receiver.d.cts.map +1 -0
- package/dist/otlp/receiver.d.mts +59 -7
- package/dist/otlp/receiver.d.mts.map +1 -0
- package/dist/otlp/receiver.mjs +87 -4
- package/dist/otlp/receiver.mjs.map +1 -0
- package/dist/otlp/transformer.cjs +214 -5
- package/dist/otlp/transformer.cjs.map +1 -0
- package/dist/otlp/transformer.d.cts +1 -3
- package/dist/otlp/transformer.d.mts +1 -3
- package/dist/otlp/transformer.mjs +211 -3
- package/dist/otlp/transformer.mjs.map +1 -0
- package/dist/otlp/types.cjs +57 -5
- package/dist/otlp/types.cjs.map +1 -0
- package/dist/otlp/types.d.cts +1 -1
- package/dist/otlp/types.d.mts +1 -1
- package/dist/otlp/types.mjs +53 -2
- package/dist/otlp/types.mjs.map +1 -0
- package/dist/redact.cjs +84 -3
- package/dist/redact.cjs.map +1 -0
- package/dist/redact.d.cts +4 -8
- package/dist/redact.d.cts.map +1 -1
- package/dist/redact.d.mts +4 -8
- package/dist/redact.d.mts.map +1 -1
- package/dist/redact.mjs +80 -2
- package/dist/redact.mjs.map +1 -0
- package/dist/{chunk-CUT6urMc.cjs → rolldown-runtime-VH7oDXx4.cjs} +8 -10
- package/dist/server/hono.cjs +24 -33
- package/dist/server/hono.cjs.map +1 -1
- package/dist/server/hono.d.cts +10 -13
- package/dist/server/hono.d.cts.map +1 -1
- package/dist/server/hono.d.mts +10 -13
- package/dist/server/hono.d.mts.map +1 -1
- package/dist/server/hono.mjs +22 -31
- package/dist/server/hono.mjs.map +1 -1
- package/dist/storage/kysely.cjs +34 -32
- package/dist/storage/kysely.cjs.map +1 -1
- package/dist/storage/kysely.d.cts +8 -12
- package/dist/storage/kysely.d.cts.map +1 -1
- package/dist/storage/kysely.d.mts +8 -12
- package/dist/storage/kysely.d.mts.map +1 -1
- package/dist/storage/kysely.mjs +33 -31
- package/dist/storage/kysely.mjs.map +1 -1
- package/dist/storage/memory.cjs +122 -2
- package/dist/storage/memory.cjs.map +1 -0
- package/dist/storage/memory.d.cts +36 -3
- package/dist/storage/memory.d.cts.map +1 -0
- package/dist/storage/memory.d.mts +36 -3
- package/dist/storage/memory.d.mts.map +1 -0
- package/dist/storage/memory.mjs +121 -2
- package/dist/storage/memory.mjs.map +1 -0
- package/dist/{transformer-CTGsaVfV.d.mts → transformer-BBBXCjHP.d.mts} +4 -8
- package/dist/transformer-BBBXCjHP.d.mts.map +1 -0
- package/dist/{transformer-ICEbxpFf.d.cts → transformer-DlESim6Q.d.cts} +4 -8
- package/dist/transformer-DlESim6Q.d.cts.map +1 -0
- package/dist/{types-CmOB7CLO.d.cts → types-DVETVdpa.d.cts} +6 -7
- package/dist/types-DVETVdpa.d.cts.map +1 -0
- package/dist/{types-DBc0q5KD.d.mts → types-DVETVdpa.d.mts} +6 -7
- package/dist/types-DVETVdpa.d.mts.map +1 -0
- package/dist/{types-B1EIa_cQ.d.mts → types-a9Vistj1.d.cts} +2 -3
- package/dist/types-a9Vistj1.d.cts.map +1 -0
- package/dist/{types-l7Rlb5Mg.d.cts → types-a9Vistj1.d.mts} +2 -3
- package/dist/types-a9Vistj1.d.mts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +1 -0
- package/dist/ui-assets.cjs +31 -4
- package/dist/ui-assets.cjs.map +1 -0
- package/dist/ui-assets.d.cts +4 -6
- package/dist/ui-assets.d.cts.map +1 -1
- package/dist/ui-assets.d.mts +4 -6
- package/dist/ui-assets.d.mts.map +1 -1
- package/dist/ui-assets.mjs +28 -2
- package/dist/ui-assets.mjs.map +1 -0
- package/package.json +39 -37
- package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts +0 -47
- package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts.map +0 -1
- package/dist/InMemoryMetricsStorage-C4drxT7G.mjs +0 -247
- package/dist/InMemoryMetricsStorage-C4drxT7G.mjs.map +0 -1
- package/dist/InMemoryMetricsStorage-D0njWUSi.cjs +0 -252
- package/dist/InMemoryMetricsStorage-D0njWUSi.cjs.map +0 -1
- package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts +0 -47
- package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts.map +0 -1
- package/dist/MetricsAggregator-4SqelGcG.d.cts.map +0 -1
- package/dist/MetricsAggregator-B7lUICdH.cjs +0 -363
- package/dist/MetricsAggregator-B7lUICdH.cjs.map +0 -1
- package/dist/MetricsAggregator-DZrW8ls6.d.mts.map +0 -1
- package/dist/MetricsAggregator-S3DQWNas.mjs +0 -357
- package/dist/MetricsAggregator-S3DQWNas.mjs.map +0 -1
- package/dist/MetricsStorage-B86e4131.d.cts +0 -60
- package/dist/MetricsStorage-B86e4131.d.cts.map +0 -1
- package/dist/MetricsStorage-BWyP2_12.d.mts +0 -60
- package/dist/MetricsStorage-BWyP2_12.d.mts.map +0 -1
- package/dist/MetricsStorage-BypQXWiv.mjs +0 -0
- package/dist/MetricsStorage-Or8pVCe4.cjs +0 -0
- package/dist/Telescope-Cs3fv8jt.cjs +0 -395
- package/dist/Telescope-Cs3fv8jt.cjs.map +0 -1
- package/dist/Telescope-D4nmwDRA.d.cts.map +0 -1
- package/dist/Telescope-Dh5av3FC.mjs +0 -389
- package/dist/Telescope-Dh5av3FC.mjs.map +0 -1
- package/dist/Telescope-Dl6VSfxd.d.mts.map +0 -1
- package/dist/core--quSp5Qr.d.mts +0 -78
- package/dist/core--quSp5Qr.d.mts.map +0 -1
- package/dist/core-B4Jpia5H.d.cts +0 -78
- package/dist/core-B4Jpia5H.d.cts.map +0 -1
- package/dist/core-CtVHRJGv.cjs +0 -199
- package/dist/core-CtVHRJGv.cjs.map +0 -1
- package/dist/core-D6hJ6exL.mjs +0 -139
- package/dist/core-D6hJ6exL.mjs.map +0 -1
- package/dist/hono--uKQ7Jgi.d.mts +0 -71
- package/dist/hono--uKQ7Jgi.d.mts.map +0 -1
- package/dist/hono-Bw-ey6CT.mjs +0 -136
- package/dist/hono-Bw-ey6CT.mjs.map +0 -1
- package/dist/hono-CPHX7FAm.cjs +0 -160
- package/dist/hono-CPHX7FAm.cjs.map +0 -1
- package/dist/hono-CemCKU87.d.cts +0 -71
- package/dist/hono-CemCKU87.d.cts.map +0 -1
- package/dist/http-BIvr0YdI.mjs +0 -159
- package/dist/http-BIvr0YdI.mjs.map +0 -1
- package/dist/http-BiNtg85L.d.mts +0 -107
- package/dist/http-BiNtg85L.d.mts.map +0 -1
- package/dist/http-BsqmhurZ.cjs +0 -219
- package/dist/http-BsqmhurZ.cjs.map +0 -1
- package/dist/http-D1oTbfap.d.cts +0 -107
- package/dist/http-D1oTbfap.d.cts.map +0 -1
- package/dist/index-BL32-cvv.d.cts +0 -1
- package/dist/index-CsuikFeJ.d.mts +0 -1
- package/dist/memory--BK4iWiv.d.cts +0 -40
- package/dist/memory--BK4iWiv.d.cts.map +0 -1
- package/dist/memory-6S9H-IF5.mjs +0 -123
- package/dist/memory-6S9H-IF5.mjs.map +0 -1
- package/dist/memory-B0d_n1g5.cjs +0 -129
- package/dist/memory-B0d_n1g5.cjs.map +0 -1
- package/dist/memory-DCirEVFW.d.mts +0 -40
- package/dist/memory-DCirEVFW.d.mts.map +0 -1
- package/dist/metrics-D5YT-Rnq.mjs +0 -0
- package/dist/metrics-fhD3l3C3.cjs +0 -0
- package/dist/middleware-Bcq6XXGG.cjs +0 -184
- package/dist/middleware-Bcq6XXGG.cjs.map +0 -1
- package/dist/middleware-D1XEHvyy.mjs +0 -160
- package/dist/middleware-D1XEHvyy.mjs.map +0 -1
- package/dist/middleware-PeyS-9Ny.d.cts +0 -74
- package/dist/middleware-PeyS-9Ny.d.cts.map +0 -1
- package/dist/middleware-oHvo_ZgU.d.mts +0 -74
- package/dist/middleware-oHvo_ZgU.d.mts.map +0 -1
- package/dist/middy-B6Btl8XE.d.mts +0 -64
- package/dist/middy-B6Btl8XE.d.mts.map +0 -1
- package/dist/middy-Bq0defVg.d.cts +0 -64
- package/dist/middy-Bq0defVg.d.cts.map +0 -1
- package/dist/middy-DHWLmUAD.mjs +0 -236
- package/dist/middy-DHWLmUAD.mjs.map +0 -1
- package/dist/middy-DlWnZilH.cjs +0 -247
- package/dist/middy-DlWnZilH.cjs.map +0 -1
- package/dist/otel-B9bNoeZ2.mjs +0 -130
- package/dist/otel-B9bNoeZ2.mjs.map +0 -1
- package/dist/otel-Bk89b1lX.d.cts +0 -101
- package/dist/otel-Bk89b1lX.d.cts.map +0 -1
- package/dist/otel-BzjOtVxZ.cjs +0 -136
- package/dist/otel-BzjOtVxZ.cjs.map +0 -1
- package/dist/otel-lPMsM26e.d.mts +0 -101
- package/dist/otel-lPMsM26e.d.mts.map +0 -1
- package/dist/receiver-D46dfkYI.mjs +0 -89
- package/dist/receiver-D46dfkYI.mjs.map +0 -1
- package/dist/receiver-DLICx5uU.d.cts +0 -63
- package/dist/receiver-DLICx5uU.d.cts.map +0 -1
- package/dist/receiver-UeZT-H8u.d.mts +0 -63
- package/dist/receiver-UeZT-H8u.d.mts.map +0 -1
- package/dist/receiver-slCoAFat.cjs +0 -94
- package/dist/receiver-slCoAFat.cjs.map +0 -1
- package/dist/redact-BzkITCNW.mjs +0 -83
- package/dist/redact-BzkITCNW.mjs.map +0 -1
- package/dist/redact-DVaSSPZT.cjs +0 -95
- package/dist/redact-DVaSSPZT.cjs.map +0 -1
- package/dist/setup-Bkxm4g6b.d.mts +0 -87
- package/dist/setup-Bkxm4g6b.d.mts.map +0 -1
- package/dist/setup-D58N1f9O.d.cts +0 -87
- package/dist/setup-D58N1f9O.d.cts.map +0 -1
- package/dist/setup-DC9JMEYZ.mjs +0 -98
- package/dist/setup-DC9JMEYZ.mjs.map +0 -1
- package/dist/setup-DufxQpi9.cjs +0 -110
- package/dist/setup-DufxQpi9.cjs.map +0 -1
- package/dist/tracing-BX8uY2nR.d.cts +0 -53
- package/dist/tracing-BX8uY2nR.d.cts.map +0 -1
- package/dist/tracing-Bt1zWRlb.cjs +0 -167
- package/dist/tracing-Bt1zWRlb.cjs.map +0 -1
- package/dist/tracing-Cijm_5NI.mjs +0 -113
- package/dist/tracing-Cijm_5NI.mjs.map +0 -1
- package/dist/tracing-PnECEbEu.d.mts +0 -53
- package/dist/tracing-PnECEbEu.d.mts.map +0 -1
- package/dist/transformer-CFQ4WFk6.mjs +0 -215
- package/dist/transformer-CFQ4WFk6.mjs.map +0 -1
- package/dist/transformer-CTGsaVfV.d.mts.map +0 -1
- package/dist/transformer-Csl6fbgv.cjs +0 -232
- package/dist/transformer-Csl6fbgv.cjs.map +0 -1
- package/dist/transformer-ICEbxpFf.d.cts.map +0 -1
- package/dist/types-B1EIa_cQ.d.mts.map +0 -1
- package/dist/types-BMiHgsi4.cjs +0 -78
- package/dist/types-BMiHgsi4.cjs.map +0 -1
- package/dist/types-BRzW1NM8.d.cts +0 -166
- package/dist/types-BRzW1NM8.d.cts.map +0 -1
- package/dist/types-BS3Rx8Sk.d.cts +0 -209
- package/dist/types-BS3Rx8Sk.d.cts.map +0 -1
- package/dist/types-BzQ78Efw.d.mts +0 -166
- package/dist/types-BzQ78Efw.d.mts.map +0 -1
- package/dist/types-CbNGXnJE.d.mts +0 -209
- package/dist/types-CbNGXnJE.d.mts.map +0 -1
- package/dist/types-Cj59nqy7.mjs +0 -54
- package/dist/types-Cj59nqy7.mjs.map +0 -1
- package/dist/types-CmOB7CLO.d.cts.map +0 -1
- package/dist/types-DBc0q5KD.d.mts.map +0 -1
- package/dist/types-ZW-nfWf6.cjs +0 -40
- package/dist/types-ZW-nfWf6.cjs.map +0 -1
- package/dist/types-l7Rlb5Mg.d.cts.map +0 -1
- package/dist/types-ojhnLdwz.mjs +0 -34
- package/dist/types-ojhnLdwz.mjs.map +0 -1
- package/dist/ui-assets-BEXqOQLe.cjs +0 -48
- package/dist/ui-assets-BEXqOQLe.cjs.map +0 -1
- package/dist/ui-assets-BhTDUsrM.mjs +0 -30
- package/dist/ui-assets-BhTDUsrM.mjs.map +0 -1
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
//#region src/metrics/MetricsAggregator.ts
|
|
2
|
-
const DEFAULT_OPTIONS = {
|
|
3
|
-
bucketSize: 6e4,
|
|
4
|
-
maxBuckets: 1440,
|
|
5
|
-
maxSamplesPerBucket: 1e3
|
|
6
|
-
};
|
|
7
|
-
var MetricsAggregator = class {
|
|
8
|
-
options;
|
|
9
|
-
buckets = /* @__PURE__ */ new Map();
|
|
10
|
-
endpoints = /* @__PURE__ */ new Map();
|
|
11
|
-
endpointTimeBuckets = /* @__PURE__ */ new Map();
|
|
12
|
-
constructor(options = {}) {
|
|
13
|
-
this.options = {
|
|
14
|
-
...DEFAULT_OPTIONS,
|
|
15
|
-
...options
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Record a request for metrics aggregation
|
|
20
|
-
*/
|
|
21
|
-
record(entry) {
|
|
22
|
-
const timestamp = entry.timestamp.getTime();
|
|
23
|
-
const bucketTs = this.getBucketTimestamp(timestamp);
|
|
24
|
-
this.updateBucket(bucketTs, entry);
|
|
25
|
-
this.updateEndpoint(entry);
|
|
26
|
-
this.pruneBuckets();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get aggregated request metrics
|
|
30
|
-
*/
|
|
31
|
-
getMetrics(options = {}) {
|
|
32
|
-
const range = options.range ?? this.getDefaultRange();
|
|
33
|
-
const bucketSize = options.bucketSize ?? this.options.bucketSize;
|
|
34
|
-
const bucketsInRange = this.getBucketsInRange(range);
|
|
35
|
-
if (bucketsInRange.length === 0) return this.emptyMetrics();
|
|
36
|
-
const allDurations = [];
|
|
37
|
-
let totalRequests = 0;
|
|
38
|
-
let totalDuration = 0;
|
|
39
|
-
let totalErrors = 0;
|
|
40
|
-
for (const bucket of bucketsInRange) {
|
|
41
|
-
totalRequests += bucket.count;
|
|
42
|
-
totalDuration += bucket.durationSum;
|
|
43
|
-
totalErrors += bucket.errorCount;
|
|
44
|
-
allDurations.push(...bucket.durationSamples);
|
|
45
|
-
}
|
|
46
|
-
allDurations.sort((a, b) => a - b);
|
|
47
|
-
const p50 = this.percentile(allDurations, 50);
|
|
48
|
-
const p95 = this.percentile(allDurations, 95);
|
|
49
|
-
const p99 = this.percentile(allDurations, 99);
|
|
50
|
-
const rangeMs = range.end.getTime() - range.start.getTime();
|
|
51
|
-
const rangeSeconds = rangeMs / 1e3;
|
|
52
|
-
const avgDuration = totalRequests > 0 ? totalDuration / totalRequests : 0;
|
|
53
|
-
const errorRate = totalRequests > 0 ? totalErrors / totalRequests * 100 : 0;
|
|
54
|
-
const timeSeries = this.buildTimeSeries(bucketsInRange, range, bucketSize);
|
|
55
|
-
return {
|
|
56
|
-
totalRequests,
|
|
57
|
-
avgDuration,
|
|
58
|
-
p50Duration: p50,
|
|
59
|
-
p95Duration: p95,
|
|
60
|
-
p99Duration: p99,
|
|
61
|
-
errorRate,
|
|
62
|
-
successRate: 100 - errorRate,
|
|
63
|
-
requestsPerSecond: rangeSeconds > 0 ? totalRequests / rangeSeconds : 0,
|
|
64
|
-
timeSeries
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Get metrics for individual endpoints
|
|
69
|
-
*/
|
|
70
|
-
getEndpointMetrics(options = {}) {
|
|
71
|
-
const limit = options.limit ?? 50;
|
|
72
|
-
const results = [];
|
|
73
|
-
for (const [, bucket] of this.endpoints) {
|
|
74
|
-
const avgDuration = bucket.count > 0 ? bucket.durationSum / bucket.count : 0;
|
|
75
|
-
bucket.durationSamples.sort((a, b) => a - b);
|
|
76
|
-
const p95 = this.percentile(bucket.durationSamples, 95);
|
|
77
|
-
const errorRate = bucket.count > 0 ? bucket.errorCount / bucket.count * 100 : 0;
|
|
78
|
-
results.push({
|
|
79
|
-
method: bucket.method,
|
|
80
|
-
path: bucket.path,
|
|
81
|
-
count: bucket.count,
|
|
82
|
-
avgDuration,
|
|
83
|
-
p95Duration: p95,
|
|
84
|
-
errorRate,
|
|
85
|
-
lastSeen: bucket.lastSeen
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
results.sort((a, b) => b.count - a.count);
|
|
89
|
-
return results.slice(0, limit);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Get status code distribution
|
|
93
|
-
*/
|
|
94
|
-
getStatusDistribution(options = {}) {
|
|
95
|
-
const range = options.range ?? this.getDefaultRange();
|
|
96
|
-
const bucketsInRange = this.getBucketsInRange(range);
|
|
97
|
-
const distribution = {
|
|
98
|
-
"2xx": 0,
|
|
99
|
-
"3xx": 0,
|
|
100
|
-
"4xx": 0,
|
|
101
|
-
"5xx": 0
|
|
102
|
-
};
|
|
103
|
-
for (const bucket of bucketsInRange) {
|
|
104
|
-
distribution["2xx"] += bucket.statusDistribution["2xx"];
|
|
105
|
-
distribution["3xx"] += bucket.statusDistribution["3xx"];
|
|
106
|
-
distribution["4xx"] += bucket.statusDistribution["4xx"];
|
|
107
|
-
distribution["5xx"] += bucket.statusDistribution["5xx"];
|
|
108
|
-
}
|
|
109
|
-
return distribution;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get detailed metrics for a specific endpoint
|
|
113
|
-
*/
|
|
114
|
-
getEndpointDetails(method, path, options = {}) {
|
|
115
|
-
const key = `${method}:${path}`;
|
|
116
|
-
const endpoint = this.endpoints.get(key);
|
|
117
|
-
if (!endpoint) return null;
|
|
118
|
-
const samples = [...endpoint.durationSamples].sort((a, b) => a - b);
|
|
119
|
-
const p50 = this.percentile(samples, 50);
|
|
120
|
-
const p95 = this.percentile(samples, 95);
|
|
121
|
-
const p99 = this.percentile(samples, 99);
|
|
122
|
-
const avgDuration = endpoint.count > 0 ? endpoint.durationSum / endpoint.count : 0;
|
|
123
|
-
const errorRate = endpoint.count > 0 ? endpoint.errorCount / endpoint.count * 100 : 0;
|
|
124
|
-
const endpointBuckets = this.endpointTimeBuckets.get(key);
|
|
125
|
-
const timeSeries = [];
|
|
126
|
-
const statusDistribution = {
|
|
127
|
-
"2xx": 0,
|
|
128
|
-
"3xx": 0,
|
|
129
|
-
"4xx": 0,
|
|
130
|
-
"5xx": 0
|
|
131
|
-
};
|
|
132
|
-
if (endpointBuckets) {
|
|
133
|
-
const range = options.range ?? this.getDefaultRange();
|
|
134
|
-
const startTs = range.start.getTime();
|
|
135
|
-
const endTs = range.end.getTime();
|
|
136
|
-
for (const [ts, bucket] of endpointBuckets) if (ts >= startTs && ts <= endTs) {
|
|
137
|
-
timeSeries.push({
|
|
138
|
-
timestamp: bucket.timestamp,
|
|
139
|
-
count: bucket.count,
|
|
140
|
-
avgDuration: bucket.count > 0 ? bucket.durationSum / bucket.count : 0,
|
|
141
|
-
errorCount: bucket.errorCount
|
|
142
|
-
});
|
|
143
|
-
statusDistribution["2xx"] += bucket.statusDistribution["2xx"];
|
|
144
|
-
statusDistribution["3xx"] += bucket.statusDistribution["3xx"];
|
|
145
|
-
statusDistribution["4xx"] += bucket.statusDistribution["4xx"];
|
|
146
|
-
statusDistribution["5xx"] += bucket.statusDistribution["5xx"];
|
|
147
|
-
}
|
|
148
|
-
timeSeries.sort((a, b) => a.timestamp - b.timestamp);
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
method: endpoint.method,
|
|
152
|
-
path: endpoint.path,
|
|
153
|
-
count: endpoint.count,
|
|
154
|
-
avgDuration,
|
|
155
|
-
p50Duration: p50,
|
|
156
|
-
p95Duration: p95,
|
|
157
|
-
p99Duration: p99,
|
|
158
|
-
errorRate,
|
|
159
|
-
successRate: 100 - errorRate,
|
|
160
|
-
lastSeen: endpoint.lastSeen,
|
|
161
|
-
statusDistribution,
|
|
162
|
-
timeSeries
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Reset all metrics
|
|
167
|
-
*/
|
|
168
|
-
reset() {
|
|
169
|
-
this.buckets.clear();
|
|
170
|
-
this.endpoints.clear();
|
|
171
|
-
this.endpointTimeBuckets.clear();
|
|
172
|
-
}
|
|
173
|
-
getBucketTimestamp(timestamp) {
|
|
174
|
-
return Math.floor(timestamp / this.options.bucketSize) * this.options.bucketSize;
|
|
175
|
-
}
|
|
176
|
-
updateBucket(bucketTs, entry) {
|
|
177
|
-
let bucket = this.buckets.get(bucketTs);
|
|
178
|
-
if (!bucket) {
|
|
179
|
-
bucket = this.createEmptyBucket(bucketTs);
|
|
180
|
-
this.buckets.set(bucketTs, bucket);
|
|
181
|
-
}
|
|
182
|
-
bucket.count++;
|
|
183
|
-
bucket.durationSum += entry.duration;
|
|
184
|
-
bucket.durationMin = Math.min(bucket.durationMin, entry.duration);
|
|
185
|
-
bucket.durationMax = Math.max(bucket.durationMax, entry.duration);
|
|
186
|
-
if (bucket.durationSamples.length < this.options.maxSamplesPerBucket) bucket.durationSamples.push(entry.duration);
|
|
187
|
-
else {
|
|
188
|
-
const idx = Math.floor(Math.random() * bucket.count);
|
|
189
|
-
if (idx < this.options.maxSamplesPerBucket) bucket.durationSamples[idx] = entry.duration;
|
|
190
|
-
}
|
|
191
|
-
const isError = entry.status >= 400;
|
|
192
|
-
if (isError) bucket.errorCount++;
|
|
193
|
-
if (entry.status >= 200 && entry.status < 300) bucket.statusDistribution["2xx"]++;
|
|
194
|
-
else if (entry.status >= 300 && entry.status < 400) bucket.statusDistribution["3xx"]++;
|
|
195
|
-
else if (entry.status >= 400 && entry.status < 500) bucket.statusDistribution["4xx"]++;
|
|
196
|
-
else if (entry.status >= 500) bucket.statusDistribution["5xx"]++;
|
|
197
|
-
}
|
|
198
|
-
updateEndpoint(entry) {
|
|
199
|
-
const key = `${entry.method}:${entry.path}`;
|
|
200
|
-
let endpoint = this.endpoints.get(key);
|
|
201
|
-
if (!endpoint) {
|
|
202
|
-
endpoint = {
|
|
203
|
-
method: entry.method,
|
|
204
|
-
path: entry.path,
|
|
205
|
-
count: 0,
|
|
206
|
-
durationSum: 0,
|
|
207
|
-
durationSamples: [],
|
|
208
|
-
errorCount: 0,
|
|
209
|
-
lastSeen: 0
|
|
210
|
-
};
|
|
211
|
-
this.endpoints.set(key, endpoint);
|
|
212
|
-
}
|
|
213
|
-
endpoint.count++;
|
|
214
|
-
endpoint.durationSum += entry.duration;
|
|
215
|
-
endpoint.lastSeen = entry.timestamp.getTime();
|
|
216
|
-
if (entry.status >= 400) endpoint.errorCount++;
|
|
217
|
-
if (endpoint.durationSamples.length < this.options.maxSamplesPerBucket) endpoint.durationSamples.push(entry.duration);
|
|
218
|
-
else {
|
|
219
|
-
const idx = Math.floor(Math.random() * endpoint.count);
|
|
220
|
-
if (idx < this.options.maxSamplesPerBucket) endpoint.durationSamples[idx] = entry.duration;
|
|
221
|
-
}
|
|
222
|
-
this.updateEndpointTimeBucket(key, entry);
|
|
223
|
-
}
|
|
224
|
-
updateEndpointTimeBucket(key, entry) {
|
|
225
|
-
const timestamp = entry.timestamp.getTime();
|
|
226
|
-
const bucketTs = this.getBucketTimestamp(timestamp);
|
|
227
|
-
let endpointBuckets = this.endpointTimeBuckets.get(key);
|
|
228
|
-
if (!endpointBuckets) {
|
|
229
|
-
endpointBuckets = /* @__PURE__ */ new Map();
|
|
230
|
-
this.endpointTimeBuckets.set(key, endpointBuckets);
|
|
231
|
-
}
|
|
232
|
-
let bucket = endpointBuckets.get(bucketTs);
|
|
233
|
-
if (!bucket) {
|
|
234
|
-
bucket = {
|
|
235
|
-
timestamp: bucketTs,
|
|
236
|
-
count: 0,
|
|
237
|
-
durationSum: 0,
|
|
238
|
-
errorCount: 0,
|
|
239
|
-
statusDistribution: {
|
|
240
|
-
"2xx": 0,
|
|
241
|
-
"3xx": 0,
|
|
242
|
-
"4xx": 0,
|
|
243
|
-
"5xx": 0
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
endpointBuckets.set(bucketTs, bucket);
|
|
247
|
-
}
|
|
248
|
-
bucket.count++;
|
|
249
|
-
bucket.durationSum += entry.duration;
|
|
250
|
-
if (entry.status >= 400) bucket.errorCount++;
|
|
251
|
-
if (entry.status >= 200 && entry.status < 300) bucket.statusDistribution["2xx"]++;
|
|
252
|
-
else if (entry.status >= 300 && entry.status < 400) bucket.statusDistribution["3xx"]++;
|
|
253
|
-
else if (entry.status >= 400 && entry.status < 500) bucket.statusDistribution["4xx"]++;
|
|
254
|
-
else if (entry.status >= 500) bucket.statusDistribution["5xx"]++;
|
|
255
|
-
if (endpointBuckets.size > this.options.maxBuckets) {
|
|
256
|
-
const timestamps = Array.from(endpointBuckets.keys()).sort((a, b) => a - b);
|
|
257
|
-
const toRemove = timestamps.slice(0, timestamps.length - this.options.maxBuckets);
|
|
258
|
-
for (const ts of toRemove) endpointBuckets.delete(ts);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
createEmptyBucket(timestamp) {
|
|
262
|
-
return {
|
|
263
|
-
timestamp,
|
|
264
|
-
bucketSize: this.options.bucketSize,
|
|
265
|
-
count: 0,
|
|
266
|
-
durationSum: 0,
|
|
267
|
-
durationMin: Infinity,
|
|
268
|
-
durationMax: 0,
|
|
269
|
-
durationSamples: [],
|
|
270
|
-
errorCount: 0,
|
|
271
|
-
statusDistribution: {
|
|
272
|
-
"2xx": 0,
|
|
273
|
-
"3xx": 0,
|
|
274
|
-
"4xx": 0,
|
|
275
|
-
"5xx": 0
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
pruneBuckets() {
|
|
280
|
-
if (this.buckets.size <= this.options.maxBuckets) return;
|
|
281
|
-
const timestamps = Array.from(this.buckets.keys()).sort((a, b) => a - b);
|
|
282
|
-
const toRemove = timestamps.slice(0, timestamps.length - this.options.maxBuckets);
|
|
283
|
-
for (const ts of toRemove) this.buckets.delete(ts);
|
|
284
|
-
}
|
|
285
|
-
getDefaultRange() {
|
|
286
|
-
const now = /* @__PURE__ */ new Date();
|
|
287
|
-
const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1e3);
|
|
288
|
-
return {
|
|
289
|
-
start: oneHourAgo,
|
|
290
|
-
end: now
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
getBucketsInRange(range) {
|
|
294
|
-
const startTs = range.start.getTime();
|
|
295
|
-
const endTs = range.end.getTime();
|
|
296
|
-
const results = [];
|
|
297
|
-
for (const [ts, bucket] of this.buckets) if (ts >= startTs && ts <= endTs) results.push(bucket);
|
|
298
|
-
return results.sort((a, b) => a.timestamp - b.timestamp);
|
|
299
|
-
}
|
|
300
|
-
buildTimeSeries(buckets, _range, targetBucketSize) {
|
|
301
|
-
if (buckets.length === 0) return [];
|
|
302
|
-
if (targetBucketSize === this.options.bucketSize) return buckets.map((b) => ({
|
|
303
|
-
timestamp: b.timestamp,
|
|
304
|
-
count: b.count,
|
|
305
|
-
avgDuration: b.count > 0 ? b.durationSum / b.count : 0,
|
|
306
|
-
errorCount: b.errorCount
|
|
307
|
-
}));
|
|
308
|
-
const points = /* @__PURE__ */ new Map();
|
|
309
|
-
for (const bucket of buckets) {
|
|
310
|
-
const targetTs = Math.floor(bucket.timestamp / targetBucketSize) * targetBucketSize;
|
|
311
|
-
let point = points.get(targetTs);
|
|
312
|
-
if (!point) {
|
|
313
|
-
point = {
|
|
314
|
-
timestamp: targetTs,
|
|
315
|
-
count: 0,
|
|
316
|
-
avgDuration: 0,
|
|
317
|
-
errorCount: 0
|
|
318
|
-
};
|
|
319
|
-
points.set(targetTs, point);
|
|
320
|
-
}
|
|
321
|
-
const totalCount = point.count + bucket.count;
|
|
322
|
-
if (totalCount > 0) point.avgDuration = (point.avgDuration * point.count + (bucket.count > 0 ? bucket.durationSum / bucket.count : 0) * bucket.count) / totalCount;
|
|
323
|
-
point.count = totalCount;
|
|
324
|
-
point.errorCount += bucket.errorCount;
|
|
325
|
-
}
|
|
326
|
-
return Array.from(points.values()).sort((a, b) => a.timestamp - b.timestamp);
|
|
327
|
-
}
|
|
328
|
-
percentile(sortedValues, p) {
|
|
329
|
-
if (sortedValues.length === 0) return 0;
|
|
330
|
-
if (sortedValues.length === 1) return sortedValues[0];
|
|
331
|
-
const index = p / 100 * (sortedValues.length - 1);
|
|
332
|
-
const lower = Math.floor(index);
|
|
333
|
-
const upper = Math.ceil(index);
|
|
334
|
-
if (lower === upper) return sortedValues[lower];
|
|
335
|
-
const weight = index - lower;
|
|
336
|
-
const lowerVal = sortedValues[lower];
|
|
337
|
-
const upperVal = sortedValues[upper];
|
|
338
|
-
return lowerVal * (1 - weight) + upperVal * weight;
|
|
339
|
-
}
|
|
340
|
-
emptyMetrics() {
|
|
341
|
-
return {
|
|
342
|
-
totalRequests: 0,
|
|
343
|
-
avgDuration: 0,
|
|
344
|
-
p50Duration: 0,
|
|
345
|
-
p95Duration: 0,
|
|
346
|
-
p99Duration: 0,
|
|
347
|
-
errorRate: 0,
|
|
348
|
-
successRate: 100,
|
|
349
|
-
requestsPerSecond: 0,
|
|
350
|
-
timeSeries: []
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
};
|
|
354
|
-
|
|
355
|
-
//#endregion
|
|
356
|
-
export { MetricsAggregator };
|
|
357
|
-
//# sourceMappingURL=MetricsAggregator-S3DQWNas.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsAggregator-S3DQWNas.mjs","names":["DEFAULT_OPTIONS: Required<MetricsAggregatorOptions>","options: MetricsAggregatorOptions","entry: RequestEntry","options: MetricsQueryOptions","allDurations: number[]","results: EndpointMetrics[]","distribution: StatusDistribution","method: string","path: string","timeSeries: TimeSeriesPoint[]","statusDistribution: StatusDistribution","timestamp: number","bucketTs: number","key: string","range: TimeRange","results: MetricsBucket[]","buckets: MetricsBucket[]","_range: TimeRange","targetBucketSize: number","points: Map<number, TimeSeriesPoint>","sortedValues: number[]","p: number"],"sources":["../src/metrics/MetricsAggregator.ts"],"sourcesContent":["import type {\n\tEndpointBucket,\n\tEndpointDetails,\n\tEndpointMetrics,\n\tMetricsBucket,\n\tMetricsQueryOptions,\n\tRequestEntry,\n\tRequestMetrics,\n\tStatusDistribution,\n\tTimeRange,\n\tTimeSeriesPoint,\n} from '../types';\n\n/**\n * Configuration for MetricsAggregator\n */\nexport interface MetricsAggregatorOptions {\n\t/** Bucket size in milliseconds (default: 60000 = 1 minute) */\n\tbucketSize?: number;\n\t/** Maximum number of buckets to retain (default: 1440 = 24 hours at 1 min buckets) */\n\tmaxBuckets?: number;\n\t/** Maximum duration samples to keep per bucket for percentiles (default: 1000) */\n\tmaxSamplesPerBucket?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<MetricsAggregatorOptions> = {\n\tbucketSize: 60_000, // 1 minute\n\tmaxBuckets: 1440, // 24 hours\n\tmaxSamplesPerBucket: 1000,\n};\n\n/**\n * In-memory metrics aggregator for Telescope.\n * Aggregates request data into time-bucketed metrics for efficient querying.\n */\n/**\n * Endpoint time bucket for per-endpoint time series\n */\ninterface EndpointTimeBucket {\n\ttimestamp: number;\n\tcount: number;\n\tdurationSum: number;\n\terrorCount: number;\n\tstatusDistribution: StatusDistribution;\n}\n\nexport class MetricsAggregator {\n\tprivate options: Required<MetricsAggregatorOptions>;\n\tprivate buckets: Map<number, MetricsBucket> = new Map();\n\tprivate endpoints: Map<string, EndpointBucket> = new Map();\n\t// Map of endpoint key -> Map of timestamp -> bucket\n\tprivate endpointTimeBuckets: Map<string, Map<number, EndpointTimeBucket>> =\n\t\tnew Map();\n\n\tconstructor(options: MetricsAggregatorOptions = {}) {\n\t\tthis.options = { ...DEFAULT_OPTIONS, ...options };\n\t}\n\n\t/**\n\t * Record a request for metrics aggregation\n\t */\n\trecord(entry: RequestEntry): void {\n\t\tconst timestamp = entry.timestamp.getTime();\n\t\tconst bucketTs = this.getBucketTimestamp(timestamp);\n\n\t\t// Update time bucket\n\t\tthis.updateBucket(bucketTs, entry);\n\n\t\t// Update endpoint metrics\n\t\tthis.updateEndpoint(entry);\n\n\t\t// Prune old buckets\n\t\tthis.pruneBuckets();\n\t}\n\n\t/**\n\t * Get aggregated request metrics\n\t */\n\tgetMetrics(options: MetricsQueryOptions = {}): RequestMetrics {\n\t\tconst range = options.range ?? this.getDefaultRange();\n\t\tconst bucketSize = options.bucketSize ?? this.options.bucketSize;\n\n\t\t// Get buckets in range\n\t\tconst bucketsInRange = this.getBucketsInRange(range);\n\n\t\tif (bucketsInRange.length === 0) {\n\t\t\treturn this.emptyMetrics();\n\t\t}\n\n\t\t// Aggregate all durations for percentile calculations\n\t\tconst allDurations: number[] = [];\n\t\tlet totalRequests = 0;\n\t\tlet totalDuration = 0;\n\t\tlet totalErrors = 0;\n\n\t\tfor (const bucket of bucketsInRange) {\n\t\t\ttotalRequests += bucket.count;\n\t\t\ttotalDuration += bucket.durationSum;\n\t\t\ttotalErrors += bucket.errorCount;\n\t\t\tallDurations.push(...bucket.durationSamples);\n\t\t}\n\n\t\t// Calculate percentiles\n\t\tallDurations.sort((a, b) => a - b);\n\t\tconst p50 = this.percentile(allDurations, 50);\n\t\tconst p95 = this.percentile(allDurations, 95);\n\t\tconst p99 = this.percentile(allDurations, 99);\n\n\t\t// Calculate rates\n\t\tconst rangeMs = range.end.getTime() - range.start.getTime();\n\t\tconst rangeSeconds = rangeMs / 1000;\n\t\tconst avgDuration = totalRequests > 0 ? totalDuration / totalRequests : 0;\n\t\tconst errorRate =\n\t\t\ttotalRequests > 0 ? (totalErrors / totalRequests) * 100 : 0;\n\n\t\t// Build time series (re-bucket if needed)\n\t\tconst timeSeries = this.buildTimeSeries(bucketsInRange, range, bucketSize);\n\n\t\treturn {\n\t\t\ttotalRequests,\n\t\t\tavgDuration,\n\t\t\tp50Duration: p50,\n\t\t\tp95Duration: p95,\n\t\t\tp99Duration: p99,\n\t\t\terrorRate,\n\t\t\tsuccessRate: 100 - errorRate,\n\t\t\trequestsPerSecond: rangeSeconds > 0 ? totalRequests / rangeSeconds : 0,\n\t\t\ttimeSeries,\n\t\t};\n\t}\n\n\t/**\n\t * Get metrics for individual endpoints\n\t */\n\tgetEndpointMetrics(options: MetricsQueryOptions = {}): EndpointMetrics[] {\n\t\tconst limit = options.limit ?? 50;\n\n\t\tconst results: EndpointMetrics[] = [];\n\n\t\tfor (const [, bucket] of this.endpoints) {\n\t\t\tconst avgDuration =\n\t\t\t\tbucket.count > 0 ? bucket.durationSum / bucket.count : 0;\n\t\t\tbucket.durationSamples.sort((a, b) => a - b);\n\t\t\tconst p95 = this.percentile(bucket.durationSamples, 95);\n\t\t\tconst errorRate =\n\t\t\t\tbucket.count > 0 ? (bucket.errorCount / bucket.count) * 100 : 0;\n\n\t\t\tresults.push({\n\t\t\t\tmethod: bucket.method,\n\t\t\t\tpath: bucket.path,\n\t\t\t\tcount: bucket.count,\n\t\t\t\tavgDuration,\n\t\t\t\tp95Duration: p95,\n\t\t\t\terrorRate,\n\t\t\t\tlastSeen: bucket.lastSeen,\n\t\t\t});\n\t\t}\n\n\t\t// Sort by count descending\n\t\tresults.sort((a, b) => b.count - a.count);\n\n\t\treturn results.slice(0, limit);\n\t}\n\n\t/**\n\t * Get status code distribution\n\t */\n\tgetStatusDistribution(options: MetricsQueryOptions = {}): StatusDistribution {\n\t\tconst range = options.range ?? this.getDefaultRange();\n\t\tconst bucketsInRange = this.getBucketsInRange(range);\n\n\t\tconst distribution: StatusDistribution = {\n\t\t\t'2xx': 0,\n\t\t\t'3xx': 0,\n\t\t\t'4xx': 0,\n\t\t\t'5xx': 0,\n\t\t};\n\n\t\tfor (const bucket of bucketsInRange) {\n\t\t\tdistribution['2xx'] += bucket.statusDistribution['2xx'];\n\t\t\tdistribution['3xx'] += bucket.statusDistribution['3xx'];\n\t\t\tdistribution['4xx'] += bucket.statusDistribution['4xx'];\n\t\t\tdistribution['5xx'] += bucket.statusDistribution['5xx'];\n\t\t}\n\n\t\treturn distribution;\n\t}\n\n\t/**\n\t * Get detailed metrics for a specific endpoint\n\t */\n\tgetEndpointDetails(\n\t\tmethod: string,\n\t\tpath: string,\n\t\toptions: MetricsQueryOptions = {},\n\t): EndpointDetails | null {\n\t\tconst key = `${method}:${path}`;\n\t\tconst endpoint = this.endpoints.get(key);\n\n\t\tif (!endpoint) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Calculate percentiles\n\t\tconst samples = [...endpoint.durationSamples].sort((a, b) => a - b);\n\t\tconst p50 = this.percentile(samples, 50);\n\t\tconst p95 = this.percentile(samples, 95);\n\t\tconst p99 = this.percentile(samples, 99);\n\n\t\tconst avgDuration =\n\t\t\tendpoint.count > 0 ? endpoint.durationSum / endpoint.count : 0;\n\t\tconst errorRate =\n\t\t\tendpoint.count > 0 ? (endpoint.errorCount / endpoint.count) * 100 : 0;\n\n\t\t// Get time series for this endpoint\n\t\tconst endpointBuckets = this.endpointTimeBuckets.get(key);\n\t\tconst timeSeries: TimeSeriesPoint[] = [];\n\t\tconst statusDistribution: StatusDistribution = {\n\t\t\t'2xx': 0,\n\t\t\t'3xx': 0,\n\t\t\t'4xx': 0,\n\t\t\t'5xx': 0,\n\t\t};\n\n\t\tif (endpointBuckets) {\n\t\t\tconst range = options.range ?? this.getDefaultRange();\n\t\t\tconst startTs = range.start.getTime();\n\t\t\tconst endTs = range.end.getTime();\n\n\t\t\tfor (const [ts, bucket] of endpointBuckets) {\n\t\t\t\tif (ts >= startTs && ts <= endTs) {\n\t\t\t\t\ttimeSeries.push({\n\t\t\t\t\t\ttimestamp: bucket.timestamp,\n\t\t\t\t\t\tcount: bucket.count,\n\t\t\t\t\t\tavgDuration:\n\t\t\t\t\t\t\tbucket.count > 0 ? bucket.durationSum / bucket.count : 0,\n\t\t\t\t\t\terrorCount: bucket.errorCount,\n\t\t\t\t\t});\n\n\t\t\t\t\tstatusDistribution['2xx'] += bucket.statusDistribution['2xx'];\n\t\t\t\t\tstatusDistribution['3xx'] += bucket.statusDistribution['3xx'];\n\t\t\t\t\tstatusDistribution['4xx'] += bucket.statusDistribution['4xx'];\n\t\t\t\t\tstatusDistribution['5xx'] += bucket.statusDistribution['5xx'];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttimeSeries.sort((a, b) => a.timestamp - b.timestamp);\n\t\t}\n\n\t\treturn {\n\t\t\tmethod: endpoint.method,\n\t\t\tpath: endpoint.path,\n\t\t\tcount: endpoint.count,\n\t\t\tavgDuration,\n\t\t\tp50Duration: p50,\n\t\t\tp95Duration: p95,\n\t\t\tp99Duration: p99,\n\t\t\terrorRate,\n\t\t\tsuccessRate: 100 - errorRate,\n\t\t\tlastSeen: endpoint.lastSeen,\n\t\t\tstatusDistribution,\n\t\t\ttimeSeries,\n\t\t};\n\t}\n\n\t/**\n\t * Reset all metrics\n\t */\n\treset(): void {\n\t\tthis.buckets.clear();\n\t\tthis.endpoints.clear();\n\t\tthis.endpointTimeBuckets.clear();\n\t}\n\n\t// ============================================\n\t// Private Methods\n\t// ============================================\n\n\tprivate getBucketTimestamp(timestamp: number): number {\n\t\treturn (\n\t\t\tMath.floor(timestamp / this.options.bucketSize) * this.options.bucketSize\n\t\t);\n\t}\n\n\tprivate updateBucket(bucketTs: number, entry: RequestEntry): void {\n\t\tlet bucket = this.buckets.get(bucketTs);\n\n\t\tif (!bucket) {\n\t\t\tbucket = this.createEmptyBucket(bucketTs);\n\t\t\tthis.buckets.set(bucketTs, bucket);\n\t\t}\n\n\t\tbucket.count++;\n\t\tbucket.durationSum += entry.duration;\n\t\tbucket.durationMin = Math.min(bucket.durationMin, entry.duration);\n\t\tbucket.durationMax = Math.max(bucket.durationMax, entry.duration);\n\n\t\t// Keep samples for percentile calculations (with reservoir sampling if needed)\n\t\tif (bucket.durationSamples.length < this.options.maxSamplesPerBucket) {\n\t\t\tbucket.durationSamples.push(entry.duration);\n\t\t} else {\n\t\t\t// Reservoir sampling: replace random element\n\t\t\tconst idx = Math.floor(Math.random() * bucket.count);\n\t\t\tif (idx < this.options.maxSamplesPerBucket) {\n\t\t\t\tbucket.durationSamples[idx] = entry.duration;\n\t\t\t}\n\t\t}\n\n\t\t// Update status distribution\n\t\tconst isError = entry.status >= 400;\n\t\tif (isError) bucket.errorCount++;\n\n\t\tif (entry.status >= 200 && entry.status < 300) {\n\t\t\tbucket.statusDistribution['2xx']++;\n\t\t} else if (entry.status >= 300 && entry.status < 400) {\n\t\t\tbucket.statusDistribution['3xx']++;\n\t\t} else if (entry.status >= 400 && entry.status < 500) {\n\t\t\tbucket.statusDistribution['4xx']++;\n\t\t} else if (entry.status >= 500) {\n\t\t\tbucket.statusDistribution['5xx']++;\n\t\t}\n\t}\n\n\tprivate updateEndpoint(entry: RequestEntry): void {\n\t\tconst key = `${entry.method}:${entry.path}`;\n\t\tlet endpoint = this.endpoints.get(key);\n\n\t\tif (!endpoint) {\n\t\t\tendpoint = {\n\t\t\t\tmethod: entry.method,\n\t\t\t\tpath: entry.path,\n\t\t\t\tcount: 0,\n\t\t\t\tdurationSum: 0,\n\t\t\t\tdurationSamples: [],\n\t\t\t\terrorCount: 0,\n\t\t\t\tlastSeen: 0,\n\t\t\t};\n\t\t\tthis.endpoints.set(key, endpoint);\n\t\t}\n\n\t\tendpoint.count++;\n\t\tendpoint.durationSum += entry.duration;\n\t\tendpoint.lastSeen = entry.timestamp.getTime();\n\n\t\tif (entry.status >= 400) {\n\t\t\tendpoint.errorCount++;\n\t\t}\n\n\t\t// Keep samples for percentiles\n\t\tif (endpoint.durationSamples.length < this.options.maxSamplesPerBucket) {\n\t\t\tendpoint.durationSamples.push(entry.duration);\n\t\t} else {\n\t\t\tconst idx = Math.floor(Math.random() * endpoint.count);\n\t\t\tif (idx < this.options.maxSamplesPerBucket) {\n\t\t\t\tendpoint.durationSamples[idx] = entry.duration;\n\t\t\t}\n\t\t}\n\n\t\t// Update endpoint time bucket\n\t\tthis.updateEndpointTimeBucket(key, entry);\n\t}\n\n\tprivate updateEndpointTimeBucket(key: string, entry: RequestEntry): void {\n\t\tconst timestamp = entry.timestamp.getTime();\n\t\tconst bucketTs = this.getBucketTimestamp(timestamp);\n\n\t\tlet endpointBuckets = this.endpointTimeBuckets.get(key);\n\t\tif (!endpointBuckets) {\n\t\t\tendpointBuckets = new Map();\n\t\t\tthis.endpointTimeBuckets.set(key, endpointBuckets);\n\t\t}\n\n\t\tlet bucket = endpointBuckets.get(bucketTs);\n\t\tif (!bucket) {\n\t\t\tbucket = {\n\t\t\t\ttimestamp: bucketTs,\n\t\t\t\tcount: 0,\n\t\t\t\tdurationSum: 0,\n\t\t\t\terrorCount: 0,\n\t\t\t\tstatusDistribution: { '2xx': 0, '3xx': 0, '4xx': 0, '5xx': 0 },\n\t\t\t};\n\t\t\tendpointBuckets.set(bucketTs, bucket);\n\t\t}\n\n\t\tbucket.count++;\n\t\tbucket.durationSum += entry.duration;\n\n\t\tif (entry.status >= 400) {\n\t\t\tbucket.errorCount++;\n\t\t}\n\n\t\tif (entry.status >= 200 && entry.status < 300) {\n\t\t\tbucket.statusDistribution['2xx']++;\n\t\t} else if (entry.status >= 300 && entry.status < 400) {\n\t\t\tbucket.statusDistribution['3xx']++;\n\t\t} else if (entry.status >= 400 && entry.status < 500) {\n\t\t\tbucket.statusDistribution['4xx']++;\n\t\t} else if (entry.status >= 500) {\n\t\t\tbucket.statusDistribution['5xx']++;\n\t\t}\n\n\t\t// Prune old endpoint buckets (keep max buckets per endpoint)\n\t\tif (endpointBuckets.size > this.options.maxBuckets) {\n\t\t\tconst timestamps = Array.from(endpointBuckets.keys()).sort(\n\t\t\t\t(a, b) => a - b,\n\t\t\t);\n\t\t\tconst toRemove = timestamps.slice(\n\t\t\t\t0,\n\t\t\t\ttimestamps.length - this.options.maxBuckets,\n\t\t\t);\n\t\t\tfor (const ts of toRemove) {\n\t\t\t\tendpointBuckets.delete(ts);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate createEmptyBucket(timestamp: number): MetricsBucket {\n\t\treturn {\n\t\t\ttimestamp,\n\t\t\tbucketSize: this.options.bucketSize,\n\t\t\tcount: 0,\n\t\t\tdurationSum: 0,\n\t\t\tdurationMin: Infinity,\n\t\t\tdurationMax: 0,\n\t\t\tdurationSamples: [],\n\t\t\terrorCount: 0,\n\t\t\tstatusDistribution: {\n\t\t\t\t'2xx': 0,\n\t\t\t\t'3xx': 0,\n\t\t\t\t'4xx': 0,\n\t\t\t\t'5xx': 0,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate pruneBuckets(): void {\n\t\tif (this.buckets.size <= this.options.maxBuckets) return;\n\n\t\t// Get sorted timestamps\n\t\tconst timestamps = Array.from(this.buckets.keys()).sort((a, b) => a - b);\n\n\t\t// Remove oldest buckets\n\t\tconst toRemove = timestamps.slice(\n\t\t\t0,\n\t\t\ttimestamps.length - this.options.maxBuckets,\n\t\t);\n\t\tfor (const ts of toRemove) {\n\t\t\tthis.buckets.delete(ts);\n\t\t}\n\t}\n\n\tprivate getDefaultRange(): TimeRange {\n\t\tconst now = new Date();\n\t\tconst oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);\n\t\treturn { start: oneHourAgo, end: now };\n\t}\n\n\tprivate getBucketsInRange(range: TimeRange): MetricsBucket[] {\n\t\tconst startTs = range.start.getTime();\n\t\tconst endTs = range.end.getTime();\n\n\t\tconst results: MetricsBucket[] = [];\n\t\tfor (const [ts, bucket] of this.buckets) {\n\t\t\tif (ts >= startTs && ts <= endTs) {\n\t\t\t\tresults.push(bucket);\n\t\t\t}\n\t\t}\n\n\t\treturn results.sort((a, b) => a.timestamp - b.timestamp);\n\t}\n\n\tprivate buildTimeSeries(\n\t\tbuckets: MetricsBucket[],\n\t\t_range: TimeRange,\n\t\ttargetBucketSize: number,\n\t): TimeSeriesPoint[] {\n\t\tif (buckets.length === 0) return [];\n\n\t\t// If target bucket size matches, just convert\n\t\tif (targetBucketSize === this.options.bucketSize) {\n\t\t\treturn buckets.map((b) => ({\n\t\t\t\ttimestamp: b.timestamp,\n\t\t\t\tcount: b.count,\n\t\t\t\tavgDuration: b.count > 0 ? b.durationSum / b.count : 0,\n\t\t\t\terrorCount: b.errorCount,\n\t\t\t}));\n\t\t}\n\n\t\t// Re-bucket into target size\n\t\tconst points: Map<number, TimeSeriesPoint> = new Map();\n\n\t\tfor (const bucket of buckets) {\n\t\t\tconst targetTs =\n\t\t\t\tMath.floor(bucket.timestamp / targetBucketSize) * targetBucketSize;\n\t\t\tlet point = points.get(targetTs);\n\n\t\t\tif (!point) {\n\t\t\t\tpoint = {\n\t\t\t\t\ttimestamp: targetTs,\n\t\t\t\t\tcount: 0,\n\t\t\t\t\tavgDuration: 0,\n\t\t\t\t\terrorCount: 0,\n\t\t\t\t};\n\t\t\t\tpoints.set(targetTs, point);\n\t\t\t}\n\n\t\t\t// Weighted average for duration\n\t\t\tconst totalCount = point.count + bucket.count;\n\t\t\tif (totalCount > 0) {\n\t\t\t\tpoint.avgDuration =\n\t\t\t\t\t(point.avgDuration * point.count +\n\t\t\t\t\t\t(bucket.count > 0 ? bucket.durationSum / bucket.count : 0) *\n\t\t\t\t\t\t\tbucket.count) /\n\t\t\t\t\ttotalCount;\n\t\t\t}\n\t\t\tpoint.count = totalCount;\n\t\t\tpoint.errorCount += bucket.errorCount;\n\t\t}\n\n\t\treturn Array.from(points.values()).sort(\n\t\t\t(a, b) => a.timestamp - b.timestamp,\n\t\t);\n\t}\n\n\tprivate percentile(sortedValues: number[], p: number): number {\n\t\tif (sortedValues.length === 0) return 0;\n\t\tif (sortedValues.length === 1) return sortedValues[0]!;\n\n\t\tconst index = (p / 100) * (sortedValues.length - 1);\n\t\tconst lower = Math.floor(index);\n\t\tconst upper = Math.ceil(index);\n\n\t\tif (lower === upper) return sortedValues[lower]!;\n\n\t\t// Linear interpolation\n\t\tconst weight = index - lower;\n\t\tconst lowerVal = sortedValues[lower]!;\n\t\tconst upperVal = sortedValues[upper]!;\n\t\treturn lowerVal * (1 - weight) + upperVal * weight;\n\t}\n\n\tprivate emptyMetrics(): RequestMetrics {\n\t\treturn {\n\t\t\ttotalRequests: 0,\n\t\t\tavgDuration: 0,\n\t\t\tp50Duration: 0,\n\t\t\tp95Duration: 0,\n\t\t\tp99Duration: 0,\n\t\t\terrorRate: 0,\n\t\t\tsuccessRate: 100,\n\t\t\trequestsPerSecond: 0,\n\t\t\ttimeSeries: [],\n\t\t};\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { MetricBucket, MetricPoint, MetricQuery, MetricResult, MetricsStorageConfig, PartitionInfo, RollupOptions } from "./types-BS3Rx8Sk.cjs";
|
|
2
|
-
|
|
3
|
-
//#region src/metrics/storage/MetricsStorage.d.ts
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Interface for metrics storage backends.
|
|
7
|
-
*
|
|
8
|
-
* Implementations can use different storage technologies:
|
|
9
|
-
* - In-memory (development/testing)
|
|
10
|
-
* - PostgreSQL with TimescaleDB
|
|
11
|
-
* - ClickHouse
|
|
12
|
-
* - InfluxDB
|
|
13
|
-
*/
|
|
14
|
-
interface MetricsStorage {
|
|
15
|
-
/**
|
|
16
|
-
* Write raw metric points to storage.
|
|
17
|
-
* Points are typically buffered and flushed in batches.
|
|
18
|
-
*/
|
|
19
|
-
write(points: MetricPoint[]): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Query metrics with aggregation.
|
|
22
|
-
* Returns time series data with statistics.
|
|
23
|
-
*/
|
|
24
|
-
query(query: MetricQuery): Promise<MetricResult[]>;
|
|
25
|
-
/**
|
|
26
|
-
* Get a single aggregated bucket for a specific time range.
|
|
27
|
-
* Useful for dashboards showing current values.
|
|
28
|
-
*/
|
|
29
|
-
getBucket(projectId: string, name: string, bucket: Date): Promise<MetricBucket | null>;
|
|
30
|
-
/**
|
|
31
|
-
* Roll up data from one tier to another.
|
|
32
|
-
* Aggregates fine-grained data into coarser buckets.
|
|
33
|
-
*/
|
|
34
|
-
rollup(options: RollupOptions): Promise<number>;
|
|
35
|
-
/**
|
|
36
|
-
* Prune old data based on retention policies.
|
|
37
|
-
* Returns the number of records deleted.
|
|
38
|
-
*/
|
|
39
|
-
prune(): Promise<number>;
|
|
40
|
-
/**
|
|
41
|
-
* List partitions for management and monitoring.
|
|
42
|
-
*/
|
|
43
|
-
listPartitions(tier?: string): Promise<PartitionInfo[]>;
|
|
44
|
-
/**
|
|
45
|
-
* Get storage configuration.
|
|
46
|
-
*/
|
|
47
|
-
getConfig(): MetricsStorageConfig;
|
|
48
|
-
/**
|
|
49
|
-
* Flush any buffered data to storage.
|
|
50
|
-
*/
|
|
51
|
-
flush(): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Close the storage connection and clean up resources.
|
|
54
|
-
*/
|
|
55
|
-
close(): Promise<void>;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=MetricsStorage.d.ts.map
|
|
58
|
-
//#endregion
|
|
59
|
-
export { MetricsStorage };
|
|
60
|
-
//# sourceMappingURL=MetricsStorage-B86e4131.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsStorage-B86e4131.d.cts","names":[],"sources":["../src/metrics/storage/MetricsStorage.ts"],"sourcesContent":[],"mappings":";;;;;;AAmBA;;;;;;;AAoBU,UApBO,cAAA,CAoBP;EAAI;;;;EAO0B,KAM9B,CAAA,MAAA,EA5BK,WA4BL,EAAA,CAAA,EA5BqB,OA4BrB,CAAA,IAAA,CAAA;EAAO;;;;EAeA,KAKP,CAAA,KAAA,EA1CI,WA0CJ,CAAA,EA1CkB,OA0ClB,CA1C0B,YA0C1B,EAAA,CAAA;EAAO;;;;qDAjCP,OACN,QAAQ;;;;;kBAMK,gBAAgB;;;;;WAMvB;;;;iCAKsB,QAAQ;;;;eAK1B;;;;WAKJ;;;;WAKA"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { MetricBucket, MetricPoint, MetricQuery, MetricResult, MetricsStorageConfig, PartitionInfo, RollupOptions } from "./types-CbNGXnJE.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/metrics/storage/MetricsStorage.d.ts
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Interface for metrics storage backends.
|
|
7
|
-
*
|
|
8
|
-
* Implementations can use different storage technologies:
|
|
9
|
-
* - In-memory (development/testing)
|
|
10
|
-
* - PostgreSQL with TimescaleDB
|
|
11
|
-
* - ClickHouse
|
|
12
|
-
* - InfluxDB
|
|
13
|
-
*/
|
|
14
|
-
interface MetricsStorage {
|
|
15
|
-
/**
|
|
16
|
-
* Write raw metric points to storage.
|
|
17
|
-
* Points are typically buffered and flushed in batches.
|
|
18
|
-
*/
|
|
19
|
-
write(points: MetricPoint[]): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Query metrics with aggregation.
|
|
22
|
-
* Returns time series data with statistics.
|
|
23
|
-
*/
|
|
24
|
-
query(query: MetricQuery): Promise<MetricResult[]>;
|
|
25
|
-
/**
|
|
26
|
-
* Get a single aggregated bucket for a specific time range.
|
|
27
|
-
* Useful for dashboards showing current values.
|
|
28
|
-
*/
|
|
29
|
-
getBucket(projectId: string, name: string, bucket: Date): Promise<MetricBucket | null>;
|
|
30
|
-
/**
|
|
31
|
-
* Roll up data from one tier to another.
|
|
32
|
-
* Aggregates fine-grained data into coarser buckets.
|
|
33
|
-
*/
|
|
34
|
-
rollup(options: RollupOptions): Promise<number>;
|
|
35
|
-
/**
|
|
36
|
-
* Prune old data based on retention policies.
|
|
37
|
-
* Returns the number of records deleted.
|
|
38
|
-
*/
|
|
39
|
-
prune(): Promise<number>;
|
|
40
|
-
/**
|
|
41
|
-
* List partitions for management and monitoring.
|
|
42
|
-
*/
|
|
43
|
-
listPartitions(tier?: string): Promise<PartitionInfo[]>;
|
|
44
|
-
/**
|
|
45
|
-
* Get storage configuration.
|
|
46
|
-
*/
|
|
47
|
-
getConfig(): MetricsStorageConfig;
|
|
48
|
-
/**
|
|
49
|
-
* Flush any buffered data to storage.
|
|
50
|
-
*/
|
|
51
|
-
flush(): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Close the storage connection and clean up resources.
|
|
54
|
-
*/
|
|
55
|
-
close(): Promise<void>;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=MetricsStorage.d.ts.map
|
|
58
|
-
//#endregion
|
|
59
|
-
export { MetricsStorage };
|
|
60
|
-
//# sourceMappingURL=MetricsStorage-BWyP2_12.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsStorage-BWyP2_12.d.mts","names":[],"sources":["../src/metrics/storage/MetricsStorage.ts"],"sourcesContent":[],"mappings":";;;;;;AAmBA;;;;;;;AAoBU,UApBO,cAAA,CAoBP;EAAI;;;;EAO0B,KAM9B,CAAA,MAAA,EA5BK,WA4BL,EAAA,CAAA,EA5BqB,OA4BrB,CAAA,IAAA,CAAA;EAAO;;;;EAeA,KAKP,CAAA,KAAA,EA1CI,WA0CJ,CAAA,EA1CkB,OA0ClB,CA1C0B,YA0C1B,EAAA,CAAA;EAAO;;;;qDAjCP,OACN,QAAQ;;;;;kBAMK,gBAAgB;;;;;WAMvB;;;;iCAKsB,QAAQ;;;;eAK1B;;;;WAKJ;;;;WAKA"}
|
|
File without changes
|
|
File without changes
|