Path: blob/main/src/vs/platform/diagnostics/common/diagnostics.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IStringDictionary } from '../../../base/common/collections.js';6import { ProcessItem } from '../../../base/common/processes.js';7import { UriComponents } from '../../../base/common/uri.js';8import { createDecorator } from '../../instantiation/common/instantiation.js';9import { IWorkspace } from '../../workspace/common/workspace.js';1011export const ID = 'diagnosticsService';12export const IDiagnosticsService = createDecorator<IDiagnosticsService>(ID);1314export interface IDiagnosticsService {15readonly _serviceBrand: undefined;1617getPerformanceInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<PerformanceInfo>;18getSystemInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<SystemInfo>;19getDiagnostics(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<string>;20getWorkspaceFileExtensions(workspace: IWorkspace): Promise<{ extensions: string[] }>;21reportWorkspaceStats(workspace: IWorkspaceInformation): Promise<void>;22}2324export interface IMachineInfo {25os: string;26cpus?: string;27memory: string;28vmHint: string;29linuxEnv?: ILinuxEnv;30}3132export interface ILinuxEnv {33desktopSession?: string;34xdgSessionDesktop?: string;35xdgCurrentDesktop?: string;36xdgSessionType?: string;37}3839export interface IDiagnosticInfo {40machineInfo: IMachineInfo;41workspaceMetadata?: IStringDictionary<WorkspaceStats>;42processes?: ProcessItem;43}44export interface SystemInfo extends IMachineInfo {45processArgs: string;46gpuStatus: any;47screenReader: string;48remoteData: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[];49load?: string;50}5152export interface IRemoteDiagnosticInfo extends IDiagnosticInfo {53hostName: string;54latency?: {55current: number;56average: number;57};58}5960export interface IRemoteDiagnosticError {61hostName: string;62errorMessage: string;63}6465export interface IDiagnosticInfoOptions {66includeProcesses?: boolean;67folders?: UriComponents[];68}6970export interface WorkspaceStatItem {71name: string;72count: number;73}7475export interface WorkspaceStats {76fileTypes: WorkspaceStatItem[];77configFiles: WorkspaceStatItem[];78fileCount: number;79maxFilesReached: boolean;80launchConfigFiles: WorkspaceStatItem[];81totalScanTime: number;82totalReaddirCount: number;83}8485export interface PerformanceInfo {86processInfo?: string;87workspaceInfo?: string;88}8990export interface IWorkspaceInformation extends IWorkspace {91telemetryId: string | undefined;92rendererSessionId: string;93}9495export function isRemoteDiagnosticError(x: unknown): x is IRemoteDiagnosticError {96const candidate = x as IRemoteDiagnosticError | undefined;97return !!candidate?.hostName && !!candidate?.errorMessage;98}99100export class NullDiagnosticsService implements IDiagnosticsService {101_serviceBrand: undefined;102103async getPerformanceInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<PerformanceInfo> {104return {};105}106107async getSystemInfo(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<SystemInfo> {108return {109processArgs: 'nullProcessArgs',110gpuStatus: 'nullGpuStatus',111screenReader: 'nullScreenReader',112remoteData: [],113os: 'nullOs',114memory: 'nullMemory',115vmHint: 'nullVmHint',116};117}118119async getDiagnostics(mainProcessInfo: IMainProcessDiagnostics, remoteInfo: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]): Promise<string> {120return '';121}122123async getWorkspaceFileExtensions(workspace: IWorkspace): Promise<{ extensions: string[] }> {124return { extensions: [] };125}126127async reportWorkspaceStats(workspace: IWorkspaceInformation): Promise<void> { }128129}130131export interface IWindowDiagnostics {132readonly id: number;133readonly pid: number;134readonly title: string;135readonly folderURIs: UriComponents[];136readonly remoteAuthority?: string;137}138139export interface IProcessDiagnostics {140readonly pid: number;141readonly name: string;142}143144export interface IMainProcessDiagnostics {145readonly mainPID: number;146readonly mainArguments: string[]; // All arguments after argv[0], the exec path147readonly windows: IWindowDiagnostics[];148readonly pidToNames: IProcessDiagnostics[];149readonly screenReader: boolean;150readonly gpuFeatureStatus: any;151}152153154