@pingops/otel 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/config-store.d.ts +26 -0
  2. package/dist/config-store.d.ts.map +1 -0
  3. package/dist/config-store.js +26 -0
  4. package/dist/config-store.js.map +1 -0
  5. package/dist/config.d.ts +8 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/index.d.ts +3 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/instrumentations/http/http.d.ts +13 -0
  12. package/dist/instrumentations/http/http.d.ts.map +1 -0
  13. package/dist/instrumentations/{http.js → http/http.js} +6 -16
  14. package/dist/instrumentations/http/http.js.map +1 -0
  15. package/dist/instrumentations/http/pingops-http.d.ts +52 -0
  16. package/dist/instrumentations/http/pingops-http.d.ts.map +1 -0
  17. package/dist/instrumentations/http/pingops-http.js +381 -0
  18. package/dist/instrumentations/http/pingops-http.js.map +1 -0
  19. package/dist/instrumentations/index.d.ts.map +1 -1
  20. package/dist/instrumentations/index.js +6 -10
  21. package/dist/instrumentations/index.js.map +1 -1
  22. package/dist/instrumentations/undici/pingops-undici.d.ts +25 -0
  23. package/dist/instrumentations/undici/pingops-undici.d.ts.map +1 -0
  24. package/dist/instrumentations/undici/pingops-undici.js +568 -0
  25. package/dist/instrumentations/undici/pingops-undici.js.map +1 -0
  26. package/dist/instrumentations/undici/types.d.ts +106 -0
  27. package/dist/instrumentations/undici/types.d.ts.map +1 -0
  28. package/dist/instrumentations/undici/types.js +2 -0
  29. package/dist/instrumentations/undici/types.js.map +1 -0
  30. package/dist/instrumentations/{undici.d.ts → undici/undici.d.ts} +1 -1
  31. package/dist/instrumentations/undici/undici.d.ts.map +1 -0
  32. package/dist/instrumentations/{undici.js → undici/undici.js} +1 -13
  33. package/dist/instrumentations/undici/undici.js.map +1 -0
  34. package/dist/span-processor.d.ts.map +1 -1
  35. package/dist/span-processor.js +31 -21
  36. package/dist/span-processor.js.map +1 -1
  37. package/dist/tracer-provider.d.ts.map +1 -1
  38. package/dist/tracer-provider.js +22 -20
  39. package/dist/tracer-provider.js.map +1 -1
  40. package/package.json +7 -7
  41. package/dist/instrumentations/body-extractor.d.ts +0 -48
  42. package/dist/instrumentations/body-extractor.d.ts.map +0 -1
  43. package/dist/instrumentations/body-extractor.js +0 -361
  44. package/dist/instrumentations/body-extractor.js.map +0 -1
  45. package/dist/instrumentations/http.d.ts +0 -12
  46. package/dist/instrumentations/http.d.ts.map +0 -1
  47. package/dist/instrumentations/http.js.map +0 -1
  48. package/dist/instrumentations/undici.d.ts.map +0 -1
  49. package/dist/instrumentations/undici.js.map +0 -1
  50. package/dist/processor.d.ts +0 -82
  51. package/dist/processor.d.ts.map +0 -1
  52. package/dist/processor.js +0 -264
  53. package/dist/processor.js.map +0 -1
  54. package/dist/span-wrapper.d.ts +0 -60
  55. package/dist/span-wrapper.d.ts.map +0 -1
  56. package/dist/span-wrapper.js +0 -118
  57. package/dist/span-wrapper.js.map +0 -1
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Global configuration store for PingOps processor
3
+ * Allows instrumentations to access processor configuration without direct coupling
4
+ */
5
+ import type { DomainRule } from "@pingops/core";
6
+ interface GlobalConfig {
7
+ captureRequestBody?: boolean;
8
+ captureResponseBody?: boolean;
9
+ domainAllowList?: DomainRule[];
10
+ }
11
+ /**
12
+ * Sets the global processor configuration
13
+ * @param config - Configuration to store
14
+ */
15
+ export declare function setGlobalConfig(config: GlobalConfig): void;
16
+ /**
17
+ * Gets the global processor configuration
18
+ * @returns The stored configuration or null if not set
19
+ */
20
+ export declare function getGlobalConfig(): GlobalConfig | null;
21
+ /**
22
+ * Clears the global configuration (useful for testing)
23
+ */
24
+ export declare function clearGlobalConfig(): void;
25
+ export {};
26
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,UAAU,YAAY;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC;CAChC;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Global configuration store for PingOps processor
3
+ * Allows instrumentations to access processor configuration without direct coupling
4
+ */
5
+ let globalConfig = null;
6
+ /**
7
+ * Sets the global processor configuration
8
+ * @param config - Configuration to store
9
+ */
10
+ export function setGlobalConfig(config) {
11
+ globalConfig = config;
12
+ }
13
+ /**
14
+ * Gets the global processor configuration
15
+ * @returns The stored configuration or null if not set
16
+ */
17
+ export function getGlobalConfig() {
18
+ return globalConfig;
19
+ }
20
+ /**
21
+ * Clears the global configuration (useful for testing)
22
+ */
23
+ export function clearGlobalConfig() {
24
+ globalConfig = null;
25
+ }
26
+ //# sourceMappingURL=config-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
package/dist/config.d.ts CHANGED
@@ -42,6 +42,14 @@ export interface PingopsProcessorConfig {
42
42
  * List of headers to exclude (case-insensitive, takes precedence over allow list).
43
43
  */
44
44
  headersDenyList?: string[];
45
+ /**
46
+ * Capture request body.
47
+ */
48
+ captureRequestBody?: boolean;
49
+ /**
50
+ * Capture response body.
51
+ */
52
+ captureResponseBody?: boolean;
45
53
  /**
46
54
  * Domain allow list rules.
47
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAE9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC;IAE/B;;OAEG;IACH,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAE9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export { PingopsSpanProcessor } from "./span-processor";
5
5
  export type { PingopsProcessorConfig } from "./config";
6
6
  export { setPingopsTracerProvider, getPingopsTracerProvider, shutdownTracerProvider, } from "./tracer-provider";
7
7
  export { getInstrumentations } from "./instrumentations";
8
- export { createHttpInstrumentation } from "./instrumentations/http";
9
- export { createUndiciInstrumentation } from "./instrumentations/undici";
8
+ export { createHttpInstrumentation } from "./instrumentations/http/http";
9
+ export { createUndiciInstrumentation } from "./instrumentations/undici/undici";
10
+ export { PingopsHttpInstrumentation, PingopsHttpSemanticAttributes, type PingopsHttpInstrumentationConfig, PingopsSemanticAttributes, type NetworkTimings, type PingopsInstrumentationConfig, } from "./instrumentations/http/pingops-http";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,KAAK,gCAAgC,EACrC,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,4BAA4B,GAClC,MAAM,sCAAsC,CAAC"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@
4
4
  export { PingopsSpanProcessor } from "./span-processor";
5
5
  export { setPingopsTracerProvider, getPingopsTracerProvider, shutdownTracerProvider, } from "./tracer-provider";
6
6
  export { getInstrumentations } from "./instrumentations";
7
- export { createHttpInstrumentation } from "./instrumentations/http";
8
- export { createUndiciInstrumentation } from "./instrumentations/undici";
7
+ export { createHttpInstrumentation } from "./instrumentations/http/http";
8
+ export { createUndiciInstrumentation } from "./instrumentations/undici/undici";
9
+ export { PingopsHttpInstrumentation, PingopsHttpSemanticAttributes, PingopsSemanticAttributes, } from "./instrumentations/http/pingops-http";
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAE7B,yBAAyB,GAG1B,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * HTTP instrumentation for OpenTelemetry
3
+ */
4
+ import { PingopsHttpInstrumentation, type PingopsHttpInstrumentationConfig } from "./pingops-http";
5
+ /**
6
+ * Creates an HTTP instrumentation instance
7
+ *
8
+ * @param isGlobalInstrumentationEnabled - Function that checks if global instrumentation is enabled
9
+ * @param config - Optional configuration for the instrumentation
10
+ * @returns PingopsHttpInstrumentation instance
11
+ */
12
+ export declare function createHttpInstrumentation(isGlobalInstrumentationEnabled: () => boolean, config?: Partial<PingopsHttpInstrumentationConfig>): PingopsHttpInstrumentation;
13
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/http/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,0BAA0B,EAC1B,KAAK,gCAAgC,EACtC,MAAM,gBAAgB,CAAC;AAExB;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,8BAA8B,EAAE,MAAM,OAAO,EAC7C,MAAM,CAAC,EAAE,OAAO,CAAC,gCAAgC,CAAC,GACjD,0BAA0B,CAa5B"}
@@ -1,17 +1,18 @@
1
1
  /**
2
2
  * HTTP instrumentation for OpenTelemetry
3
3
  */
4
- import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
5
4
  import { context } from "@opentelemetry/api";
6
5
  import { PINGOPS_HTTP_ENABLED } from "@pingops/core";
6
+ import { PingopsHttpInstrumentation, } from "./pingops-http";
7
7
  /**
8
8
  * Creates an HTTP instrumentation instance
9
9
  *
10
10
  * @param isGlobalInstrumentationEnabled - Function that checks if global instrumentation is enabled
11
- * @returns HttpInstrumentation instance
11
+ * @param config - Optional configuration for the instrumentation
12
+ * @returns PingopsHttpInstrumentation instance
12
13
  */
13
- export function createHttpInstrumentation(isGlobalInstrumentationEnabled) {
14
- return new HttpInstrumentation({
14
+ export function createHttpInstrumentation(isGlobalInstrumentationEnabled, config) {
15
+ return new PingopsHttpInstrumentation({
15
16
  ignoreIncomingRequestHook: () => true, // Only instrument outgoing requests
16
17
  ignoreOutgoingRequestHook: () => {
17
18
  // If global instrumentation is enabled, instrument all outgoing requests
@@ -21,18 +22,7 @@ export function createHttpInstrumentation(isGlobalInstrumentationEnabled) {
21
22
  // If global instrumentation is NOT enabled, only instrument when PINGOPS_HTTP_ENABLED is true
22
23
  return context.active().getValue(PINGOPS_HTTP_ENABLED) !== true;
23
24
  },
24
- requestHook: (span, request) => {
25
- const headers = request.headers;
26
- for (const [key, value] of Object.entries(headers)) {
27
- span.setAttribute(`http.request.header.${key.toLowerCase()}`, Array.isArray(value) ? value.join(",") : String(value));
28
- }
29
- },
30
- responseHook: (span, response) => {
31
- const headers = response.headers;
32
- for (const [key, value] of Object.entries(headers)) {
33
- span.setAttribute(`http.response.header.${key.toLowerCase()}`, Array.isArray(value) ? value.join(",") : String(value));
34
- }
35
- },
25
+ ...config,
36
26
  });
37
27
  }
38
28
  //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/instrumentations/http/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,0BAA0B,GAE3B,MAAM,gBAAgB,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,8BAA6C,EAC7C,MAAkD;IAElD,OAAO,IAAI,0BAA0B,CAAC;QACpC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,oCAAoC;QAC3E,yBAAyB,EAAE,GAAG,EAAE;YAC9B,yEAAyE;YACzE,IAAI,8BAA8B,EAAE,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,8FAA8F;YAC9F,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC;QAClE,CAAC;QACD,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Pingops HTTP instrumentation that extends HttpInstrumentation
3
+ * with request/response body capture and network timing metrics
4
+ */
5
+ import { HttpInstrumentation, HttpInstrumentationConfig } from "@opentelemetry/instrumentation-http";
6
+ export declare const PingopsSemanticAttributes: {
7
+ HTTP_REQUEST_BODY: string;
8
+ HTTP_RESPONSE_BODY: string;
9
+ NETWORK_DNS_LOOKUP_DURATION: string;
10
+ NETWORK_TCP_CONNECT_DURATION: string;
11
+ NETWORK_TLS_HANDSHAKE_DURATION: string;
12
+ NETWORK_TTFB_DURATION: string;
13
+ NETWORK_CONTENT_TRANSFER_DURATION: string;
14
+ };
15
+ export type NetworkTimings = {
16
+ startAt?: number;
17
+ dnsLookupAt?: number;
18
+ tcpConnectionAt?: number;
19
+ tlsHandshakeAt?: number;
20
+ firstByteAt?: number;
21
+ endAt?: number;
22
+ };
23
+ export interface PingopsInstrumentationConfig {
24
+ /**
25
+ * Maximum size of request body to capture in bytes
26
+ * @defaultValue 4096 (4 KB)
27
+ */
28
+ maxRequestBodySize?: number;
29
+ /**
30
+ * Maximum size of response body to capture in bytes
31
+ * @defaultValue 4096 (4 KB)
32
+ */
33
+ maxResponseBodySize?: number;
34
+ }
35
+ export declare const PingopsHttpSemanticAttributes: {
36
+ HTTP_REQUEST_BODY: string;
37
+ HTTP_RESPONSE_BODY: string;
38
+ NETWORK_DNS_LOOKUP_DURATION: string;
39
+ NETWORK_TCP_CONNECT_DURATION: string;
40
+ NETWORK_TLS_HANDSHAKE_DURATION: string;
41
+ NETWORK_TTFB_DURATION: string;
42
+ NETWORK_CONTENT_TRANSFER_DURATION: string;
43
+ };
44
+ export interface PingopsHttpInstrumentationConfig extends HttpInstrumentationConfig, PingopsInstrumentationConfig {
45
+ }
46
+ export declare class PingopsHttpInstrumentation extends HttpInstrumentation {
47
+ constructor(config?: PingopsHttpInstrumentationConfig);
48
+ private _createConfig;
49
+ private _createRequestHook;
50
+ private _createResponseHook;
51
+ }
52
+ //# sourceMappingURL=pingops-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pingops-http.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/http/pingops-http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAG1B,MAAM,qCAAqC,CAAC;AAe7C,eAAO,MAAM,yBAAyB;;;;;;;;CAQrC,CAAC;AAGF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAuUD,eAAO,MAAM,6BAA6B;;;;;;;;CAA4B,CAAC;AAEvE,MAAM,WAAW,gCACf,SAAQ,yBAAyB,EAAE,4BAA4B;CAAG;AAEpE,qBAAa,0BAA2B,SAAQ,mBAAmB;gBACrD,MAAM,CAAC,EAAE,gCAAgC;IAKrD,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAwE1B,OAAO,CAAC,mBAAmB;CA0E5B"}
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Pingops HTTP instrumentation that extends HttpInstrumentation
3
+ * with request/response body capture and network timing metrics
4
+ */
5
+ import { ClientRequest, IncomingMessage } from "http";
6
+ import { context } from "@opentelemetry/api";
7
+ import { HttpInstrumentation, } from "@opentelemetry/instrumentation-http";
8
+ import { PINGOPS_CAPTURE_REQUEST_BODY, PINGOPS_CAPTURE_RESPONSE_BODY, } from "@pingops/core";
9
+ import { getGlobalConfig } from "../../config-store";
10
+ // Constants
11
+ const DEFAULT_MAX_REQUEST_BODY_SIZE = 4 * 1024; // 4 KB
12
+ const DEFAULT_MAX_RESPONSE_BODY_SIZE = 4 * 1024; // 4 KB
13
+ const NETWORK_TIMINGS_PROP_NAME = "__networkTimings";
14
+ // Semantic attributes
15
+ export const PingopsSemanticAttributes = {
16
+ HTTP_REQUEST_BODY: "http.request.body",
17
+ HTTP_RESPONSE_BODY: "http.response.body",
18
+ NETWORK_DNS_LOOKUP_DURATION: "net.dns.lookup.duration",
19
+ NETWORK_TCP_CONNECT_DURATION: "net.tcp.connect.duration",
20
+ NETWORK_TLS_HANDSHAKE_DURATION: "net.tls.handshake.duration",
21
+ NETWORK_TTFB_DURATION: "net.ttfb.duration",
22
+ NETWORK_CONTENT_TRANSFER_DURATION: "net.content.transfer.duration",
23
+ };
24
+ /**
25
+ * Manually flattens a nested object into dot-notation keys
26
+ */
27
+ function flatten(obj, prefix = "") {
28
+ const result = {};
29
+ for (const key in obj) {
30
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
31
+ const newKey = prefix ? `${prefix}.${key}` : key;
32
+ const value = obj[key];
33
+ if (value !== null &&
34
+ typeof value === "object" &&
35
+ !Array.isArray(value) &&
36
+ !(value instanceof Buffer)) {
37
+ // Recursively flatten nested objects
38
+ Object.assign(result, flatten(value, newKey));
39
+ }
40
+ else {
41
+ result[newKey] = value;
42
+ }
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * Sets an attribute value on a span, handling various types appropriately
49
+ */
50
+ function setAttributeValue(span, attrName, attrValue) {
51
+ if (typeof attrValue === "string" ||
52
+ typeof attrValue === "number" ||
53
+ typeof attrValue === "boolean") {
54
+ span.setAttribute(attrName, attrValue);
55
+ }
56
+ else if (attrValue instanceof Buffer) {
57
+ span.setAttribute(attrName, attrValue.toString("utf8"));
58
+ }
59
+ else if (typeof attrValue == "object") {
60
+ span.setAttributes(flatten({
61
+ [attrName]: attrValue,
62
+ }));
63
+ }
64
+ else if (Array.isArray(attrValue)) {
65
+ // Check whether there is any element
66
+ if (attrValue.length) {
67
+ // Try to resolve array type over first element.
68
+ // Other elements might have different types but this is just best effort solution.
69
+ const firstElement = attrValue[0];
70
+ if (typeof firstElement === "string" ||
71
+ typeof firstElement === "number" ||
72
+ typeof firstElement === "boolean") {
73
+ span.setAttribute(attrName, attrValue);
74
+ }
75
+ else {
76
+ // TODO What should we do with other array types???
77
+ }
78
+ }
79
+ else {
80
+ span.setAttribute(attrName, attrValue);
81
+ }
82
+ }
83
+ // TODO What should we do with other types???
84
+ }
85
+ /**
86
+ * Processes network timings and sets them as span attributes (no spans created)
87
+ */
88
+ function processNetworkTimings(span, networkTimings) {
89
+ // Calculate and set network timing attributes (no spans created)
90
+ if (networkTimings.startAt && networkTimings.dnsLookupAt) {
91
+ span.setAttribute(PingopsSemanticAttributes.NETWORK_DNS_LOOKUP_DURATION, networkTimings.dnsLookupAt - networkTimings.startAt);
92
+ }
93
+ if (networkTimings.dnsLookupAt && networkTimings.tcpConnectionAt) {
94
+ span.setAttribute(PingopsSemanticAttributes.NETWORK_TCP_CONNECT_DURATION, networkTimings.tcpConnectionAt - networkTimings.dnsLookupAt);
95
+ }
96
+ if (networkTimings.tcpConnectionAt && networkTimings.tlsHandshakeAt) {
97
+ span.setAttribute(PingopsSemanticAttributes.NETWORK_TLS_HANDSHAKE_DURATION, networkTimings.tlsHandshakeAt - networkTimings.tcpConnectionAt);
98
+ }
99
+ const startTTFB = networkTimings.tlsHandshakeAt || networkTimings.tcpConnectionAt;
100
+ if (networkTimings.firstByteAt && startTTFB) {
101
+ span.setAttribute(PingopsSemanticAttributes.NETWORK_TTFB_DURATION, networkTimings.firstByteAt - startTTFB);
102
+ }
103
+ if (networkTimings.firstByteAt && networkTimings.endAt) {
104
+ span.setAttribute(PingopsSemanticAttributes.NETWORK_CONTENT_TRANSFER_DURATION, networkTimings.endAt - networkTimings.firstByteAt);
105
+ }
106
+ }
107
+ /**
108
+ * Initializes network timings on a span
109
+ */
110
+ function initializeNetworkTimings(span) {
111
+ const networkTimings = {
112
+ startAt: Date.now(),
113
+ };
114
+ Object.defineProperty(span, NETWORK_TIMINGS_PROP_NAME, {
115
+ enumerable: false,
116
+ configurable: true,
117
+ writable: false,
118
+ value: networkTimings,
119
+ });
120
+ return networkTimings;
121
+ }
122
+ /**
123
+ * Extracts domain from URL
124
+ */
125
+ function extractDomainFromUrl(url) {
126
+ try {
127
+ const urlObj = new URL(url);
128
+ return urlObj.hostname;
129
+ }
130
+ catch {
131
+ const match = url.match(/^(?:https?:\/\/)?([^/]+)/);
132
+ return match ? match[1] : "";
133
+ }
134
+ }
135
+ /**
136
+ * Gets domain rule configuration for a given URL
137
+ */
138
+ function getDomainRule(url, domainAllowList) {
139
+ if (!domainAllowList) {
140
+ return undefined;
141
+ }
142
+ const domain = extractDomainFromUrl(url);
143
+ for (const rule of domainAllowList) {
144
+ if (domain === rule.domain ||
145
+ domain.endsWith(`.${rule.domain}`) ||
146
+ domain === rule.domain.slice(1)) {
147
+ return rule;
148
+ }
149
+ }
150
+ return undefined;
151
+ }
152
+ /**
153
+ * Determines if request body should be captured based on priority:
154
+ * context > domain rule > global config > default (false)
155
+ */
156
+ function shouldCaptureRequestBody(url) {
157
+ const activeContext = context.active();
158
+ // Check context value first (from wrapHttp)
159
+ const contextValue = activeContext.getValue(PINGOPS_CAPTURE_REQUEST_BODY);
160
+ if (contextValue !== undefined) {
161
+ return contextValue;
162
+ }
163
+ // Check domain-specific rule
164
+ if (url) {
165
+ const globalConfig = getGlobalConfig();
166
+ const domainRule = getDomainRule(url, globalConfig?.domainAllowList);
167
+ if (domainRule?.captureRequestBody !== undefined) {
168
+ return domainRule.captureRequestBody;
169
+ }
170
+ }
171
+ // Fall back to global config
172
+ const globalConfig = getGlobalConfig();
173
+ if (globalConfig?.captureRequestBody !== undefined) {
174
+ return globalConfig.captureRequestBody;
175
+ }
176
+ // Default to false
177
+ return false;
178
+ }
179
+ /**
180
+ * Determines if response body should be captured based on priority:
181
+ * context > domain rule > global config > default (false)
182
+ */
183
+ function shouldCaptureResponseBody(url) {
184
+ const activeContext = context.active();
185
+ // Check context value first (from wrapHttp)
186
+ const contextValue = activeContext.getValue(PINGOPS_CAPTURE_RESPONSE_BODY);
187
+ if (contextValue !== undefined) {
188
+ return contextValue;
189
+ }
190
+ // Check domain-specific rule
191
+ if (url) {
192
+ const globalConfig = getGlobalConfig();
193
+ const domainRule = getDomainRule(url, globalConfig?.domainAllowList);
194
+ if (domainRule?.captureResponseBody !== undefined) {
195
+ return domainRule.captureResponseBody;
196
+ }
197
+ }
198
+ // Fall back to global config
199
+ const globalConfig = getGlobalConfig();
200
+ if (globalConfig?.captureResponseBody !== undefined) {
201
+ return globalConfig.captureResponseBody;
202
+ }
203
+ // Default to false
204
+ return false;
205
+ }
206
+ /**
207
+ * Captures request body from string or Buffer data
208
+ */
209
+ function captureRequestBody(span, data, maxSize, semanticAttr, url) {
210
+ // Check if body capture is enabled
211
+ if (!shouldCaptureRequestBody(url)) {
212
+ return;
213
+ }
214
+ if (data.length && data.length <= maxSize) {
215
+ try {
216
+ const requestBody = typeof data === "string" ? data : data.toString("utf-8");
217
+ if (requestBody) {
218
+ setAttributeValue(span, semanticAttr, requestBody);
219
+ }
220
+ }
221
+ catch (e) {
222
+ console.error("Error occurred while capturing request body:", e);
223
+ }
224
+ }
225
+ }
226
+ /**
227
+ * Captures response body from chunks
228
+ */
229
+ function captureResponseBody(span, chunks, semanticAttr, url) {
230
+ // Check if body capture is enabled
231
+ if (!shouldCaptureResponseBody(url)) {
232
+ return;
233
+ }
234
+ if (chunks && chunks.length) {
235
+ try {
236
+ const concatedChunks = Buffer.concat(chunks);
237
+ const responseBody = concatedChunks.toString("utf8");
238
+ if (responseBody) {
239
+ setAttributeValue(span, semanticAttr, responseBody);
240
+ }
241
+ }
242
+ catch (e) {
243
+ console.error("Error occurred while capturing response body:", e);
244
+ }
245
+ }
246
+ }
247
+ /**
248
+ * Captures HTTP request headers as span attributes
249
+ */
250
+ function captureRequestHeaders(span, headers) {
251
+ for (const [key, value] of Object.entries(headers)) {
252
+ if (value !== undefined) {
253
+ span.setAttribute(`pingops.http.request.header.${key.toLowerCase()}`, Array.isArray(value) ? value.join(",") : String(value));
254
+ }
255
+ }
256
+ }
257
+ /**
258
+ * Captures HTTP response headers as span attributes
259
+ */
260
+ function captureResponseHeaders(span, headers) {
261
+ for (const [key, value] of Object.entries(headers)) {
262
+ if (value !== undefined) {
263
+ span.setAttribute(`pingops.http.response.header.${key.toLowerCase()}`, Array.isArray(value) ? value.join(",") : String(value));
264
+ }
265
+ }
266
+ }
267
+ // Re-export semantic attributes for backward compatibility
268
+ export const PingopsHttpSemanticAttributes = PingopsSemanticAttributes;
269
+ export class PingopsHttpInstrumentation extends HttpInstrumentation {
270
+ constructor(config) {
271
+ super(config);
272
+ this._config = this._createConfig(config);
273
+ }
274
+ _createConfig(config) {
275
+ return {
276
+ ...config,
277
+ requestHook: this._createRequestHook(config?.requestHook, config),
278
+ responseHook: this._createResponseHook(config?.responseHook, config),
279
+ };
280
+ }
281
+ _createRequestHook(originalRequestHook, config) {
282
+ return (span, request) => {
283
+ // Capture request headers
284
+ const headers = request.headers;
285
+ if (headers) {
286
+ captureRequestHeaders(span, headers);
287
+ }
288
+ if (request instanceof ClientRequest) {
289
+ const networkTimings = initializeNetworkTimings(span);
290
+ const maxRequestBodySize = config?.maxRequestBodySize || DEFAULT_MAX_REQUEST_BODY_SIZE;
291
+ // Extract URL from request
292
+ const url = request.path && request.getHeader("host")
293
+ ? `${request.protocol || "http:"}//${request.getHeader("host")}${request.path}`
294
+ : undefined;
295
+ const originalWrite = request.write.bind(request);
296
+ const originalEnd = request.end.bind(request);
297
+ // Capture request body
298
+ request.write = (data) => {
299
+ if (typeof data === "string" || data instanceof Buffer) {
300
+ captureRequestBody(span, data, maxRequestBodySize, PingopsSemanticAttributes.HTTP_REQUEST_BODY, url);
301
+ }
302
+ return originalWrite(data);
303
+ };
304
+ request.end = (data) => {
305
+ if (typeof data === "string" || data instanceof Buffer) {
306
+ captureRequestBody(span, data, maxRequestBodySize, PingopsSemanticAttributes.HTTP_REQUEST_BODY, url);
307
+ }
308
+ return originalEnd(data);
309
+ };
310
+ // Track network timings
311
+ request.on("socket", (socket) => {
312
+ socket.on("lookup", () => {
313
+ networkTimings.dnsLookupAt = Date.now();
314
+ });
315
+ socket.on("connect", () => {
316
+ networkTimings.tcpConnectionAt = Date.now();
317
+ });
318
+ socket.on("secureConnect", () => {
319
+ networkTimings.tlsHandshakeAt = Date.now();
320
+ });
321
+ });
322
+ }
323
+ if (originalRequestHook) {
324
+ originalRequestHook(span, request);
325
+ }
326
+ };
327
+ }
328
+ _createResponseHook(originalResponseHook, config) {
329
+ return (span, response) => {
330
+ // Capture response headers
331
+ const headers = response.headers;
332
+ if (headers) {
333
+ captureResponseHeaders(span, headers);
334
+ }
335
+ if (response instanceof IncomingMessage) {
336
+ const networkTimings = span[NETWORK_TIMINGS_PROP_NAME];
337
+ const maxResponseBodySize = config?.maxResponseBodySize || DEFAULT_MAX_RESPONSE_BODY_SIZE;
338
+ // Extract URL from response (if available via request)
339
+ // Note: We can't easily get URL from IncomingMessage, so we'll rely on
340
+ // domain rules matching based on headers or skip domain-specific checks
341
+ const url = response.url || undefined;
342
+ let chunks = [];
343
+ let totalSize = 0;
344
+ // Only capture response body if enabled
345
+ const shouldCapture = shouldCaptureResponseBody(url);
346
+ // Capture response body
347
+ response.prependListener("data", (chunk) => {
348
+ if (!chunk || !shouldCapture) {
349
+ return;
350
+ }
351
+ if (typeof chunk === "string" || chunk instanceof Buffer) {
352
+ totalSize += chunk.length;
353
+ if (chunks && totalSize <= maxResponseBodySize) {
354
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
355
+ }
356
+ else {
357
+ // No need to capture partial response body
358
+ chunks = null;
359
+ }
360
+ }
361
+ });
362
+ response.prependOnceListener("end", () => {
363
+ if (networkTimings) {
364
+ networkTimings.endAt = Date.now();
365
+ processNetworkTimings(span, networkTimings);
366
+ }
367
+ captureResponseBody(span, chunks, PingopsSemanticAttributes.HTTP_RESPONSE_BODY, url);
368
+ });
369
+ if (networkTimings) {
370
+ response.once("readable", () => {
371
+ networkTimings.firstByteAt = Date.now();
372
+ });
373
+ }
374
+ }
375
+ if (originalResponseHook) {
376
+ originalResponseHook(span, response);
377
+ }
378
+ };
379
+ }
380
+ }
381
+ //# sourceMappingURL=pingops-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pingops-http.js","sourceRoot":"","sources":["../../../src/instrumentations/http/pingops-http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instrumentations/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAMtE;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,8BAA8B,EAAE,MAAM,OAAO,GAC5C,eAAe,EAAE,CAcnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instrumentations/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAMtE;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,8BAA8B,EAAE,MAAM,OAAO,GAC5C,eAAe,EAAE,CAUnB"}