forked from off-topic/apps.apple.com
init commit
This commit is contained in:
81
shared/logger/node_modules/@sentry/browser/esm/profiling/integration.js
generated
vendored
Normal file
81
shared/logger/node_modules/@sentry/browser/esm/profiling/integration.js
generated
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
import { logger } from '@sentry/utils';
|
||||
import { wrapTransactionWithProfiling } from './hubextensions.js';
|
||||
import { PROFILE_MAP, findProfiledTransactionsFromEnvelope, createProfilingEvent, addProfilesToEnvelope } from './utils.js';
|
||||
|
||||
/**
|
||||
* Browser profiling integration. Stores any event that has contexts["profile"]["profile_id"]
|
||||
* This exists because we do not want to await async profiler.stop calls as transaction.finish is called
|
||||
* in a synchronous context. Instead, we handle sending the profile async from the promise callback and
|
||||
* rely on being able to pull the event from the cache when we need to construct the envelope. This makes the
|
||||
* integration less reliable as we might be dropping profiles when the cache is full.
|
||||
*
|
||||
* @experimental
|
||||
*/
|
||||
class BrowserProfilingIntegration {constructor() { BrowserProfilingIntegration.prototype.__init.call(this);BrowserProfilingIntegration.prototype.__init2.call(this); }
|
||||
__init() {this.name = 'BrowserProfilingIntegration';}
|
||||
__init2() {this.getCurrentHub = undefined;}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
setupOnce(addGlobalEventProcessor, getCurrentHub) {
|
||||
this.getCurrentHub = getCurrentHub;
|
||||
const client = this.getCurrentHub().getClient() ;
|
||||
|
||||
if (client && typeof client.on === 'function') {
|
||||
client.on('startTransaction', (transaction) => {
|
||||
wrapTransactionWithProfiling(transaction);
|
||||
});
|
||||
|
||||
client.on('beforeEnvelope', (envelope) => {
|
||||
// if not profiles are in queue, there is nothing to add to the envelope.
|
||||
if (!PROFILE_MAP['size']) {
|
||||
return;
|
||||
}
|
||||
|
||||
const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope);
|
||||
if (!profiledTransactionEvents.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const profilesToAddToEnvelope = [];
|
||||
|
||||
for (const profiledTransaction of profiledTransactionEvents) {
|
||||
const context = profiledTransaction && profiledTransaction.contexts;
|
||||
const profile_id = context && context['profile'] && (context['profile']['profile_id'] );
|
||||
|
||||
if (!profile_id) {
|
||||
(typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&
|
||||
logger.log('[Profiling] cannot find profile for a transaction without a profile context');
|
||||
continue;
|
||||
}
|
||||
|
||||
// Remove the profile from the transaction context before sending, relay will take care of the rest.
|
||||
if (context && context['profile']) {
|
||||
delete context.profile;
|
||||
}
|
||||
|
||||
const profile = PROFILE_MAP.get(profile_id);
|
||||
if (!profile) {
|
||||
(typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
PROFILE_MAP.delete(profile_id);
|
||||
const profileEvent = createProfilingEvent(profile_id, profile, profiledTransaction );
|
||||
|
||||
if (profileEvent) {
|
||||
profilesToAddToEnvelope.push(profileEvent);
|
||||
}
|
||||
}
|
||||
|
||||
addProfilesToEnvelope(envelope, profilesToAddToEnvelope);
|
||||
});
|
||||
} else {
|
||||
logger.warn('[Profiling] Client does not support hooks, profiling will be disabled');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { BrowserProfilingIntegration };
|
||||
//# sourceMappingURL=integration.js.map
|
||||
Reference in New Issue
Block a user