From fa90b333cd635fda9f74fab7d45656cb6a155e30 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Fri, 9 Sep 2022 13:39:29 +0200 Subject: [PATCH 1/4] feat(types): Add `TransactionNameChange` interface --- packages/tracing/src/transaction.ts | 4 ++++ packages/types/src/event.ts | 4 +++- packages/types/src/index.ts | 1 + packages/types/src/transaction.ts | 23 +++++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/tracing/src/transaction.ts b/packages/tracing/src/transaction.ts index 2b509763743d..ac7b9459a243 100644 --- a/packages/tracing/src/transaction.ts +++ b/packages/tracing/src/transaction.ts @@ -45,6 +45,8 @@ export class Transaction extends SpanClass implements TransactionInterface { this.metadata = { ...transactionContext.metadata, spanMetadata: {}, + nameChanges: [], + propagations: 0, }; this._trimEnd = transactionContext.trimEnd; @@ -156,6 +158,8 @@ export class Transaction extends SpanClass implements TransactionInterface { ...(metadata.source && { transaction_info: { source: metadata.source, + name_changes: metadata.nameChanges, + propagations: metadata.propagations, }, }), }; diff --git a/packages/types/src/event.ts b/packages/types/src/event.ts index 0d3897734956..c726e8132af4 100644 --- a/packages/types/src/event.ts +++ b/packages/types/src/event.ts @@ -11,7 +11,7 @@ import { CaptureContext } from './scope'; import { SdkInfo } from './sdkinfo'; import { Severity, SeverityLevel } from './severity'; import { Span } from './span'; -import { TransactionSource } from './transaction'; +import { TransactionNameChange, TransactionSource } from './transaction'; import { User } from './user'; /** JSDoc */ @@ -49,6 +49,8 @@ export interface Event { sdkProcessingMetadata?: { [key: string]: any }; transaction_info?: { source: TransactionSource; + name_changes: TransactionNameChange[]; + propagations: number; }; } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index c43bb34c8f8e..20718b53830f 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -73,6 +73,7 @@ export type { TransactionMetadata, TransactionSamplingMethod, TransactionSource, + TransactionNameChange, } from './transaction'; export type { DurationUnit, diff --git a/packages/types/src/transaction.ts b/packages/types/src/transaction.ts index d8029c2184cb..282837bfb2fb 100644 --- a/packages/types/src/transaction.ts +++ b/packages/types/src/transaction.ts @@ -150,6 +150,12 @@ export interface TransactionMetadata { /** Metadata for the transaction's spans, keyed by spanId */ spanMetadata: { [spanId: string]: { [key: string]: unknown } }; + + /** Metadata representing information about transaction name changes */ + nameChanges: TransactionNameChange[]; + + /** The total number of propagations that happened */ + propagations: number; } /** @@ -169,3 +175,20 @@ export type TransactionSource = | 'component' /** Name of a background task (e.g. a Celery task) */ | 'task'; + +/** + * Object representing metadata about when a transaction name was changed. + */ +export interface TransactionNameChange { + /** + * Unix timestamp when the name was changed. Same type as the start and + * end timestamps of a transaction and span. + */ + timestamp: number; + + /** New source applied for transaction name change */ + source: TransactionSource; + + /** Number of propagations since start of transaction */ + propagations: number; +} From e8aded99dda2cb2370308e1a27ba3e3280ffc227 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Fri, 9 Sep 2022 16:31:47 +0200 Subject: [PATCH 2/4] fix tests --- packages/nextjs/test/integration/test/server/tracing200.js | 2 ++ packages/nextjs/test/integration/test/server/tracing500.js | 2 ++ packages/nextjs/test/integration/test/server/tracingHttp.js | 2 ++ .../integration/test/server/tracingServerGetInitialProps.js | 2 ++ .../test/server/tracingServerGetServerSideProps.js | 2 ++ .../node-integration-tests/suites/express/tracing/test.ts | 6 ++++++ packages/remix/test/integration/test/server/loader.test.ts | 2 ++ packages/tracing/test/span.test.ts | 4 ++++ 8 files changed, 22 insertions(+) diff --git a/packages/nextjs/test/integration/test/server/tracing200.js b/packages/nextjs/test/integration/test/server/tracing200.js index a9055540c3f3..8b619d462507 100644 --- a/packages/nextjs/test/integration/test/server/tracing200.js +++ b/packages/nextjs/test/integration/test/server/tracing200.js @@ -18,6 +18,8 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: 'GET /api/users', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, type: 'transaction', request: { diff --git a/packages/nextjs/test/integration/test/server/tracing500.js b/packages/nextjs/test/integration/test/server/tracing500.js index 8267a55e0cac..57227f788cc1 100644 --- a/packages/nextjs/test/integration/test/server/tracing500.js +++ b/packages/nextjs/test/integration/test/server/tracing500.js @@ -17,6 +17,8 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: 'GET /api/broken', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, type: 'transaction', request: { diff --git a/packages/nextjs/test/integration/test/server/tracingHttp.js b/packages/nextjs/test/integration/test/server/tracingHttp.js index 5825d4ce4d37..aaf6e4ba3dfc 100644 --- a/packages/nextjs/test/integration/test/server/tracingHttp.js +++ b/packages/nextjs/test/integration/test/server/tracingHttp.js @@ -31,6 +31,8 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: 'GET /api/http', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, type: 'transaction', request: { diff --git a/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js b/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js index 368ccb26a952..1d8cf0854777 100644 --- a/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js +++ b/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js @@ -16,6 +16,8 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: '/[id]/withInitialProps', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, type: 'transaction', request: { diff --git a/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js b/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js index 8f195d337168..30f50eac0d52 100644 --- a/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js +++ b/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js @@ -16,6 +16,8 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: '/[id]/withServerSideProps', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, type: 'transaction', request: { diff --git a/packages/node-integration-tests/suites/express/tracing/test.ts b/packages/node-integration-tests/suites/express/tracing/test.ts index b97ce2991053..1923c5c2d6f9 100644 --- a/packages/node-integration-tests/suites/express/tracing/test.ts +++ b/packages/node-integration-tests/suites/express/tracing/test.ts @@ -38,6 +38,8 @@ test('should set a correct transaction name for routes specified in RegEx', asyn transaction: 'GET /\\/test\\/regex/', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, contexts: { trace: { @@ -66,6 +68,8 @@ test.each([['array1'], ['array5']])( transaction: 'GET /test/array1,/\\/test\\/array[2-9]', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, contexts: { trace: { @@ -102,6 +106,8 @@ test.each([ transaction: 'GET /test/arr/:id,/\\/test\\/arr[0-9]*\\/required(path)?(\\/optionalPath)?\\/(lastParam)?', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, contexts: { trace: { diff --git a/packages/remix/test/integration/test/server/loader.test.ts b/packages/remix/test/integration/test/server/loader.test.ts index 78ecc2a67c01..849fac810d6c 100644 --- a/packages/remix/test/integration/test/server/loader.test.ts +++ b/packages/remix/test/integration/test/server/loader.test.ts @@ -55,6 +55,8 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada transaction: 'routes/loader-json-response/$id', transaction_info: { source: 'route', + name_changes: [], + propagations: 0, }, spans: [ { diff --git a/packages/tracing/test/span.test.ts b/packages/tracing/test/span.test.ts index 7bb53faca235..5523e81ec0f1 100644 --- a/packages/tracing/test/span.test.ts +++ b/packages/tracing/test/span.test.ts @@ -503,6 +503,8 @@ describe('Span', () => { expect.not.objectContaining({ transaction_info: { source: expect.any(String), + name_changes: [], + propagations: 0, }, }), ); @@ -522,6 +524,8 @@ describe('Span', () => { expect.objectContaining({ transaction_info: { source: 'url', + name_changes: [], + propagations: 0, }, }), ); From f651282b15d5ca4c576dbd22d829d39b0b8ccb42 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 12 Sep 2022 11:37:45 +0200 Subject: [PATCH 3/4] rename name_changes -> changes --- packages/nextjs/test/integration/test/server/tracing200.js | 2 +- packages/nextjs/test/integration/test/server/tracing500.js | 2 +- packages/nextjs/test/integration/test/server/tracingHttp.js | 2 +- .../integration/test/server/tracingServerGetInitialProps.js | 2 +- .../test/server/tracingServerGetServerSideProps.js | 2 +- .../node-integration-tests/suites/express/tracing/test.ts | 6 +++--- packages/remix/test/integration/test/server/loader.test.ts | 2 +- packages/tracing/src/transaction.ts | 2 +- packages/tracing/test/span.test.ts | 4 ++-- packages/types/src/event.ts | 2 +- packages/types/src/transaction.ts | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/nextjs/test/integration/test/server/tracing200.js b/packages/nextjs/test/integration/test/server/tracing200.js index 8b619d462507..a8df030f9468 100644 --- a/packages/nextjs/test/integration/test/server/tracing200.js +++ b/packages/nextjs/test/integration/test/server/tracing200.js @@ -18,7 +18,7 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: 'GET /api/users', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, type: 'transaction', diff --git a/packages/nextjs/test/integration/test/server/tracing500.js b/packages/nextjs/test/integration/test/server/tracing500.js index 57227f788cc1..1e5ed467a83d 100644 --- a/packages/nextjs/test/integration/test/server/tracing500.js +++ b/packages/nextjs/test/integration/test/server/tracing500.js @@ -17,7 +17,7 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: 'GET /api/broken', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, type: 'transaction', diff --git a/packages/nextjs/test/integration/test/server/tracingHttp.js b/packages/nextjs/test/integration/test/server/tracingHttp.js index aaf6e4ba3dfc..29ab66cc46ea 100644 --- a/packages/nextjs/test/integration/test/server/tracingHttp.js +++ b/packages/nextjs/test/integration/test/server/tracingHttp.js @@ -31,7 +31,7 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: 'GET /api/http', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, type: 'transaction', diff --git a/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js b/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js index 1d8cf0854777..ecde33f049c1 100644 --- a/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js +++ b/packages/nextjs/test/integration/test/server/tracingServerGetInitialProps.js @@ -16,7 +16,7 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: '/[id]/withInitialProps', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, type: 'transaction', diff --git a/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js b/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js index 30f50eac0d52..42edeb6842bf 100644 --- a/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js +++ b/packages/nextjs/test/integration/test/server/tracingServerGetServerSideProps.js @@ -16,7 +16,7 @@ module.exports = async ({ url: urlBase, argv }) => { transaction: '/[id]/withServerSideProps', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, type: 'transaction', diff --git a/packages/node-integration-tests/suites/express/tracing/test.ts b/packages/node-integration-tests/suites/express/tracing/test.ts index 1923c5c2d6f9..f924e904dd09 100644 --- a/packages/node-integration-tests/suites/express/tracing/test.ts +++ b/packages/node-integration-tests/suites/express/tracing/test.ts @@ -38,7 +38,7 @@ test('should set a correct transaction name for routes specified in RegEx', asyn transaction: 'GET /\\/test\\/regex/', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, contexts: { @@ -68,7 +68,7 @@ test.each([['array1'], ['array5']])( transaction: 'GET /test/array1,/\\/test\\/array[2-9]', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, contexts: { @@ -106,7 +106,7 @@ test.each([ transaction: 'GET /test/arr/:id,/\\/test\\/arr[0-9]*\\/required(path)?(\\/optionalPath)?\\/(lastParam)?', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, contexts: { diff --git a/packages/remix/test/integration/test/server/loader.test.ts b/packages/remix/test/integration/test/server/loader.test.ts index 849fac810d6c..f15c9ab70c53 100644 --- a/packages/remix/test/integration/test/server/loader.test.ts +++ b/packages/remix/test/integration/test/server/loader.test.ts @@ -55,7 +55,7 @@ describe.each(['builtin', 'express'])('Remix API Loaders with adapter = %s', ada transaction: 'routes/loader-json-response/$id', transaction_info: { source: 'route', - name_changes: [], + changes: [], propagations: 0, }, spans: [ diff --git a/packages/tracing/src/transaction.ts b/packages/tracing/src/transaction.ts index ac7b9459a243..8b10436f648a 100644 --- a/packages/tracing/src/transaction.ts +++ b/packages/tracing/src/transaction.ts @@ -158,7 +158,7 @@ export class Transaction extends SpanClass implements TransactionInterface { ...(metadata.source && { transaction_info: { source: metadata.source, - name_changes: metadata.nameChanges, + changes: metadata.nameChanges, propagations: metadata.propagations, }, }), diff --git a/packages/tracing/test/span.test.ts b/packages/tracing/test/span.test.ts index 5523e81ec0f1..a59c295edbe8 100644 --- a/packages/tracing/test/span.test.ts +++ b/packages/tracing/test/span.test.ts @@ -503,7 +503,7 @@ describe('Span', () => { expect.not.objectContaining({ transaction_info: { source: expect.any(String), - name_changes: [], + changes: [], propagations: 0, }, }), @@ -524,7 +524,7 @@ describe('Span', () => { expect.objectContaining({ transaction_info: { source: 'url', - name_changes: [], + changes: [], propagations: 0, }, }), diff --git a/packages/types/src/event.ts b/packages/types/src/event.ts index c726e8132af4..2b35df3901b8 100644 --- a/packages/types/src/event.ts +++ b/packages/types/src/event.ts @@ -49,7 +49,7 @@ export interface Event { sdkProcessingMetadata?: { [key: string]: any }; transaction_info?: { source: TransactionSource; - name_changes: TransactionNameChange[]; + changes: TransactionNameChange[]; propagations: number; }; } diff --git a/packages/types/src/transaction.ts b/packages/types/src/transaction.ts index 282837bfb2fb..2c083611b03a 100644 --- a/packages/types/src/transaction.ts +++ b/packages/types/src/transaction.ts @@ -152,7 +152,7 @@ export interface TransactionMetadata { spanMetadata: { [spanId: string]: { [key: string]: unknown } }; /** Metadata representing information about transaction name changes */ - nameChanges: TransactionNameChange[]; + changes: TransactionNameChange[]; /** The total number of propagations that happened */ propagations: number; From 203a3ede0bc09915e526f9aaff69aaf14fd2d4c0 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 12 Sep 2022 11:40:54 +0200 Subject: [PATCH 4/4] remaining nameChanges --- packages/tracing/src/transaction.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracing/src/transaction.ts b/packages/tracing/src/transaction.ts index 8b10436f648a..87e68fb6dc3e 100644 --- a/packages/tracing/src/transaction.ts +++ b/packages/tracing/src/transaction.ts @@ -45,7 +45,7 @@ export class Transaction extends SpanClass implements TransactionInterface { this.metadata = { ...transactionContext.metadata, spanMetadata: {}, - nameChanges: [], + changes: [], propagations: 0, }; @@ -158,7 +158,7 @@ export class Transaction extends SpanClass implements TransactionInterface { ...(metadata.source && { transaction_info: { source: metadata.source, - changes: metadata.nameChanges, + changes: metadata.changes, propagations: metadata.propagations, }, }),