Skip to content

Commit bc25233

Browse files
authored
watcher - improve stats reporting (microsoft#210684)
1 parent b44e8c6 commit bc25233

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

src/vs/platform/files/common/watcher.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ export function requestFilterToString(filter: FileChangeFilter | undefined): str
470470
return '<all>';
471471
}
472472

473-
return filters.join(', ');
473+
return `[${filters.join(', ')}]`;
474474
}
475475

476476
return '<none>';

src/vs/platform/files/node/watcher/watcherStats.ts

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,41 @@ export function computeStats(
1414
): string {
1515
const lines: string[] = [];
1616

17-
const recursiveRequests = sortByPathPrefix(requests.filter(request => request.recursive));
18-
const recursiveRequestsStatus = computeRequestStatus(recursiveRequests, recursiveWatcher);
17+
const allRecursiveRequests = sortByPathPrefix(requests.filter(request => request.recursive));
18+
const nonSuspendedRecursiveRequests = allRecursiveRequests.filter(request => recursiveWatcher.isSuspended(request) === false);
19+
const suspendedPollingRecursiveRequests = allRecursiveRequests.filter(request => recursiveWatcher.isSuspended(request) === 'polling');
20+
const suspendedNonPollingRecursiveRequests = allRecursiveRequests.filter(request => recursiveWatcher.isSuspended(request) === true);
21+
22+
const recursiveRequestsStatus = computeRequestStatus(allRecursiveRequests, recursiveWatcher);
1923
const recursiveWatcherStatus = computeRecursiveWatchStatus(recursiveWatcher);
2024

21-
const nonRecursiveRequests = sortByPathPrefix(requests.filter(request => !request.recursive));
22-
const nonRecursiveRequestsStatus = computeRequestStatus(nonRecursiveRequests, nonRecursiveWatcher);
25+
const allNonRecursiveRequests = sortByPathPrefix(requests.filter(request => !request.recursive));
26+
const nonSuspendedNonRecursiveRequests = allNonRecursiveRequests.filter(request => nonRecursiveWatcher.isSuspended(request) === false);
27+
const suspendedPollingNonRecursiveRequests = allNonRecursiveRequests.filter(request => nonRecursiveWatcher.isSuspended(request) === 'polling');
28+
const suspendedNonPollingNonRecursiveRequests = allNonRecursiveRequests.filter(request => nonRecursiveWatcher.isSuspended(request) === true);
29+
30+
const nonRecursiveRequestsStatus = computeRequestStatus(allNonRecursiveRequests, nonRecursiveWatcher);
2331
const nonRecursiveWatcherStatus = computeNonRecursiveWatchStatus(nonRecursiveWatcher);
2432

2533
lines.push('[Summary]');
26-
lines.push(`- Recursive Requests: total: ${recursiveRequests.length}, suspended: ${recursiveRequestsStatus.suspended}, polling: ${recursiveRequestsStatus.polling}`);
27-
lines.push(`- Non-Recursive Requests: total: ${nonRecursiveRequests.length}, suspended: ${nonRecursiveRequestsStatus.suspended}, polling: ${nonRecursiveRequestsStatus.polling}`);
34+
lines.push(`- Recursive Requests: total: ${allRecursiveRequests.length}, suspended: ${recursiveRequestsStatus.suspended}, polling: ${recursiveRequestsStatus.polling}`);
35+
lines.push(`- Non-Recursive Requests: total: ${allNonRecursiveRequests.length}, suspended: ${nonRecursiveRequestsStatus.suspended}, polling: ${nonRecursiveRequestsStatus.polling}`);
2836
lines.push(`- Recursive Watchers: total: ${recursiveWatcher.watchers.size}, active: ${recursiveWatcherStatus.active}, failed: ${recursiveWatcherStatus.failed}, stopped: ${recursiveWatcherStatus.stopped}`);
2937
lines.push(`- Non-Recursive Watchers: total: ${nonRecursiveWatcher.watchers.size}, active: ${nonRecursiveWatcherStatus.active}, failed: ${nonRecursiveWatcherStatus.failed}, reusing: ${nonRecursiveWatcherStatus.reusing}`);
3038
lines.push(`- I/O Handles Impact: total: ${recursiveRequestsStatus.polling + nonRecursiveRequestsStatus.polling + recursiveWatcherStatus.active + nonRecursiveWatcherStatus.active}`);
3139

32-
lines.push(`\n[Recursive Requests (${recursiveRequests.length}, suspended: ${recursiveRequestsStatus.suspended}, polling: ${recursiveRequestsStatus.polling})]:`);
33-
for (const request of recursiveRequests) {
40+
lines.push(`\n[Recursive Requests (${allRecursiveRequests.length}, suspended: ${recursiveRequestsStatus.suspended}, polling: ${recursiveRequestsStatus.polling})]:`);
41+
for (const request of [nonSuspendedRecursiveRequests, suspendedPollingRecursiveRequests, suspendedNonPollingRecursiveRequests].flat()) {
3442
fillRequestStats(lines, request, recursiveWatcher);
3543
}
3644

37-
lines.push(`\n[Non-Recursive Requests (${nonRecursiveRequests.length}, suspended: ${nonRecursiveRequestsStatus.suspended}, polling: ${nonRecursiveRequestsStatus.polling})]:`);
38-
for (const request of nonRecursiveRequests) {
45+
fillRecursiveWatcherStats(lines, recursiveWatcher);
46+
47+
lines.push(`\n[Non-Recursive Requests (${allNonRecursiveRequests.length}, suspended: ${nonRecursiveRequestsStatus.suspended}, polling: ${nonRecursiveRequestsStatus.polling})]:`);
48+
for (const request of [nonSuspendedNonRecursiveRequests, suspendedPollingNonRecursiveRequests, suspendedNonPollingNonRecursiveRequests].flat()) {
3949
fillRequestStats(lines, request, nonRecursiveWatcher);
4050
}
4151

42-
fillRecursiveWatcherStats(lines, recursiveWatcher);
4352
fillNonRecursiveWatcherStats(lines, nonRecursiveWatcher);
4453

4554
let maxLength = 0;
@@ -157,7 +166,7 @@ function fillRequestStats(lines: string[], request: IUniversalWatchRequest, watc
157166
}
158167
}
159168

160-
lines.push(`${request.path}\t${decorations.length > 0 ? decorations.join(' ') + ' ' : ''}(${requestDetailsToString(request)})`);
169+
lines.push(` ${request.path}\t${decorations.length > 0 ? decorations.join(' ') + ' ' : ''}(${requestDetailsToString(request)})`);
161170
}
162171

163172
function requestDetailsToString(request: IUniversalWatchRequest): string {
@@ -184,24 +193,27 @@ function fillRecursiveWatcherStats(lines: string[], recursiveWatcher: ParcelWatc
184193
if (watcher.restarts > 0) {
185194
decorations.push(`[RESTARTED:${watcher.restarts}]`);
186195
}
187-
lines.push(`${watcher.request.path}\t${decorations.length > 0 ? decorations.join(' ') + ' ' : ''}(${requestDetailsToString(watcher.request)})`);
196+
lines.push(` ${watcher.request.path}\t${decorations.length > 0 ? decorations.join(' ') + ' ' : ''}(${requestDetailsToString(watcher.request)})`);
188197
}
189198
}
190199

191200
function fillNonRecursiveWatcherStats(lines: string[], nonRecursiveWatcher: NodeJSWatcher): void {
192-
const watchers = sortByPathPrefix(Array.from(nonRecursiveWatcher.watchers.values()));
201+
const allWatchers = sortByPathPrefix(Array.from(nonRecursiveWatcher.watchers.values()));
202+
const activeWatchers = allWatchers.filter(watcher => !watcher.instance.failed && !watcher.instance.isReusingRecursiveWatcher);
203+
const failedWatchers = allWatchers.filter(watcher => watcher.instance.failed);
204+
const reusingWatchers = allWatchers.filter(watcher => watcher.instance.isReusingRecursiveWatcher);
193205

194206
const { active, failed, reusing } = computeNonRecursiveWatchStatus(nonRecursiveWatcher);
195-
lines.push(`\n[Non-Recursive Watchers (${watchers.length}, active: ${active}, failed: ${failed}, reusing: ${reusing})]:`);
207+
lines.push(`\n[Non-Recursive Watchers (${allWatchers.length}, active: ${active}, failed: ${failed}, reusing: ${reusing})]:`);
196208

197-
for (const watcher of watchers) {
209+
for (const watcher of [activeWatchers, failedWatchers, reusingWatchers].flat()) {
198210
const decorations = [];
199211
if (watcher.instance.failed) {
200212
decorations.push('[FAILED]');
201213
}
202214
if (watcher.instance.isReusingRecursiveWatcher) {
203215
decorations.push('[REUSING]');
204216
}
205-
lines.push(`${watcher.request.path}\t${decorations.length > 0 ? decorations.join(' ') + ' ' : ''}(${requestDetailsToString(watcher.request)})`);
217+
lines.push(` ${watcher.request.path}\t${decorations.length > 0 ? decorations.join(' ') + ' ' : ''}(${requestDetailsToString(watcher.request)})`);
206218
}
207219
}

0 commit comments

Comments
 (0)