Skip to content

Commit c582e2d

Browse files
committed
feat: Improvements in transaction creating
1 parent b6c959e commit c582e2d

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

packages/integrations/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ export { RewriteFrames } from './rewriteframes';
1010
export { SessionTiming } from './sessiontiming';
1111
export { Tracing } from './tracing';
1212
export { Transaction } from './transaction';
13+
export { TransactionActivity } from './transactionactivity';
1314
export { Vue } from './vue';

packages/integrations/src/transactionactivity.ts

+22-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { EventProcessor, Hub, Integration, Scope, Span, SpanContext } from '@sentry/types';
2+
import { timestampWithMs } from '@sentry/utils';
23

34
/** JSDoc */
45
interface TransactionActivityOptions {
@@ -69,8 +70,8 @@ export class TransactionActivity implements Integration {
6970
*/
7071
private static _watchActivity(): void {
7172
const count = Object.keys(TransactionActivity._activities).length;
73+
clearTimeout(TransactionActivity._debounce);
7274
if (count > 0) {
73-
clearTimeout(TransactionActivity._debounce);
7475
setTimeout(() => {
7576
TransactionActivity._watchActivity();
7677
}, 10);
@@ -79,7 +80,7 @@ export class TransactionActivity implements Integration {
7980
TransactionActivity._debounce = (setTimeout(() => {
8081
const active = TransactionActivity._activeTransaction;
8182
if (active) {
82-
active.finish(new Date().getTime() / 1000 - (timeout || 0));
83+
active.finish(timestampWithMs() - (timeout || 0));
8384
}
8485
}, timeout) as any) as number; // TODO 500
8586
}
@@ -89,6 +90,13 @@ export class TransactionActivity implements Integration {
8990
* Starts a Transaction waiting for activity idle to finish
9091
*/
9192
public static startIdleTransaction(name: string, spanContext?: SpanContext): Span | undefined {
93+
const activeTransaction = TransactionActivity._activeTransaction;
94+
95+
if (activeTransaction) {
96+
// We need to finish any active transaction before starting a new
97+
activeTransaction.finish();
98+
}
99+
92100
const _getCurrentHub = TransactionActivity._getCurrentHub;
93101
if (!_getCurrentHub) {
94102
return undefined;
@@ -113,6 +121,18 @@ export class TransactionActivity implements Integration {
113121
return span;
114122
}
115123

124+
/**
125+
* Update transaction
126+
*/
127+
public static updateTransactionName(name: string): void {
128+
const activeTransaction = TransactionActivity._activeTransaction;
129+
if (!activeTransaction) {
130+
return;
131+
}
132+
// TODO
133+
(activeTransaction as any).transaction = name;
134+
}
135+
116136
/**
117137
* Starts tracking for a specifc activity
118138
*/

packages/integrations/test/transactionactivity.test.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { TransactionActivity } from '../src/transactionactivity';
22

33
const transactionActivity: TransactionActivity = new TransactionActivity();
44

5-
const configureScope: any = jest.fn();
6-
const startSpan: any = jest.fn();
5+
const configureScope = jest.fn();
6+
const startSpan = jest.fn();
77

88
const getCurrentHubMock: any = () => ({
99
configureScope,
@@ -23,7 +23,7 @@ describe('TransactionActivity', () => {
2323
test('startSpan with transaction', () => {
2424
TransactionActivity.startIdleTransaction('test');
2525
expect(startSpan).toBeCalled();
26-
expect(startSpan.mock.calls[0][0].transaction).toBe('test');
26+
expect(startSpan).toBeCalledWith({ transaction: 'test' });
2727
});
2828

2929
test('track activity', () => {
@@ -46,7 +46,7 @@ describe('TransactionActivity', () => {
4646
expect(Object.keys((TransactionActivity as any)._activities)).toHaveLength(2);
4747
});
4848

49-
test.only('finishing a transaction after debounce', () => {
49+
test('finishing a transaction after debounce', () => {
5050
jest.useFakeTimers();
5151
const spy = jest.spyOn(TransactionActivity as any, '_watchActivity');
5252
TransactionActivity.startIdleTransaction('test');
@@ -57,6 +57,5 @@ describe('TransactionActivity', () => {
5757
expect(Object.keys((TransactionActivity as any)._activities)).toHaveLength(0);
5858
jest.runOnlyPendingTimers();
5959
expect(spy).toBeCalledTimes(2);
60-
expect((TransactionActivity as any)._debounce).toBeTruthy();
6160
});
6261
});

0 commit comments

Comments
 (0)