Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/diagnostics/common/diagnostics.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { IStringDictionary } from '../../../base/common/collections.js';
7
import { ProcessItem } from '../../../base/common/processes.js';
8
import { UriComponents } from '../../../base/common/uri.js';
9
import { createDecorator } from '../../instantiation/common/instantiation.js';
10
import { IWorkspace } from '../../workspace/common/workspace.js';
11
12
export const ID = 'diagnosticsService';
13
export const IDiagnosticsService = createDecorator<IDiagnosticsService>(ID);
14
15
export interface IDiagnosticsService {
16
readonly _serviceBrand: undefined;
17
18
getPerformanceInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<PerformanceInfo>;
19
getSystemInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<SystemInfo>;
20
getDiagnostics(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<string>;
21
getWorkspaceFileExtensions(workspace: IWorkspace): Promise<{ extensions: string[] }>;
22
reportWorkspaceStats(workspace: IWorkspaceInformation): Promise<void>;
23
}
24
25
export interface IMachineInfo {
26
os: string;
27
cpus?: string;
28
memory: string;
29
vmHint: string;
30
linuxEnv?: ILinuxEnv;
31
}
32
33
export interface ILinuxEnv {
34
desktopSession?: string;
35
xdgSessionDesktop?: string;
36
xdgCurrentDesktop?: string;
37
xdgSessionType?: string;
38
}
39
40
export interface IDiagnosticInfo {
41
machineInfo: IMachineInfo;
42
workspaceMetadata?: IStringDictionary<WorkspaceStats>;
43
processes?: ProcessItem;
44
}
45
export interface SystemInfo extends IMachineInfo {
46
processArgs: string;
47
gpuStatus: any;
48
screenReader: string;
49
remoteData: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[];
50
load?: string;
51
}
52
53
export interface IRemoteDiagnosticInfo extends IDiagnosticInfo {
54
hostName: string;
55
latency?: {
56
current: number;
57
average: number;
58
};
59
}
60
61
export interface IRemoteDiagnosticError {
62
hostName: string;
63
errorMessage: string;
64
}
65
66
export interface IDiagnosticInfoOptions {
67
includeProcesses?: boolean;
68
folders?: UriComponents[];
69
}
70
71
export interface WorkspaceStatItem {
72
name: string;
73
count: number;
74
}
75
76
export interface WorkspaceStats {
77
fileTypes: WorkspaceStatItem[];
78
configFiles: WorkspaceStatItem[];
79
fileCount: number;
80
maxFilesReached: boolean;
81
launchConfigFiles: WorkspaceStatItem[];
82
totalScanTime: number;
83
totalReaddirCount: number;
84
}
85
86
export interface PerformanceInfo {
87
processInfo?: string;
88
workspaceInfo?: string;
89
}
90
91
export interface IWorkspaceInformation extends IWorkspace {
92
telemetryId: string | undefined;
93
rendererSessionId: string;
94
}
95
96
export function isRemoteDiagnosticError(x: unknown): x is IRemoteDiagnosticError {
97
const candidate = x as IRemoteDiagnosticError | undefined;
98
return !!candidate?.hostName && !!candidate?.errorMessage;
99
}
100
101
export class NullDiagnosticsService implements IDiagnosticsService {
102
_serviceBrand: undefined;
103
104
async getPerformanceInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<PerformanceInfo> {
105
return {};
106
}
107
108
async getSystemInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<SystemInfo> {
109
return {
110
processArgs: 'nullProcessArgs',
111
gpuStatus: 'nullGpuStatus',
112
screenReader: 'nullScreenReader',
113
remoteData: [],
114
os: 'nullOs',
115
memory: 'nullMemory',
116
vmHint: 'nullVmHint',
117
};
118
}
119
120
async getDiagnostics(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<string> {
121
return '';
122
}
123
124
async getWorkspaceFileExtensions(workspace: IWorkspace): Promise<{ extensions: string[] }> {
125
return { extensions: [] };
126
}
127
128
async reportWorkspaceStats(workspace: IWorkspaceInformation): Promise<void> { }
129
130
}
131
132
export interface IWindowDiagnostics {
133
readonly id: number;
134
readonly pid: number;
135
readonly title: string;
136
readonly folderURIs: UriComponents[];
137
readonly remoteAuthority?: string;
138
}
139
140
export interface IProcessDiagnostics {
141
readonly pid: number;
142
readonly name: string;
143
}
144
145
export interface IMainProcessDiagnostics {
146
readonly mainPID: number;
147
readonly mainArguments: string[]; // All arguments after argv[0], the exec path
148
readonly windows: IWindowDiagnostics[];
149
readonly pidToNames: IProcessDiagnostics[];
150
readonly screenReader: boolean;
151
readonly gpuFeatureStatus: any;
152
}
153
154