mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-03 01:25:38 -05:00
* Fix initial build breaks from 1.67 merge (#2514) * Update yarn lock files * Update build scripts * Fix tsconfig * Build breaks * WIP * Update yarn lock files * Misc breaks * Updates to package.json * Breaks * Update yarn * Fix breaks * Breaks * Build breaks * Breaks * Breaks * Breaks * Breaks * Breaks * Missing file * Breaks * Breaks * Breaks * Breaks * Breaks * Fix several runtime breaks (#2515) * Missing files * Runtime breaks * Fix proxy ordering issue * Remove commented code * Fix breaks with opening query editor * Fix post merge break * Updates related to setup build and other breaks (#2516) * Fix bundle build issues * Update distro * Fix distro merge and update build JS files * Disable pipeline steps * Remove stats call * Update license name * Make new RPM dependencies a warning * Fix extension manager version checks * Update JS file * Fix a few runtime breaks * Fixes * Fix runtime issues * Fix build breaks * Update notebook tests (part 1) * Fix broken tests * Linting errors * Fix hygiene * Disable lint rules * Bump distro * Turn off smoke tests * Disable integration tests * Remove failing "activate" test * Remove failed test assertion * Disable other broken test * Disable query history tests * Disable extension unit tests * Disable failing tasks
95 lines
4.1 KiB
TypeScript
95 lines
4.1 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { Event as IpcEvent } from 'electron';
|
|
import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain';
|
|
import { CancellationToken } from 'vs/base/common/cancellation';
|
|
import { URI } from 'vs/base/common/uri';
|
|
import { IDiagnosticInfo, IDiagnosticInfoOptions, IRemoteDiagnosticError, IRemoteDiagnosticInfo } from 'vs/platform/diagnostics/common/diagnostics';
|
|
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
|
import { ICodeWindow } from 'vs/platform/window/electron-main/window';
|
|
import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows';
|
|
import { isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace';
|
|
import { IWorkspacesManagementMainService } from 'vs/platform/workspaces/electron-main/workspacesManagementMainService';
|
|
|
|
export const ID = 'diagnosticsMainService';
|
|
export const IDiagnosticsMainService = createDecorator<IDiagnosticsMainService>(ID);
|
|
|
|
export interface IRemoteDiagnosticOptions {
|
|
includeProcesses?: boolean;
|
|
includeWorkspaceMetadata?: boolean;
|
|
}
|
|
|
|
export interface IDiagnosticsMainService {
|
|
readonly _serviceBrand: undefined;
|
|
getRemoteDiagnostics(options: IRemoteDiagnosticOptions): Promise<(IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]>;
|
|
}
|
|
|
|
export class DiagnosticsMainService implements IDiagnosticsMainService {
|
|
|
|
declare readonly _serviceBrand: undefined;
|
|
|
|
constructor(
|
|
@IWindowsMainService private readonly windowsMainService: IWindowsMainService,
|
|
@IWorkspacesManagementMainService private readonly workspacesManagementMainService: IWorkspacesManagementMainService
|
|
) { }
|
|
|
|
async getRemoteDiagnostics(options: IRemoteDiagnosticOptions): Promise<(IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]> {
|
|
const windows = this.windowsMainService.getWindows();
|
|
const diagnostics: Array<IDiagnosticInfo | IRemoteDiagnosticError | undefined> = await Promise.all(windows.map(window => {
|
|
return new Promise<IDiagnosticInfo | IRemoteDiagnosticError | undefined>((resolve) => {
|
|
const remoteAuthority = window.remoteAuthority;
|
|
if (remoteAuthority) {
|
|
const replyChannel = `vscode:getDiagnosticInfoResponse${window.id}`;
|
|
const args: IDiagnosticInfoOptions = {
|
|
includeProcesses: options.includeProcesses,
|
|
folders: options.includeWorkspaceMetadata ? this.getFolderURIs(window) : undefined
|
|
};
|
|
|
|
window.sendWhenReady('vscode:getDiagnosticInfo', CancellationToken.None, { replyChannel, args });
|
|
|
|
validatedIpcMain.once(replyChannel, (_: IpcEvent, data: IRemoteDiagnosticInfo) => {
|
|
// No data is returned if getting the connection fails.
|
|
if (!data) {
|
|
resolve({ hostName: remoteAuthority, errorMessage: `Unable to resolve connection to '${remoteAuthority}'.` });
|
|
}
|
|
|
|
resolve(data);
|
|
});
|
|
|
|
setTimeout(() => {
|
|
resolve({ hostName: remoteAuthority, errorMessage: `Connection to '${remoteAuthority}' could not be established` });
|
|
}, 5000);
|
|
} else {
|
|
resolve(undefined);
|
|
}
|
|
});
|
|
}));
|
|
|
|
return diagnostics.filter((x): x is IRemoteDiagnosticInfo | IRemoteDiagnosticError => !!x);
|
|
}
|
|
|
|
private getFolderURIs(window: ICodeWindow): URI[] {
|
|
const folderURIs: URI[] = [];
|
|
|
|
const workspace = window.openedWorkspace;
|
|
if (isSingleFolderWorkspaceIdentifier(workspace)) {
|
|
folderURIs.push(workspace.uri);
|
|
} else if (isWorkspaceIdentifier(workspace)) {
|
|
const resolvedWorkspace = this.workspacesManagementMainService.resolveLocalWorkspaceSync(workspace.configPath); // workspace folders can only be shown for local (resolved) workspaces
|
|
if (resolvedWorkspace) {
|
|
const rootFolders = resolvedWorkspace.folders;
|
|
rootFolders.forEach(root => {
|
|
folderURIs.push(root.uri);
|
|
});
|
|
} else {
|
|
//TODO@RMacfarlane: can we add the workspace file here?
|
|
}
|
|
}
|
|
|
|
return folderURIs;
|
|
}
|
|
}
|