@posthog/core
Advanced tools
| import type { MetricsConfig } from '@posthog/types'; | ||
| import type { ResolvedPostHogMetricsConfig } from './types'; | ||
| /** | ||
| * Resolves the public `metrics` config into the shape `PostHogMetrics` | ||
| * consumes. Same precedence rule as logs: OTLP keys in `resourceAttributes` | ||
| * win over the named config fields. | ||
| */ | ||
| export declare function resolveMetricsConfig(config: MetricsConfig | undefined): ResolvedPostHogMetricsConfig; | ||
| //# sourceMappingURL=config.d.ts.map |
| {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/metrics/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAK3D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,4BAA4B,CAWpG"} |
| "use strict"; | ||
| var __webpack_require__ = {}; | ||
| (()=>{ | ||
| __webpack_require__.d = (exports1, definition)=>{ | ||
| for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { | ||
| enumerable: true, | ||
| get: definition[key] | ||
| }); | ||
| }; | ||
| })(); | ||
| (()=>{ | ||
| __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); | ||
| })(); | ||
| (()=>{ | ||
| __webpack_require__.r = (exports1)=>{ | ||
| if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { | ||
| value: 'Module' | ||
| }); | ||
| Object.defineProperty(exports1, '__esModule', { | ||
| value: true | ||
| }); | ||
| }; | ||
| })(); | ||
| var __webpack_exports__ = {}; | ||
| __webpack_require__.r(__webpack_exports__); | ||
| __webpack_require__.d(__webpack_exports__, { | ||
| resolveMetricsConfig: ()=>resolveMetricsConfig | ||
| }); | ||
| const DEFAULT_FLUSH_INTERVAL_MS = 10000; | ||
| const DEFAULT_MAX_SERIES_PER_FLUSH = 1000; | ||
| function resolveMetricsConfig(config) { | ||
| const resourceAttributes = config?.resourceAttributes; | ||
| return { | ||
| serviceName: resourceAttributes?.['service.name'] ?? config?.serviceName, | ||
| serviceVersion: resourceAttributes?.['service.version'] ?? config?.serviceVersion, | ||
| environment: resourceAttributes?.['deployment.environment'] ?? config?.environment, | ||
| resourceAttributes, | ||
| beforeSend: config?.beforeSend, | ||
| flushIntervalMs: config?.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS, | ||
| maxSeriesPerFlush: config?.maxSeriesPerFlush ?? DEFAULT_MAX_SERIES_PER_FLUSH | ||
| }; | ||
| } | ||
| exports.resolveMetricsConfig = __webpack_exports__.resolveMetricsConfig; | ||
| for(var __webpack_i__ in __webpack_exports__)if (-1 === [ | ||
| "resolveMetricsConfig" | ||
| ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; | ||
| Object.defineProperty(exports, '__esModule', { | ||
| value: true | ||
| }); |
| const DEFAULT_FLUSH_INTERVAL_MS = 10000; | ||
| const DEFAULT_MAX_SERIES_PER_FLUSH = 1000; | ||
| function resolveMetricsConfig(config) { | ||
| const resourceAttributes = config?.resourceAttributes; | ||
| return { | ||
| serviceName: resourceAttributes?.['service.name'] ?? config?.serviceName, | ||
| serviceVersion: resourceAttributes?.['service.version'] ?? config?.serviceVersion, | ||
| environment: resourceAttributes?.['deployment.environment'] ?? config?.environment, | ||
| resourceAttributes, | ||
| beforeSend: config?.beforeSend, | ||
| flushIntervalMs: config?.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS, | ||
| maxSeriesPerFlush: config?.maxSeriesPerFlush ?? DEFAULT_MAX_SERIES_PER_FLUSH | ||
| }; | ||
| } | ||
| export { resolveMetricsConfig }; |
| import type { MetricsConfig } from '@posthog/types' | ||
| import type { ResolvedPostHogMetricsConfig } from './types' | ||
| const DEFAULT_FLUSH_INTERVAL_MS = 10000 | ||
| const DEFAULT_MAX_SERIES_PER_FLUSH = 1000 | ||
| /** | ||
| * Resolves the public `metrics` config into the shape `PostHogMetrics` | ||
| * consumes. Same precedence rule as logs: OTLP keys in `resourceAttributes` | ||
| * win over the named config fields. | ||
| */ | ||
| export function resolveMetricsConfig(config: MetricsConfig | undefined): ResolvedPostHogMetricsConfig { | ||
| const resourceAttributes = config?.resourceAttributes | ||
| return { | ||
| serviceName: (resourceAttributes?.['service.name'] as string | undefined) ?? config?.serviceName, | ||
| serviceVersion: (resourceAttributes?.['service.version'] as string | undefined) ?? config?.serviceVersion, | ||
| environment: (resourceAttributes?.['deployment.environment'] as string | undefined) ?? config?.environment, | ||
| resourceAttributes, | ||
| beforeSend: config?.beforeSend, | ||
| flushIntervalMs: config?.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS, | ||
| maxSeriesPerFlush: config?.maxSeriesPerFlush ?? DEFAULT_MAX_SERIES_PER_FLUSH, | ||
| } | ||
| } |
+2
-2
@@ -10,5 +10,5 @@ export { getFeatureFlagValue, getEnabledFromValue, getVariantFromValue, parsePayload, flagDetailsToResults, } from './featureFlagUtils'; | ||
| export type { ExceptionRateLimiterConfig } from '@posthog/types'; | ||
| export { PostHogMetrics, buildOtlpMetricsPayload, buildMetricsResourceAttributes, DEFAULT_HISTOGRAM_BOUNDS, } from './metrics'; | ||
| export { PostHogMetrics, buildOtlpMetricsPayload, buildMetricsResourceAttributes, DEFAULT_HISTOGRAM_BOUNDS, resolveMetricsConfig, } from './metrics'; | ||
| export type { MetricsHost, PostHogMetricsConfig, ResolvedPostHogMetricsConfig, SendMetricsBatchOutcome, } from './metrics'; | ||
| export type { CaptureMetricOptions, MetricAttributes, MetricAttributeValue, MetricSample, MetricType, } from './metrics/types'; | ||
| export type { CaptureMetricOptions, MetricAttributes, MetricAttributeValue, MetricSample, MetricType, Metrics, MetricsConfig, } from './metrics/types'; | ||
| export { uuidv7 } from './vendor/uuidv7'; | ||
@@ -15,0 +15,0 @@ export * from './cookie'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,GACX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"} |
+9
-0
@@ -115,2 +115,3 @@ "use strict"; | ||
| parsePayload: ()=>_featureFlagUtils__WEBPACK_IMPORTED_MODULE_0__.parsePayload, | ||
| resolveMetricsConfig: ()=>_metrics__WEBPACK_IMPORTED_MODULE_6__.resolveMetricsConfig, | ||
| toOtlpAnyValue: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.toOtlpAnyValue, | ||
@@ -147,2 +148,3 @@ toOtlpKeyValueList: ()=>_logs_logs_utils__WEBPACK_IMPORTED_MODULE_4__.toOtlpKeyValueList, | ||
| "default", | ||
| "resolveMetricsConfig", | ||
| "getRequirementsHint", | ||
@@ -189,2 +191,3 @@ "isGzipData", | ||
| "default", | ||
| "resolveMetricsConfig", | ||
| "getRequirementsHint", | ||
@@ -226,2 +229,3 @@ "isGzipData", | ||
| "default", | ||
| "resolveMetricsConfig", | ||
| "getRequirementsHint", | ||
@@ -263,2 +267,3 @@ "isGzipData", | ||
| "default", | ||
| "resolveMetricsConfig", | ||
| "getRequirementsHint", | ||
@@ -300,2 +305,3 @@ "isGzipData", | ||
| "default", | ||
| "resolveMetricsConfig", | ||
| "getRequirementsHint", | ||
@@ -337,2 +343,3 @@ "isGzipData", | ||
| "default", | ||
| "resolveMetricsConfig", | ||
| "getRequirementsHint", | ||
@@ -376,2 +383,3 @@ "isGzipData", | ||
| exports.parsePayload = __webpack_exports__.parsePayload; | ||
| exports.resolveMetricsConfig = __webpack_exports__.resolveMetricsConfig; | ||
| exports.toOtlpAnyValue = __webpack_exports__.toOtlpAnyValue; | ||
@@ -406,2 +414,3 @@ exports.toOtlpKeyValueList = __webpack_exports__.toOtlpKeyValueList; | ||
| "parsePayload", | ||
| "resolveMetricsConfig", | ||
| "toOtlpAnyValue", | ||
@@ -408,0 +417,0 @@ "toOtlpKeyValueList", |
+2
-2
@@ -5,3 +5,3 @@ import { flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getVariantFromValue, parsePayload } from "./featureFlagUtils.mjs"; | ||
| import { PostHogLogs } from "./logs/index.mjs"; | ||
| import { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload } from "./metrics/index.mjs"; | ||
| import { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload, resolveMetricsConfig } from "./metrics/index.mjs"; | ||
| import { uuidv7 } from "./vendor/uuidv7.mjs"; | ||
@@ -16,2 +16,2 @@ import { getLengthFromRules, getRequirementsHint, getValidationError } from "./surveys/validation.mjs"; | ||
| import * as __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ from "./error-tracking/index.mjs"; | ||
| export { DEFAULT_HISTOGRAM_BOUNDS, __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, PostHogLogs, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpLogRecord, buildOtlpLogsPayload, buildOtlpMetricsPayload, buildResourceAttributes, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getLengthFromRules, getOtlpSeverityNumber, getOtlpSeverityText, getRequirementsHint, getValidationError, getVariantFromValue, gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, parsePayload, toOtlpAnyValue, toOtlpKeyValueList, uuidv7 }; | ||
| export { DEFAULT_HISTOGRAM_BOUNDS, __WEBPACK_EXTERNAL_MODULE__error_tracking_index_mjs_b3406d6f__ as ErrorTracking, PostHogLogs, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpLogRecord, buildOtlpLogsPayload, buildOtlpMetricsPayload, buildResourceAttributes, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getLengthFromRules, getOtlpSeverityNumber, getOtlpSeverityText, getRequirementsHint, getValidationError, getVariantFromValue, gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, parsePayload, resolveMetricsConfig, toOtlpAnyValue, toOtlpKeyValueList, uuidv7 }; |
@@ -28,2 +28,3 @@ import type { CaptureMetricOptions, OtlpMetricsPayload } from '@posthog/types'; | ||
| private _typeCollisionWarned; | ||
| private _generation; | ||
| constructor(_instance: MetricsHost, _config: ResolvedPostHogMetricsConfig, _logger: Logger); | ||
@@ -43,5 +44,10 @@ count(name: string, value?: number, options?: CaptureMetricOptions): void; | ||
| drainWindow(): OtlpMetricsPayload | null; | ||
| /** Clears the flush timer and drops the current window. */ | ||
| /** Clears the flush timer, drops the current window, and invalidates in-flight flushes. */ | ||
| reset(): void; | ||
| private _capture; | ||
| /** | ||
| * Cardinality gate for adding a series to the live window — warns once per | ||
| * window when the cap is hit. Applied on capture and on merge-back alike. | ||
| */ | ||
| private _admitNewSeries; | ||
| private _fold; | ||
@@ -62,3 +68,4 @@ private _runBeforeSend; | ||
| export { buildOtlpMetricsPayload, buildMetricsResourceAttributes, DEFAULT_HISTOGRAM_BOUNDS } from './metrics-utils'; | ||
| export { resolveMetricsConfig } from './config'; | ||
| export type { MetricsHost, PostHogMetricsConfig, ResolvedPostHogMetricsConfig, SendMetricsBatchOutcome } from './types'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAMpB,kBAAkB,EAEnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAWtC,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AA2BxE;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IAevB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAC,CAAmC;IAGvD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,gBAAgB,CAAQ;IAIhC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,oBAAoB,CAAoB;gBAG7B,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,MAAM;IAGlC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAI5E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAIxE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAI5E,iFAAiF;IACjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtB;;;;;;OAMG;IACH,WAAW,IAAI,kBAAkB,GAAG,IAAI;IAYxC,2DAA2D;IAC3D,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,QAAQ;IAgEhB,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,gBAAgB;YAOV,QAAQ;IAiCtB,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAwDrB,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;CAiCzB;AAED,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AACnH,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAMpB,kBAAkB,EAEnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAWtC,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AA2BxE;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IAmBvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IApB1B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAC,CAAmC;IAGvD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,gBAAgB,CAAQ;IAIhC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,oBAAoB,CAAoB;IAIhD,OAAO,CAAC,WAAW,CAAI;gBAGJ,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,MAAM;IAGlC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAI5E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAIxE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAI5E,iFAAiF;IACjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtB;;;;;;OAMG;IACH,WAAW,IAAI,kBAAkB,GAAG,IAAI;IAYxC,2FAA2F;IAC3F,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,QAAQ;IAsEhB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;YAOV,QAAQ;IAuCtB,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAwDrB,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;CAqCzB;AAED,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"} |
+39
-19
@@ -30,2 +30,3 @@ "use strict"; | ||
| buildOtlpMetricsPayload: ()=>external_metrics_utils_js_namespaceObject.buildOtlpMetricsPayload, | ||
| resolveMetricsConfig: ()=>external_config_js_namespaceObject.resolveMetricsConfig, | ||
| DEFAULT_HISTOGRAM_BOUNDS: ()=>external_metrics_utils_js_namespaceObject.DEFAULT_HISTOGRAM_BOUNDS | ||
@@ -36,2 +37,3 @@ }); | ||
| const external_metrics_utils_js_namespaceObject = require("./metrics-utils.js"); | ||
| const external_config_js_namespaceObject = require("./config.js"); | ||
| const OTLP_TEMPORALITY_DELTA = 1; | ||
@@ -48,2 +50,3 @@ class PostHogMetrics { | ||
| this._typeCollisionWarned = new Set(); | ||
| this._generation = 0; | ||
| } | ||
@@ -99,2 +102,3 @@ count(name, value = 1, options) { | ||
| reset() { | ||
| this._generation++; | ||
| this._clearFlushTimer(); | ||
@@ -114,18 +118,16 @@ this._series = new Map(); | ||
| if ('count' === filtered.type && filtered.value < 0) return void this._logger.warn(`Dropping count '${filtered.name}': counters are monotonic, value must be >= 0`); | ||
| const seenType = this._typeByName.get(filtered.name); | ||
| if (void 0 === seenType) this._typeByName.set(filtered.name, filtered.type); | ||
| else if (seenType !== filtered.type && !this._typeCollisionWarned.has(filtered.name)) { | ||
| this._typeCollisionWarned.add(filtered.name); | ||
| this._logger.warn(`Metric name '${filtered.name}' is already used as a ${seenType}; recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.`); | ||
| let attributes; | ||
| let key; | ||
| try { | ||
| attributes = filtered.attributes ? { | ||
| ...filtered.attributes | ||
| } : void 0; | ||
| key = (0, external_metrics_utils_js_namespaceObject.seriesKey)(filtered.type, filtered.name, filtered.unit, attributes); | ||
| } catch (e) { | ||
| this._logger.warn(`Dropping metric '${filtered.name}': attributes could not be serialized`, e); | ||
| return; | ||
| } | ||
| const key = (0, external_metrics_utils_js_namespaceObject.seriesKey)(filtered.type, filtered.name, filtered.unit, filtered.attributes); | ||
| let state = this._series.get(key); | ||
| if (!state) { | ||
| if (this._series.size >= this._config.maxSeriesPerFlush) { | ||
| if (!this._seriesCapWarned) { | ||
| this._seriesCapWarned = true; | ||
| this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`); | ||
| } | ||
| return; | ||
| } | ||
| if (!this._admitNewSeries()) return; | ||
| state = { | ||
@@ -135,5 +137,3 @@ name: filtered.name, | ||
| unit: filtered.unit, | ||
| attributes: filtered.attributes ? { | ||
| ...filtered.attributes | ||
| } : void 0, | ||
| attributes, | ||
| windowStartMs: Date.now() | ||
@@ -143,5 +143,19 @@ }; | ||
| } | ||
| const seenType = this._typeByName.get(filtered.name); | ||
| if (void 0 === seenType) this._typeByName.set(filtered.name, filtered.type); | ||
| else if (seenType !== filtered.type && !this._typeCollisionWarned.has(filtered.name)) { | ||
| this._typeCollisionWarned.add(filtered.name); | ||
| this._logger.warn(`Metric name '${filtered.name}' is already used as a ${seenType}; recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.`); | ||
| } | ||
| this._fold(state, filtered.value); | ||
| this._armFlushTimer(); | ||
| } | ||
| _admitNewSeries() { | ||
| if (this._series.size < this._config.maxSeriesPerFlush) return true; | ||
| if (!this._seriesCapWarned) { | ||
| this._seriesCapWarned = true; | ||
| this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`); | ||
| } | ||
| return false; | ||
| } | ||
| _fold(state, value) { | ||
@@ -198,3 +212,5 @@ switch(state.type){ | ||
| this._flushTimer = void 0; | ||
| this.flush().catch(()=>{}); | ||
| this.flush().catch((e)=>{ | ||
| this._logger.error('Metrics flush failed:', e); | ||
| }); | ||
| }, this._config.flushIntervalMs); | ||
@@ -215,3 +231,5 @@ } | ||
| this._typeCollisionWarned = new Set(); | ||
| const generation = this._generation; | ||
| const outcome = await this._instance._sendMetricsBatch(this._buildPayload(window)); | ||
| if (generation !== this._generation) return; | ||
| switch(outcome.kind){ | ||
@@ -300,3 +318,3 @@ case 'ok': | ||
| if (!current) { | ||
| this._series.set(key, old); | ||
| if (this._admitNewSeries()) this._series.set(key, old); | ||
| continue; | ||
@@ -328,2 +346,3 @@ } | ||
| exports.buildOtlpMetricsPayload = __webpack_exports__.buildOtlpMetricsPayload; | ||
| exports.resolveMetricsConfig = __webpack_exports__.resolveMetricsConfig; | ||
| for(var __webpack_i__ in __webpack_exports__)if (-1 === [ | ||
@@ -333,3 +352,4 @@ "DEFAULT_HISTOGRAM_BOUNDS", | ||
| "buildMetricsResourceAttributes", | ||
| "buildOtlpMetricsPayload" | ||
| "buildOtlpMetricsPayload", | ||
| "resolveMetricsConfig" | ||
| ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; | ||
@@ -336,0 +356,0 @@ Object.defineProperty(exports, '__esModule', { |
+36
-19
| import { isArray, safeSetTimeout } from "../utils/index.mjs"; | ||
| import { toOtlpKeyValueList } from "../logs/logs-utils.mjs"; | ||
| import { DEFAULT_HISTOGRAM_BOUNDS, bucketIndexFor, buildMetricsResourceAttributes, buildOtlpMetricsPayload, msToUnixNano, seriesKey } from "./metrics-utils.mjs"; | ||
| import { resolveMetricsConfig } from "./config.mjs"; | ||
| const OTLP_TEMPORALITY_DELTA = 1; | ||
@@ -15,2 +16,3 @@ class PostHogMetrics { | ||
| this._typeCollisionWarned = new Set(); | ||
| this._generation = 0; | ||
| } | ||
@@ -66,2 +68,3 @@ count(name, value = 1, options) { | ||
| reset() { | ||
| this._generation++; | ||
| this._clearFlushTimer(); | ||
@@ -81,18 +84,16 @@ this._series = new Map(); | ||
| if ('count' === filtered.type && filtered.value < 0) return void this._logger.warn(`Dropping count '${filtered.name}': counters are monotonic, value must be >= 0`); | ||
| const seenType = this._typeByName.get(filtered.name); | ||
| if (void 0 === seenType) this._typeByName.set(filtered.name, filtered.type); | ||
| else if (seenType !== filtered.type && !this._typeCollisionWarned.has(filtered.name)) { | ||
| this._typeCollisionWarned.add(filtered.name); | ||
| this._logger.warn(`Metric name '${filtered.name}' is already used as a ${seenType}; recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.`); | ||
| let attributes; | ||
| let key; | ||
| try { | ||
| attributes = filtered.attributes ? { | ||
| ...filtered.attributes | ||
| } : void 0; | ||
| key = seriesKey(filtered.type, filtered.name, filtered.unit, attributes); | ||
| } catch (e) { | ||
| this._logger.warn(`Dropping metric '${filtered.name}': attributes could not be serialized`, e); | ||
| return; | ||
| } | ||
| const key = seriesKey(filtered.type, filtered.name, filtered.unit, filtered.attributes); | ||
| let state = this._series.get(key); | ||
| if (!state) { | ||
| if (this._series.size >= this._config.maxSeriesPerFlush) { | ||
| if (!this._seriesCapWarned) { | ||
| this._seriesCapWarned = true; | ||
| this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`); | ||
| } | ||
| return; | ||
| } | ||
| if (!this._admitNewSeries()) return; | ||
| state = { | ||
@@ -102,5 +103,3 @@ name: filtered.name, | ||
| unit: filtered.unit, | ||
| attributes: filtered.attributes ? { | ||
| ...filtered.attributes | ||
| } : void 0, | ||
| attributes, | ||
| windowStartMs: Date.now() | ||
@@ -110,5 +109,19 @@ }; | ||
| } | ||
| const seenType = this._typeByName.get(filtered.name); | ||
| if (void 0 === seenType) this._typeByName.set(filtered.name, filtered.type); | ||
| else if (seenType !== filtered.type && !this._typeCollisionWarned.has(filtered.name)) { | ||
| this._typeCollisionWarned.add(filtered.name); | ||
| this._logger.warn(`Metric name '${filtered.name}' is already used as a ${seenType}; recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.`); | ||
| } | ||
| this._fold(state, filtered.value); | ||
| this._armFlushTimer(); | ||
| } | ||
| _admitNewSeries() { | ||
| if (this._series.size < this._config.maxSeriesPerFlush) return true; | ||
| if (!this._seriesCapWarned) { | ||
| this._seriesCapWarned = true; | ||
| this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`); | ||
| } | ||
| return false; | ||
| } | ||
| _fold(state, value) { | ||
@@ -165,3 +178,5 @@ switch(state.type){ | ||
| this._flushTimer = void 0; | ||
| this.flush().catch(()=>{}); | ||
| this.flush().catch((e)=>{ | ||
| this._logger.error('Metrics flush failed:', e); | ||
| }); | ||
| }, this._config.flushIntervalMs); | ||
@@ -182,3 +197,5 @@ } | ||
| this._typeCollisionWarned = new Set(); | ||
| const generation = this._generation; | ||
| const outcome = await this._instance._sendMetricsBatch(this._buildPayload(window)); | ||
| if (generation !== this._generation) return; | ||
| switch(outcome.kind){ | ||
@@ -267,3 +284,3 @@ case 'ok': | ||
| if (!current) { | ||
| this._series.set(key, old); | ||
| if (this._admitNewSeries()) this._series.set(key, old); | ||
| continue; | ||
@@ -291,2 +308,2 @@ } | ||
| } | ||
| export { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload }; | ||
| export { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload, resolveMetricsConfig }; |
@@ -1,2 +0,2 @@ | ||
| export type { MetricAttributeValue, MetricAttributes, MetricType, CaptureMetricOptions, MetricSample, BeforeSendMetricFn, Metrics, OtlpNumberDataPoint, OtlpHistogramDataPoint, OtlpMetric, OtlpMetricsPayload, } from '@posthog/types'; | ||
| export type { MetricAttributeValue, MetricAttributes, MetricType, MetricsConfig, CaptureMetricOptions, MetricSample, BeforeSendMetricFn, Metrics, OtlpNumberDataPoint, OtlpHistogramDataPoint, OtlpMetric, OtlpMetricsPayload, } from '@posthog/types'; | ||
| import type { BeforeSendMetricFn, MetricAttributeValue, OtlpMetricsPayload } from '@posthog/types'; | ||
@@ -3,0 +3,0 @@ /** Same tagged outcome shape as `SendLogsBatchOutcome` — one policy for both signals. */ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAElG,yFAAyF;AACzF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAChF,YAAY,IAAI,MAAM,CAAA;IACtB,iBAAiB,IAAI,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IAEzD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAAA;CACvD;AAID,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;CAC1B"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAElG,yFAAyF;AACzF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAChF,YAAY,IAAI,MAAM,CAAA;IACtB,iBAAiB,IAAI,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IAEzD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAAA;CACvD;AAID,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;CAC1B"} |
@@ -1,2 +0,3 @@ | ||
| import type { OtlpLogsPayload } from '@posthog/types'; | ||
| import type { OtlpLogsPayload, OtlpMetricsPayload } from '@posthog/types'; | ||
| import type { SendMetricsBatchOutcome } from './metrics/types'; | ||
| import { SimpleEventEmitter } from './eventemitter'; | ||
@@ -309,2 +310,9 @@ import { PostHogFlagsResponse, PostHogCoreOptions, PostHogEventProperties, PostHogCaptureOptions, JsonType, PostHogRemoteConfig, FeatureFlagValue, PostHogFeatureFlagDetails, FeatureFlagDetail, SurveyResponse, PostHogFetchResponse, PostHogFetchOptions, PostHogPersistedProperty, Logger, GetFlagsResult } from './types'; | ||
| _sendLogsBatch(payload: OtlpLogsPayload): Promise<SendLogsBatchOutcome>; | ||
| /** | ||
| * Sends a pre-built OTLP metrics payload to `/i/v1/metrics`. Same tagged | ||
| * outcome contract and error classification as `_sendLogsBatch` — this is | ||
| * the `MetricsHost._sendMetricsBatch` implementation, so `PostHogMetrics` | ||
| * can use any core-based SDK as its host. | ||
| */ | ||
| _sendMetricsBatch(payload: OtlpMetricsPayload): Promise<SendMetricsBatchOutcome>; | ||
| private fetchWithRetry; | ||
@@ -311,0 +319,0 @@ _shutdown(shutdownTimeoutMs?: number): Promise<void>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"posthog-core-stateless.d.ts","sourceRoot":"","sources":["../src/posthog-core-stateless.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"posthog-core-stateless.d.ts","sourceRoot":"","sources":["../src/posthog-core-stateless.ts"],"names":[],"mappings":"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"} |
@@ -806,2 +806,45 @@ "use strict"; | ||
| } | ||
| async _sendMetricsBatch(payload) { | ||
| if (this.disabled) return { | ||
| kind: 'fatal', | ||
| error: new Error('The client is disabled') | ||
| }; | ||
| const serialized = JSON.stringify(payload); | ||
| const url = `${this.host}/i/v1/metrics?token=${encodeURIComponent(this.apiKey)}`; | ||
| const gzippedPayload = this.disableCompression ? null : await (0, external_gzip_js_namespaceObject.gzipCompress)(serialized, this.isDebug); | ||
| const fetchOptions = { | ||
| method: 'POST', | ||
| headers: { | ||
| ...this.getCustomHeaders(), | ||
| 'Content-Type': 'application/json', | ||
| ...null !== gzippedPayload && { | ||
| 'Content-Encoding': 'gzip' | ||
| } | ||
| }, | ||
| body: gzippedPayload || serialized | ||
| }; | ||
| try { | ||
| await this.fetchWithRetry(url, fetchOptions, { | ||
| retryCheck: (err)=>{ | ||
| if (isPostHogFetchContentTooLargeError(err)) return false; | ||
| return isPostHogFetchRetryableError(err); | ||
| } | ||
| }); | ||
| return { | ||
| kind: 'ok' | ||
| }; | ||
| } catch (err) { | ||
| if (isPostHogFetchContentTooLargeError(err)) return { | ||
| kind: 'too-large' | ||
| }; | ||
| if (isPostHogFetchRetryableError(err)) return { | ||
| kind: 'retry-later', | ||
| error: err | ||
| }; | ||
| return { | ||
| kind: 'fatal', | ||
| error: err | ||
| }; | ||
| } | ||
| } | ||
| async fetchWithRetry(url, options, retryOptions, requestTimeout) { | ||
@@ -808,0 +851,0 @@ const body = options.body ? options.body : ''; |
@@ -773,2 +773,45 @@ import { SimpleEventEmitter } from "./eventemitter.mjs"; | ||
| } | ||
| async _sendMetricsBatch(payload) { | ||
| if (this.disabled) return { | ||
| kind: 'fatal', | ||
| error: new Error('The client is disabled') | ||
| }; | ||
| const serialized = JSON.stringify(payload); | ||
| const url = `${this.host}/i/v1/metrics?token=${encodeURIComponent(this.apiKey)}`; | ||
| const gzippedPayload = this.disableCompression ? null : await gzipCompress(serialized, this.isDebug); | ||
| const fetchOptions = { | ||
| method: 'POST', | ||
| headers: { | ||
| ...this.getCustomHeaders(), | ||
| 'Content-Type': 'application/json', | ||
| ...null !== gzippedPayload && { | ||
| 'Content-Encoding': 'gzip' | ||
| } | ||
| }, | ||
| body: gzippedPayload || serialized | ||
| }; | ||
| try { | ||
| await this.fetchWithRetry(url, fetchOptions, { | ||
| retryCheck: (err)=>{ | ||
| if (isPostHogFetchContentTooLargeError(err)) return false; | ||
| return isPostHogFetchRetryableError(err); | ||
| } | ||
| }); | ||
| return { | ||
| kind: 'ok' | ||
| }; | ||
| } catch (err) { | ||
| if (isPostHogFetchContentTooLargeError(err)) return { | ||
| kind: 'too-large' | ||
| }; | ||
| if (isPostHogFetchRetryableError(err)) return { | ||
| kind: 'retry-later', | ||
| error: err | ||
| }; | ||
| return { | ||
| kind: 'fatal', | ||
| error: err | ||
| }; | ||
| } | ||
| } | ||
| async fetchWithRetry(url, options, retryOptions, requestTimeout) { | ||
@@ -775,0 +818,0 @@ const body = options.body ? options.body : ''; |
+2
-2
| { | ||
| "name": "@posthog/core", | ||
| "version": "1.41.1", | ||
| "version": "1.42.0", | ||
| "bugs": { | ||
@@ -73,3 +73,3 @@ "url": "https://github.com/PostHog/posthog-js/issues" | ||
| "dependencies": { | ||
| "@posthog/types": "^1.394.0" | ||
| "@posthog/types": "^1.395.0" | ||
| }, | ||
@@ -76,0 +76,0 @@ "devDependencies": { |
+3
-0
@@ -48,2 +48,3 @@ export { | ||
| DEFAULT_HISTOGRAM_BOUNDS, | ||
| resolveMetricsConfig, | ||
| } from './metrics' | ||
@@ -63,2 +64,4 @@ export type { | ||
| MetricType, | ||
| Metrics, | ||
| MetricsConfig, | ||
| } from './metrics/types' | ||
@@ -65,0 +68,0 @@ export { uuidv7 } from './vendor/uuidv7' |
@@ -352,2 +352,30 @@ import type { Logger } from '../types' | ||
| it('re-applies the series cap when merging a failed window back', async () => { | ||
| let resolveSend!: (outcome: SendMetricsBatchOutcome) => void | ||
| mockInstance._sendMetricsBatch | ||
| .mockImplementationOnce(() => new Promise<SendMetricsBatchOutcome>((resolve) => (resolveSend = resolve))) | ||
| .mockResolvedValue({ kind: 'ok' }) | ||
| const metrics = createMetrics({ maxSeriesPerFlush: 2 }) | ||
| metrics.count('a', 1) | ||
| metrics.count('b', 1) | ||
| const inflight = metrics.flush() | ||
| // New series captured while the failing send is in flight fill the fresh window to the cap. | ||
| metrics.count('c', 1) | ||
| metrics.count('d', 1) | ||
| resolveSend({ kind: 'retry-later', error: new Error('offline') }) | ||
| await inflight | ||
| await metrics.flush() | ||
| const payloads = sentPayloads() | ||
| expect(payloads).toHaveLength(2) | ||
| const dataPointCount = payloads[1].resourceMetrics[0].scopeMetrics[0].metrics.reduce( | ||
| (n, m) => n + (m.sum?.dataPoints.length ?? 0), | ||
| 0 | ||
| ) | ||
| expect(dataPointCount).toBeLessThanOrEqual(2) | ||
| expect((logger.warn as jest.Mock).mock.calls.some((c) => String(c[0]).includes('series cap'))).toBe(true) | ||
| }) | ||
| it('drops non-finite values and negative counts', async () => { | ||
@@ -369,2 +397,23 @@ const metrics = createMetrics() | ||
| it('drops samples with unserializable attributes instead of throwing', async () => { | ||
| const metrics = createMetrics() | ||
| const throwingAttrs = {} | ||
| Object.defineProperty(throwingAttrs, 'bad', { | ||
| enumerable: true, | ||
| get() { | ||
| throw new Error('boom') | ||
| }, | ||
| }) | ||
| expect(() => metrics.count('good', 1, { attributes: { plan: 'free' } })).not.toThrow() | ||
| expect(() => metrics.count('bigint_attr', 1, { attributes: { jobId: BigInt(1) } as any })).not.toThrow() | ||
| expect(() => metrics.count('throwing_attr', 1, { attributes: throwingAttrs as any })).not.toThrow() | ||
| await metrics.flush() | ||
| // Only the well-formed sample ships; the malformed ones are dropped with a warning. | ||
| expect(sentMetrics().map((m) => m.name)).toEqual(['good']) | ||
| const attrWarns = (logger.warn as jest.Mock).mock.calls.filter((c) => String(c[0]).includes('attributes')) | ||
| expect(attrWarns).toHaveLength(2) | ||
| }) | ||
| it('drops samples with an empty name', async () => { | ||
@@ -371,0 +420,0 @@ const metrics = createMetrics() |
+66
-24
@@ -76,2 +76,6 @@ import type { | ||
| private _typeCollisionWarned = new Set<string>() | ||
| // Bumped by reset(). A flush that was in flight when reset() ran (e.g. it | ||
| // lost a shutdown race) sees a stale generation when its send settles and | ||
| // discards its window instead of merging it back and re-arming the timer. | ||
| private _generation = 0 | ||
@@ -133,4 +137,5 @@ constructor( | ||
| /** Clears the flush timer and drops the current window. */ | ||
| /** Clears the flush timer, drops the current window, and invalidates in-flight flushes. */ | ||
| reset(): void { | ||
| this._generation++ | ||
| this._clearFlushTimer() | ||
@@ -168,24 +173,19 @@ this._series = new Map() | ||
| const seenType = this._typeByName.get(filtered.name) | ||
| if (seenType === undefined) { | ||
| this._typeByName.set(filtered.name, filtered.type) | ||
| } else if (seenType !== filtered.type && !this._typeCollisionWarned.has(filtered.name)) { | ||
| this._typeCollisionWarned.add(filtered.name) | ||
| this._logger.warn( | ||
| `Metric name '${filtered.name}' is already used as a ${seenType}; ` + | ||
| `recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.` | ||
| ) | ||
| // Snapshot: the key is computed from these values, so a caller mutating | ||
| // the object after capture must not change the stored series. Reading and | ||
| // serializing the attributes can throw (BigInt values, throwing | ||
| // getters/proxies) — a malformed sample is dropped, never thrown. | ||
| let attributes: MetricAttributes | undefined | ||
| let key: string | ||
| try { | ||
| attributes = filtered.attributes ? { ...filtered.attributes } : undefined | ||
| key = seriesKey(filtered.type, filtered.name, filtered.unit, attributes) | ||
| } catch (e) { | ||
| this._logger.warn(`Dropping metric '${filtered.name}': attributes could not be serialized`, e) | ||
| return | ||
| } | ||
| const key = seriesKey(filtered.type, filtered.name, filtered.unit, filtered.attributes) | ||
| let state = this._series.get(key) | ||
| if (!state) { | ||
| if (this._series.size >= this._config.maxSeriesPerFlush) { | ||
| if (!this._seriesCapWarned) { | ||
| this._seriesCapWarned = true | ||
| this._logger.warn( | ||
| `Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); ` + | ||
| `dropping new series until the next flush. Reduce attribute cardinality.` | ||
| ) | ||
| } | ||
| if (!this._admitNewSeries()) { | ||
| return | ||
@@ -197,5 +197,3 @@ } | ||
| unit: filtered.unit, | ||
| // Snapshot: the key was computed from these values, so a caller | ||
| // mutating the object after capture must not change the stored series. | ||
| attributes: filtered.attributes ? { ...filtered.attributes } : undefined, | ||
| attributes, | ||
| windowStartMs: Date.now(), | ||
@@ -206,2 +204,15 @@ } | ||
| // Bookkeeping only for admitted samples, so name-cardinality misuse (IDs | ||
| // interpolated into metric names) can't grow this map past the series cap. | ||
| const seenType = this._typeByName.get(filtered.name) | ||
| if (seenType === undefined) { | ||
| this._typeByName.set(filtered.name, filtered.type) | ||
| } else if (seenType !== filtered.type && !this._typeCollisionWarned.has(filtered.name)) { | ||
| this._typeCollisionWarned.add(filtered.name) | ||
| this._logger.warn( | ||
| `Metric name '${filtered.name}' is already used as a ${seenType}; ` + | ||
| `recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.` | ||
| ) | ||
| } | ||
| this._fold(state, filtered.value) | ||
@@ -211,2 +222,20 @@ this._armFlushTimer() | ||
| /** | ||
| * Cardinality gate for adding a series to the live window — warns once per | ||
| * window when the cap is hit. Applied on capture and on merge-back alike. | ||
| */ | ||
| private _admitNewSeries(): boolean { | ||
| if (this._series.size < this._config.maxSeriesPerFlush) { | ||
| return true | ||
| } | ||
| if (!this._seriesCapWarned) { | ||
| this._seriesCapWarned = true | ||
| this._logger.warn( | ||
| `Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); ` + | ||
| `dropping new series until the next flush. Reduce attribute cardinality.` | ||
| ) | ||
| } | ||
| return false | ||
| } | ||
| private _fold(state: SeriesState, value: number): void { | ||
@@ -270,3 +299,5 @@ switch (state.type) { | ||
| this._flushTimer = undefined | ||
| this.flush().catch(() => {}) | ||
| this.flush().catch((e) => { | ||
| this._logger.error('Metrics flush failed:', e) | ||
| }) | ||
| }, this._config.flushIntervalMs) | ||
@@ -295,3 +326,9 @@ } | ||
| const generation = this._generation | ||
| const outcome = await this._instance._sendMetricsBatch(this._buildPayload(window)) | ||
| if (generation !== this._generation) { | ||
| // reset() ran while the send was in flight — the client was torn down or | ||
| // reconfigured, so this window is dropped whatever the outcome was. | ||
| return | ||
| } | ||
| switch (outcome.kind) { | ||
@@ -390,3 +427,7 @@ case 'ok': | ||
| if (!current) { | ||
| this._series.set(key, old) | ||
| // The cap still applies here: an unbounded merge-back would let a | ||
| // failed flush reintroduce series past maxSeriesPerFlush. | ||
| if (this._admitNewSeries()) { | ||
| this._series.set(key, old) | ||
| } | ||
| continue | ||
@@ -423,2 +464,3 @@ } | ||
| export { buildOtlpMetricsPayload, buildMetricsResourceAttributes, DEFAULT_HISTOGRAM_BOUNDS } from './metrics-utils' | ||
| export { resolveMetricsConfig } from './config' | ||
| export type { MetricsHost, PostHogMetricsConfig, ResolvedPostHogMetricsConfig, SendMetricsBatchOutcome } from './types' |
@@ -7,2 +7,3 @@ // Re-export OTLP/metric types from @posthog/types so the rest of the metrics | ||
| MetricType, | ||
| MetricsConfig, | ||
| CaptureMetricOptions, | ||
@@ -9,0 +10,0 @@ MetricSample, |
@@ -1,2 +0,3 @@ | ||
| import type { OtlpLogsPayload } from '@posthog/types' | ||
| import type { OtlpLogsPayload, OtlpMetricsPayload } from '@posthog/types' | ||
| import type { SendMetricsBatchOutcome } from './metrics/types' | ||
| import { SimpleEventEmitter } from './eventemitter' | ||
@@ -1537,2 +1538,51 @@ import { getFeatureFlagValue, normalizeFlagsResponse } from './featureFlagUtils' | ||
| /** | ||
| * Sends a pre-built OTLP metrics payload to `/i/v1/metrics`. Same tagged | ||
| * outcome contract and error classification as `_sendLogsBatch` — this is | ||
| * the `MetricsHost._sendMetricsBatch` implementation, so `PostHogMetrics` | ||
| * can use any core-based SDK as its host. | ||
| */ | ||
| async _sendMetricsBatch(payload: OtlpMetricsPayload): Promise<SendMetricsBatchOutcome> { | ||
| if (this.disabled) { | ||
| return { kind: 'fatal', error: new Error('The client is disabled') } | ||
| } | ||
| const serialized = JSON.stringify(payload) | ||
| const url = `${this.host}/i/v1/metrics?token=${encodeURIComponent(this.apiKey)}` | ||
| const gzippedPayload = !this.disableCompression ? await gzipCompress(serialized, this.isDebug) : null | ||
| const fetchOptions: PostHogFetchOptions = { | ||
| method: 'POST', | ||
| headers: { | ||
| ...this.getCustomHeaders(), | ||
| 'Content-Type': 'application/json', | ||
| ...(gzippedPayload !== null && { 'Content-Encoding': 'gzip' }), | ||
| }, | ||
| body: gzippedPayload || serialized, | ||
| } | ||
| try { | ||
| await this.fetchWithRetry(url, fetchOptions, { | ||
| retryCheck: (err) => { | ||
| if (isPostHogFetchContentTooLargeError(err)) { | ||
| return false | ||
| } | ||
| return isPostHogFetchRetryableError(err) | ||
| }, | ||
| }) | ||
| return { kind: 'ok' } | ||
| } catch (err) { | ||
| if (isPostHogFetchContentTooLargeError(err)) { | ||
| return { kind: 'too-large' } | ||
| } | ||
| // Exhausted retries on a retryable failure (network error, 408/429/5xx) | ||
| // still classify as retry-later so the window rides the next flush; only | ||
| // non-retryable HTTP errors (and 413 above) drop the batch. | ||
| if (isPostHogFetchRetryableError(err)) { | ||
| return { kind: 'retry-later', error: err } | ||
| } | ||
| return { kind: 'fatal', error: err } | ||
| } | ||
| } | ||
| private async fetchWithRetry( | ||
@@ -1539,0 +1589,0 @@ url: string, |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1271184
1.3%316
1.61%29476
1.28%Updated