Skip to content

Commit 006cceb

Browse files
author
Luca Forstner
authored
ref(core): Make better use of Sentry (#246)
1 parent 66c9ab9 commit 006cceb

File tree

6 files changed

+99
-51
lines changed

6 files changed

+99
-51
lines changed

packages/bundler-plugin-core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
},
5454
"dependencies": {
5555
"@sentry/cli": "^2.17.0",
56-
"@sentry/node": "7.50.0",
56+
"@sentry/node": "7.53.1",
5757
"find-up": "5.0.0",
5858
"glob": "9.3.2",
5959
"magic-string": "0.27.0",

packages/bundler-plugin-core/src/index.ts

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,17 @@ export function sentryUnpluginFactory({
7474
shouldSendTelemetry,
7575
unpluginMetaContext.framework
7676
);
77-
const pluginExecutionTransaction = sentryHub.startTransaction({
78-
name: "Sentry Bundler Plugin execution",
77+
const sentrySession = sentryHub.startSession();
78+
sentryHub.captureSession();
79+
80+
let sentEndSession = false; // Just to prevent infinite loops with beforeExit, which is called whenever the event loop empties out
81+
// We also need to manually end sesisons on errors because beforeExit is not called on crashes
82+
process.on("beforeExit", () => {
83+
if (!sentEndSession) {
84+
sentryHub.endSession();
85+
sentEndSession = true;
86+
}
7987
});
80-
sentryHub.getScope().setSpan(pluginExecutionTransaction);
8188

8289
const logger = createLogger({
8390
prefix: `[sentry-${unpluginMetaContext.framework}-plugin]`,
@@ -86,16 +93,25 @@ export function sentryUnpluginFactory({
8693
});
8794

8895
function handleRecoverableError(unknownError: unknown) {
89-
pluginExecutionTransaction.setStatus("internal_error");
90-
91-
if (options.errorHandler) {
92-
if (unknownError instanceof Error) {
93-
options.errorHandler(unknownError);
96+
sentrySession.status = "abnormal";
97+
try {
98+
if (options.errorHandler) {
99+
try {
100+
if (unknownError instanceof Error) {
101+
options.errorHandler(unknownError);
102+
} else {
103+
options.errorHandler(new Error("An unknown error occured"));
104+
}
105+
} catch (e) {
106+
sentrySession.status = "crashed";
107+
throw e;
108+
}
94109
} else {
95-
options.errorHandler(new Error("An unknown error occured"));
110+
sentrySession.status = "crashed";
111+
throw unknownError;
96112
}
97-
} else {
98-
throw unknownError;
113+
} finally {
114+
sentryHub.endSession();
99115
}
100116
}
101117

@@ -115,10 +131,10 @@ export function sentryUnpluginFactory({
115131

116132
plugins.push(
117133
telemetryPlugin({
118-
pluginExecutionTransaction,
134+
sentryClient,
135+
sentryHub,
119136
logger,
120137
shouldSendTelemetry,
121-
sentryClient,
122138
})
123139
);
124140

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,30 @@
1-
import { NodeClient, Transaction } from "@sentry/node";
1+
import { Hub, NodeClient } from "@sentry/node";
22
import { UnpluginOptions } from "unplugin";
33
import { Logger } from "../sentry/logger";
44

55
interface TelemetryPluginOptions {
6+
sentryHub: Hub;
67
sentryClient: NodeClient;
7-
pluginExecutionTransaction: Transaction;
88
shouldSendTelemetry: Promise<boolean>;
99
logger: Logger;
1010
}
1111

1212
export function telemetryPlugin({
13+
sentryHub,
1314
sentryClient,
14-
pluginExecutionTransaction,
1515
shouldSendTelemetry,
1616
logger,
1717
}: TelemetryPluginOptions): UnpluginOptions {
1818
return {
1919
name: "sentry-telemetry-plugin",
20-
buildStart() {
21-
void shouldSendTelemetry.then((willSendTelemetry) => {
22-
if (willSendTelemetry) {
23-
logger.info(
24-
"Sending error and performance telemetry data to Sentry. To disable telemetry, set `options.telemetry` to `false`."
25-
);
26-
}
27-
});
28-
pluginExecutionTransaction.startTimestamp = Date.now() / 1000;
29-
},
30-
async writeBundle() {
31-
pluginExecutionTransaction.finish();
32-
await sentryClient.flush();
20+
async buildStart() {
21+
if (await shouldSendTelemetry) {
22+
logger.info(
23+
"Sending error and performance telemetry data to Sentry. To disable telemetry, set `options.telemetry` to `false`."
24+
);
25+
sentryHub.startTransaction({ name: "Sentry Bundler Plugin execution" }).finish();
26+
await sentryClient.flush(3000);
27+
}
3328
},
3429
};
3530
}

packages/bundler-plugin-core/src/sentry/telemetry.ts

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export function createSentryInstance(
6262
export function setTelemetryDataOnHub(options: NormalizedOptions, hub: Hub, bundler: string) {
6363
const { org, project, release, errorHandler, sourcemaps } = options;
6464

65+
hub.setTag("upload-legacy-sourcemaps", !!release.uploadLegacySourcemaps);
6566
if (release.uploadLegacySourcemaps) {
6667
hub.setTag(
6768
"uploadLegacySourcemapsEntries",
@@ -70,29 +71,19 @@ export function setTelemetryDataOnHub(options: NormalizedOptions, hub: Hub, bund
7071
}
7172

7273
// Optional release pipeline steps
73-
if (release.cleanArtifacts) {
74-
hub.setTag("clean-artifacts", true);
75-
}
74+
hub.setTag("clean-artifacts", release.cleanArtifacts);
7675
if (release.setCommits) {
7776
hub.setTag("set-commits", release.setCommits.auto === true ? "auto" : "manual");
77+
} else {
78+
hub.setTag("set-commits", "undefined");
7879
}
79-
if (release.finalize) {
80-
hub.setTag("finalize-release", true);
81-
}
82-
if (release.deploy) {
83-
hub.setTag("add-deploy", true);
84-
}
80+
hub.setTag("finalize-release", release.finalize);
81+
hub.setTag("deploy-options", !!release.deploy);
8582

8683
// Miscelaneous options
87-
if (errorHandler) {
88-
hub.setTag("error-handler", "custom");
89-
}
90-
if (sourcemaps?.assets) {
91-
hub.setTag("debug-id-upload", true);
92-
}
93-
if (sourcemaps?.deleteFilesAfterUpload) {
94-
hub.setTag("delete-after-upload", true);
95-
}
84+
hub.setTag("custom-error-handler", !!errorHandler);
85+
hub.setTag("sourcemaps-assets", !!sourcemaps?.assets);
86+
hub.setTag("delete-after-upload", !!sourcemaps?.deleteFilesAfterUpload);
9687

9788
hub.setTag("node", process.version);
9889

packages/bundler-plugin-core/test/sentry/telemetry.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ describe("addPluginOptionTagsToHub", () => {
7070
mockedHub as unknown as Hub,
7171
"rollup"
7272
);
73-
expect(mockedHub.setTag).toHaveBeenCalledWith("add-deploy", true);
73+
expect(mockedHub.setTag).toHaveBeenCalledWith("deploy-options", true);
7474
});
7575

7676
it("should set errorHandler tag to `custom` if the errorHandler option is specified", () => {
@@ -80,7 +80,7 @@ describe("addPluginOptionTagsToHub", () => {
8080
mockedHub as unknown as Hub,
8181
"rollup"
8282
);
83-
expect(mockedHub.setTag).toHaveBeenCalledWith("error-handler", "custom");
83+
expect(mockedHub.setTag).toHaveBeenCalledWith("custom-error-handler", true);
8484
});
8585

8686
it.each([

yarn.lock

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2249,6 +2249,16 @@
22492249
"@sentry/utils" "7.50.0"
22502250
tslib "^1.9.3"
22512251

2252+
"@sentry-internal/tracing@7.53.1":
2253+
version "7.53.1"
2254+
resolved "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.53.1.tgz#85517ba93ee721424c865706f7ff4eaab1569e6d"
2255+
integrity sha512-a4H4rvVdz0XDGgNfRqc7zg6rMt2P1P05xBmgfIfztYy94Vciw1QMdboNiT7einr8ra8wogdEaK4Pe2AzYAPBJQ==
2256+
dependencies:
2257+
"@sentry/core" "7.53.1"
2258+
"@sentry/types" "7.53.1"
2259+
"@sentry/utils" "7.53.1"
2260+
tslib "^1.9.3"
2261+
22522262
"@sentry/cli@^2.17.0":
22532263
version "2.18.1"
22542264
resolved "https://registry.npmjs.org/@sentry/cli/-/cli-2.18.1.tgz#c44f189a1a72a83087a297c5fcc7668f86dd4308"
@@ -2269,6 +2279,15 @@
22692279
"@sentry/utils" "7.50.0"
22702280
tslib "^1.9.3"
22712281

2282+
"@sentry/core@7.53.1":
2283+
version "7.53.1"
2284+
resolved "https://registry.npmjs.org/@sentry/core/-/core-7.53.1.tgz#c091a9d7fd010f8a2cb1dd71d949a8e453e35d4c"
2285+
integrity sha512-DAH8IJNORJJ7kQLqsZuhMkN6cwJjXzFuuUoZor7IIDHIHjtl51W+2F3Stg3+I3ZoKDfJfUNKqhipk2WZjG0FBg==
2286+
dependencies:
2287+
"@sentry/types" "7.53.1"
2288+
"@sentry/utils" "7.53.1"
2289+
tslib "^1.9.3"
2290+
22722291
"@sentry/integrations@7.50":
22732292
version "7.50.0"
22742293
resolved "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.50.0.tgz#82616f34ddba3c1f3e17b54900dfa7d8e0a0c537"
@@ -2279,7 +2298,7 @@
22792298
localforage "^1.8.1"
22802299
tslib "^1.9.3"
22812300

2282-
"@sentry/node@7.50", "@sentry/node@7.50.0":
2301+
"@sentry/node@7.50":
22832302
version "7.50.0"
22842303
resolved "https://registry.npmjs.org/@sentry/node/-/node-7.50.0.tgz#d6adab136d87f7dca614ea0d77944f902fa45626"
22852304
integrity sha512-11UJBKoQFMp7f8sbzeO2gENsKIUkVCNBTzuPRib7l2K1HMjSfacXmwwma7ZEs0mc3ofIZ1UYuyONAXmI1lK9cQ==
@@ -2293,11 +2312,30 @@
22932312
lru_map "^0.3.3"
22942313
tslib "^1.9.3"
22952314

2315+
"@sentry/node@7.53.1":
2316+
version "7.53.1"
2317+
resolved "https://registry.npmjs.org/@sentry/node/-/node-7.53.1.tgz#d4c47477cf4305e352b511635d1d3d4d160e8bd7"
2318+
integrity sha512-B4ax8sRd54xj4ad+4eY2EOKNt0Mh1NjuLW1zUKS8HW3h0bmuaDFzGuhEVvEY5H4SaV6tZKj1c0dvnMnyUbYkhA==
2319+
dependencies:
2320+
"@sentry-internal/tracing" "7.53.1"
2321+
"@sentry/core" "7.53.1"
2322+
"@sentry/types" "7.53.1"
2323+
"@sentry/utils" "7.53.1"
2324+
cookie "^0.4.1"
2325+
https-proxy-agent "^5.0.0"
2326+
lru_map "^0.3.3"
2327+
tslib "^1.9.3"
2328+
22962329
"@sentry/types@7.50.0":
22972330
version "7.50.0"
22982331
resolved "https://registry.npmjs.org/@sentry/types/-/types-7.50.0.tgz#52a035cad83a80ca26fa53c09eb1241250c3df3e"
22992332
integrity sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw==
23002333

2334+
"@sentry/types@7.53.1":
2335+
version "7.53.1"
2336+
resolved "https://registry.npmjs.org/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
2337+
integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
2338+
23012339
"@sentry/utils@7.50.0":
23022340
version "7.50.0"
23032341
resolved "https://registry.npmjs.org/@sentry/utils/-/utils-7.50.0.tgz#2b93a48024651436e95b7c8e2066aee7c2234d57"
@@ -2306,6 +2344,14 @@
23062344
"@sentry/types" "7.50.0"
23072345
tslib "^1.9.3"
23082346

2347+
"@sentry/utils@7.53.1":
2348+
version "7.53.1"
2349+
resolved "https://registry.npmjs.org/@sentry/utils/-/utils-7.53.1.tgz#b1f9f1dd4de7127287ad5027c2bd1133c5590486"
2350+
integrity sha512-DKJA1LSUOEv4KOR828MzVuLh+drjeAgzyKgN063OEKmnirgjgRgNNS8wUgwpG0Tn2k6ANZGCwrdfzPeSBxshKg==
2351+
dependencies:
2352+
"@sentry/types" "7.53.1"
2353+
tslib "^1.9.3"
2354+
23092355
"@sigstore/protobuf-specs@^0.1.0":
23102356
version "0.1.0"
23112357
resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4"

0 commit comments

Comments
 (0)