Skip to content

Commit a2cce51

Browse files
committed
Merge branch 'sentry-add-logs' into stage
2 parents 153e487 + fe1554f commit a2cce51

File tree

1 file changed

+45
-9
lines changed

1 file changed

+45
-9
lines changed

workers/sentry/src/index.ts

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,24 @@ export default class SentryEventWorker extends Worker {
3939

4040
const [headers, items] = envelope;
4141

42+
if (items.length === 0) {
43+
this.logger.warn('Received envelope with no items');
44+
return;
45+
}
46+
47+
let processedCount = 0;
48+
let skippedCount = 0;
49+
4250
for (const item of items) {
43-
await this.handleEnvelopeItem(headers, item, event.projectId);
51+
const result = await this.handleEnvelopeItem(headers, item, event.projectId);
52+
if (result === 'processed') {
53+
processedCount++;
54+
} else if (result === 'skipped') {
55+
skippedCount++;
56+
}
4457
}
58+
59+
this.logger.verbose(`Processed ${processedCount} events, skipped ${skippedCount} non-event items from envelope`);
4560
} catch (error) {
4661
this.logger.error(`Error handling Sentry event task:`, error);
4762
this.logger.info('👇 Here is the problematic event:');
@@ -99,8 +114,9 @@ export default class SentryEventWorker extends Worker {
99114
* @param envelopeHeaders - The whole envelope headers
100115
* @param item - Sentry item
101116
* @param projectId - Sentry project ID
117+
* @returns 'processed' if event was sent, 'skipped' if non-event item, throws error on failure
102118
*/
103-
private async handleEnvelopeItem(envelopeHeaders: Envelope[0], item: EnvelopeItem, projectId: string): Promise<void> {
119+
private async handleEnvelopeItem(envelopeHeaders: Envelope[0], item: EnvelopeItem, projectId: string): Promise<'processed' | 'skipped'> {
104120
try {
105121
const [itemHeader, itemPayload] = item;
106122

@@ -112,7 +128,8 @@ export default class SentryEventWorker extends Worker {
112128
* Skip non-event items
113129
*/
114130
if (itemHeader.type !== 'event') {
115-
return;
131+
this.logger.verbose(`Skipping non-event item of type: ${itemHeader.type}`);
132+
return 'skipped';
116133
}
117134
const payloadHasSDK = typeof itemPayload === 'object' && 'sdk' in itemPayload;
118135

@@ -121,18 +138,37 @@ export default class SentryEventWorker extends Worker {
121138
*/
122139
const sentryJsSDK = ['browser', 'react', 'vue', 'angular', 'capacirtor', 'electron'];
123140

124-
const isJsSDK = payloadHasSDK && sentryJsSDK.includes(itemPayload.sdk.name);
141+
/**
142+
* Safely check if SDK name exists and is in the list
143+
*/
144+
const sdkName = payloadHasSDK && itemPayload.sdk && typeof itemPayload.sdk === 'object' && 'name' in itemPayload.sdk
145+
? itemPayload.sdk.name
146+
: undefined;
147+
148+
const isJsSDK = sdkName !== undefined && sentryJsSDK.includes(sdkName);
125149

126150
const hawkEvent = this.transformToHawkFormat(envelopeHeaders as EventEnvelope[0], item as EventItem, projectId, isJsSDK);
127151

128152
/**
129-
* If we have release attached to the event
153+
* Send task to appropriate worker and check if it was successfully queued
130154
*/
131-
if (isJsSDK) {
132-
await this.addTask(WorkerNames.JAVASCRIPT, hawkEvent as JavaScriptEventWorkerTask);
133-
} else {
134-
await this.addTask(WorkerNames.DEFAULT, hawkEvent as DefaultEventWorkerTask);
155+
const workerName = isJsSDK ? WorkerNames.JAVASCRIPT : WorkerNames.DEFAULT;
156+
const taskSent = await this.addTask(workerName, hawkEvent as JavaScriptEventWorkerTask | DefaultEventWorkerTask);
157+
158+
if (!taskSent) {
159+
/**
160+
* If addTask returns false, the message was not queued (queue full or channel closed)
161+
* This is a critical error that should be logged and thrown
162+
*/
163+
const error = new Error(`Failed to queue event to ${workerName} worker. Queue may be full or channel closed.`);
164+
this.logger.error(error.message);
165+
this.logger.info('👇 Here is the event that failed to queue:');
166+
this.logger.json(hawkEvent);
167+
throw error;
135168
}
169+
170+
this.logger.verbose(`Successfully queued event to ${workerName} worker`);
171+
return 'processed';
136172
} catch (error) {
137173
this.logger.error('Error handling envelope item:', error);
138174
this.logger.info('👇 Here is the problematic item:');

0 commit comments

Comments
 (0)