mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 18:46:40 -05:00
Introduce Universal resource provider to fix ARM throttling issues (#23078)
This commit is contained in:
@@ -3,18 +3,20 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { extensions, TreeItem } from 'vscode';
|
||||
import { extensions } from 'vscode';
|
||||
import * as azdata from 'azdata';
|
||||
|
||||
import { IAzureResourceNodeWithProviderId } from './interfaces';
|
||||
import { AzureAccount, azureResource } from 'azurecore';
|
||||
import { UNIVERSAL_PROVIDER_ID } from '../constants';
|
||||
|
||||
export class AzureResourceService {
|
||||
private _areResourceProvidersLoaded: boolean = false;
|
||||
private _resourceProviders: { [resourceProviderId: string]: azureResource.IAzureResourceProvider } = {};
|
||||
private _treeDataProviders: { [resourceProviderId: string]: azureResource.IAzureResourceTreeDataProvider } = {};
|
||||
private _universalProvider: azureResource.IAzureUniversalResourceProvider | undefined = undefined;
|
||||
|
||||
public constructor() {
|
||||
}
|
||||
public constructor() { }
|
||||
|
||||
public async listResourceProviderIds(): Promise<string[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
@@ -22,6 +24,11 @@ export class AzureResourceService {
|
||||
return Object.keys(this._resourceProviders);
|
||||
}
|
||||
|
||||
public async getResourceProviders(): Promise<{ [resourceProviderId: string]: azureResource.IAzureResourceProvider }> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
return this._resourceProviders;
|
||||
}
|
||||
|
||||
public registerResourceProvider(resourceProvider: azureResource.IAzureResourceProvider): void {
|
||||
this.doRegisterResourceProvider(resourceProvider);
|
||||
}
|
||||
@@ -35,13 +42,11 @@ export class AzureResourceService {
|
||||
public async getRootChildren(resourceProviderId: string, account: AzureAccount, subscription: azureResource.AzureResourceSubscription): Promise<IAzureResourceNodeWithProviderId[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
|
||||
if (!(resourceProviderId in this._resourceProviders)) {
|
||||
if (!(resourceProviderId in this._resourceProviders) && resourceProviderId !== UNIVERSAL_PROVIDER_ID) {
|
||||
throw new Error(`Azure resource provider doesn't exist. Id: ${resourceProviderId}`);
|
||||
}
|
||||
|
||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||
const rootChildren = await treeDataProvider.getRootChildren();
|
||||
|
||||
const rootChildren = <azdata.TreeItem[]>await this._treeDataProviders[resourceProviderId]?.getRootChildren();
|
||||
return rootChildren.map(rootChild => {
|
||||
return {
|
||||
resourceProviderId,
|
||||
@@ -58,13 +63,13 @@ export class AzureResourceService {
|
||||
public async getChildren(resourceProviderId: string, element: azureResource.IAzureResourceNode, browseConnectionMode: boolean = false): Promise<IAzureResourceNodeWithProviderId[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
|
||||
if (!(resourceProviderId in this._resourceProviders)) {
|
||||
if (!(resourceProviderId in this._resourceProviders) && resourceProviderId !== UNIVERSAL_PROVIDER_ID) {
|
||||
throw new Error(`Azure resource provider doesn't exist. Id: ${resourceProviderId}`);
|
||||
}
|
||||
|
||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||
const treeDataProvider = <azureResource.IAzureResourceTreeDataProvider>this._treeDataProviders[resourceProviderId];
|
||||
treeDataProvider.browseConnectionMode = browseConnectionMode;
|
||||
const children = await treeDataProvider.getChildren(element);
|
||||
const children = <azureResource.IAzureResourceNode[]>await treeDataProvider.getChildren(element);
|
||||
|
||||
return children.map((child) => <IAzureResourceNodeWithProviderId>{
|
||||
resourceProviderId: resourceProviderId,
|
||||
@@ -72,15 +77,16 @@ export class AzureResourceService {
|
||||
});
|
||||
}
|
||||
|
||||
public async getTreeItem(resourceProviderId: string, element: azureResource.IAzureResourceNode): Promise<TreeItem> {
|
||||
public async getAllChildren(account: AzureAccount, subscriptions: azureResource.AzureResourceSubscription[], browseConnectionMode: boolean = false): Promise<IAzureResourceNodeWithProviderId[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
const treeDataProvider = <azureResource.IAzureUniversalTreeDataProvider>this._universalProvider?.getTreeDataProvider();
|
||||
treeDataProvider.browseConnectionMode = browseConnectionMode;
|
||||
const children = <azureResource.IAzureResourceNode[]>await treeDataProvider.getAllChildren(account, subscriptions);
|
||||
|
||||
if (!(resourceProviderId in this._resourceProviders)) {
|
||||
throw new Error(`Azure resource provider doesn't exist. Id: ${resourceProviderId}`);
|
||||
}
|
||||
|
||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||
return treeDataProvider.getResourceTreeItem(element);
|
||||
return children.map((child) => <IAzureResourceNodeWithProviderId>{
|
||||
resourceProviderId: UNIVERSAL_PROVIDER_ID,
|
||||
resourceNode: child
|
||||
});
|
||||
}
|
||||
|
||||
public get areResourceProvidersLoaded(): boolean {
|
||||
@@ -107,11 +113,14 @@ export class AzureResourceService {
|
||||
|
||||
if (extension.exports && extension.exports.provideResources) {
|
||||
for (const resourceProvider of <azureResource.IAzureResourceProvider[]>extension.exports.provideResources()) {
|
||||
if (resourceProvider) {
|
||||
if (resourceProvider && resourceProvider.providerId !== UNIVERSAL_PROVIDER_ID) {
|
||||
this.doRegisterResourceProvider(resourceProvider);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (extension.exports && extension.exports.getUniversalProvider) {
|
||||
this._universalProvider = <azureResource.IAzureUniversalResourceProvider>extension.exports.getUniversalProvider();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,5 +131,4 @@ export class AzureResourceService {
|
||||
this._resourceProviders[resourceProvider.providerId] = resourceProvider;
|
||||
this._treeDataProviders[resourceProvider.providerId] = resourceProvider.getTreeDataProvider();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user