Skip to content

Commit 2a1d8ee

Browse files
authored
feat(node): Add fsInstrumentation (#13291)
1 parent cf63845 commit 2a1d8ee

File tree

14 files changed

+587
-0
lines changed

14 files changed

+587
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
some-file.txt.*
2+
some-file-promises.txt.*
3+
some-file-promisify.txt.*
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
_____________________________
2+
< gimme some fs instrumentation >
3+
-----------------------------
4+
\ ^__^
5+
\ (oo)\_______
6+
(__)\ )\/\\
7+
||----w |
8+
|| ||
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
_____________________________
2+
< gimme some fs instrumentation >
3+
-----------------------------
4+
\ ^__^
5+
\ (oo)\_______
6+
(__)\ )\/\\
7+
||----w |
8+
|| ||
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
_____________________________
2+
< gimme some fs instrumentation >
3+
-----------------------------
4+
\ ^__^
5+
\ (oo)\_______
6+
(__)\ )\/\\
7+
||----w |
8+
|| ||
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import { loggingTransport } from '@sentry-internal/node-integration-tests';
2+
import * as Sentry from '@sentry/node';
3+
4+
Sentry.init({
5+
dsn: 'https://[email protected]/1337',
6+
release: '1.0',
7+
transport: loggingTransport,
8+
tracesSampleRate: 1,
9+
integrations: [
10+
Sentry.fsIntegration({
11+
recordFilePaths: true,
12+
recordErrorMessagesAsSpanAttributes: true,
13+
}),
14+
],
15+
});
16+
17+
import * as fs from 'fs';
18+
import * as os from 'os';
19+
import * as path from 'path';
20+
import * as util from 'util';
21+
import { startExpressServerAndSendPortToRunner } from '@sentry-internal/node-integration-tests';
22+
import express from 'express';
23+
24+
const app = express();
25+
26+
app.get('/readFile-error', async (_, res) => {
27+
try {
28+
await fs.promises.readFile(path.join(__dirname, 'fixtures', 'some-file-that-doesnt-exist.txt'), 'utf-8');
29+
} catch {
30+
// noop
31+
}
32+
res.send('done');
33+
});
34+
35+
app.get('/readFile', async (_, res) => {
36+
await new Promise<void>(resolve => {
37+
fs.readFile(path.join(__dirname, 'fixtures', 'some-file.txt'), 'utf-8', () => {
38+
resolve();
39+
});
40+
});
41+
await fs.promises.readFile(path.join(__dirname, 'fixtures', 'some-file-promises.txt'), 'utf-8');
42+
await util.promisify(fs.readFile)(path.join(__dirname, 'fixtures', 'some-file-promisify.txt'), 'utf-8');
43+
res.send('done');
44+
});
45+
46+
app.get('/copyFile', async (_, res) => {
47+
await new Promise<void>(resolve => {
48+
fs.copyFile(
49+
path.join(__dirname, 'fixtures', 'some-file.txt'),
50+
path.join(__dirname, 'fixtures', 'some-file.txt.copy'),
51+
() => {
52+
resolve();
53+
},
54+
);
55+
});
56+
await fs.promises.copyFile(
57+
path.join(__dirname, 'fixtures', 'some-file-promises.txt'),
58+
path.join(__dirname, 'fixtures', 'some-file-promises.txt.copy'),
59+
);
60+
await util.promisify(fs.copyFile)(
61+
path.join(__dirname, 'fixtures', 'some-file-promisify.txt'),
62+
path.join(__dirname, 'fixtures', 'some-file-promisify.txt.copy'),
63+
);
64+
res.send('done');
65+
});
66+
67+
app.get('/link', async (_, res) => {
68+
await new Promise<void>(resolve => {
69+
fs.link(
70+
path.join(__dirname, 'fixtures', 'some-file.txt'),
71+
path.join(__dirname, 'fixtures', 'some-file.txt.link'),
72+
() => {
73+
resolve();
74+
},
75+
);
76+
});
77+
await fs.promises.link(
78+
path.join(__dirname, 'fixtures', 'some-file-promises.txt'),
79+
path.join(__dirname, 'fixtures', 'some-file-promises.txt.link'),
80+
);
81+
await util.promisify(fs.link)(
82+
path.join(__dirname, 'fixtures', 'some-file-promisify.txt'),
83+
path.join(__dirname, 'fixtures', 'some-file-promisify.txt.link'),
84+
);
85+
86+
await Promise.all([
87+
fs.promises.unlink(path.join(__dirname, 'fixtures', 'some-file.txt.link')),
88+
fs.promises.unlink(path.join(__dirname, 'fixtures', 'some-file-promises.txt.link')),
89+
fs.promises.unlink(path.join(__dirname, 'fixtures', 'some-file-promisify.txt.link')),
90+
]);
91+
92+
res.send('done');
93+
});
94+
95+
app.get('/mkdtemp', async (_, res) => {
96+
await new Promise<void>(resolve => {
97+
fs.mkdtemp(path.join(os.tmpdir(), 'foo-'), () => {
98+
resolve();
99+
});
100+
});
101+
await fs.promises.mkdtemp(path.join(os.tmpdir(), 'foo-'));
102+
await util.promisify(fs.mkdtemp)(path.join(os.tmpdir(), 'foo-'));
103+
104+
res.send('done');
105+
});
106+
107+
app.get('/symlink', async (_, res) => {
108+
await new Promise<void>(resolve => {
109+
fs.symlink(
110+
path.join(__dirname, 'fixtures', 'some-file.txt'),
111+
path.join(__dirname, 'fixtures', 'some-file.txt.symlink'),
112+
() => {
113+
resolve();
114+
},
115+
);
116+
});
117+
await fs.promises.symlink(
118+
path.join(__dirname, 'fixtures', 'some-file-promises.txt'),
119+
path.join(__dirname, 'fixtures', 'some-file-promises.txt.symlink'),
120+
);
121+
await util.promisify(fs.symlink)(
122+
path.join(__dirname, 'fixtures', 'some-file-promisify.txt'),
123+
path.join(__dirname, 'fixtures', 'some-file-promisify.txt.symlink'),
124+
);
125+
126+
await Promise.all([
127+
fs.promises.unlink(path.join(__dirname, 'fixtures', 'some-file.txt.symlink')),
128+
fs.promises.unlink(path.join(__dirname, 'fixtures', 'some-file-promises.txt.symlink')),
129+
fs.promises.unlink(path.join(__dirname, 'fixtures', 'some-file-promisify.txt.symlink')),
130+
]);
131+
132+
res.send('done');
133+
});
134+
135+
Sentry.setupExpressErrorHandler(app);
136+
137+
startExpressServerAndSendPortToRunner(app);

0 commit comments

Comments
 (0)