mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-07 09:35:41 -05:00
Arc - Fix sqlmiaa initial load (#11125)
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
import * as vscode from 'vscode';
|
||||
import { Authentication, BasicAuth } from '../controller/auth';
|
||||
import { EndpointsRouterApi, EndpointModel, RegistrationRouterApi, RegistrationResponse, TokenRouterApi, SqlInstanceRouterApi } from '../controller/generated/v1/api';
|
||||
import { parseEndpoint, parseInstanceName } from '../common/utils';
|
||||
import { getAzurecoreApi, parseEndpoint, parseInstanceName } from '../common/utils';
|
||||
import { ResourceType } from '../constants';
|
||||
import { ConnectToControllerDialog } from '../ui/dialogs/connectControllerDialog';
|
||||
import { AzureArcTreeDataProvider } from '../ui/tree/azureArcTreeDataProvider';
|
||||
@@ -29,6 +29,7 @@ export type ResourceInfo = {
|
||||
export interface Registration extends RegistrationResponse {
|
||||
externalIp?: string;
|
||||
externalPort?: string;
|
||||
region?: string
|
||||
}
|
||||
|
||||
export class ControllerModel {
|
||||
@@ -101,7 +102,9 @@ export class ControllerModel {
|
||||
}),
|
||||
this._tokenRouter.apiV1TokenPost().then(async response => {
|
||||
this._namespace = response.body.namespace!;
|
||||
this._registrations = (await this._registrationRouter.apiV1RegistrationListResourcesNsGet(this._namespace)).body.map(mapRegistrationResponse);
|
||||
const registrationResponse = await this._registrationRouter.apiV1RegistrationListResourcesNsGet(this._namespace);
|
||||
this._registrations = await Promise.all(registrationResponse.body.map(mapRegistrationResponse));
|
||||
|
||||
this._controllerRegistration = this._registrations.find(r => r.instanceType === ResourceType.dataControllers);
|
||||
this.registrationsLastUpdated = new Date();
|
||||
this._onRegistrationsUpdated.fire(this._registrations);
|
||||
@@ -183,7 +186,12 @@ export class ControllerModel {
|
||||
* Maps a RegistrationResponse to a Registration,
|
||||
* @param response The RegistrationResponse to map
|
||||
*/
|
||||
function mapRegistrationResponse(response: RegistrationResponse): Registration {
|
||||
async function mapRegistrationResponse(response: RegistrationResponse): Promise<Registration> {
|
||||
const parsedEndpoint = parseEndpoint(response.externalEndpoint);
|
||||
return { ...response, externalIp: parsedEndpoint.ip, externalPort: parsedEndpoint.port };
|
||||
return {
|
||||
...response,
|
||||
externalIp: parsedEndpoint.ip,
|
||||
externalPort: parsedEndpoint.port,
|
||||
region: (await getAzurecoreApi()).getRegionDisplayName(response.location)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,13 +27,12 @@ export class MiaaModel extends ResourceModel {
|
||||
// The ID of the active connection used to query the server
|
||||
private _activeConnectionId: string | undefined = undefined;
|
||||
|
||||
private readonly _onPasswordUpdated = new vscode.EventEmitter<string>();
|
||||
private readonly _onStatusUpdated = new vscode.EventEmitter<HybridSqlNsNameGetResponse | undefined>();
|
||||
private readonly _onDatabasesUpdated = new vscode.EventEmitter<DatabaseModel[]>();
|
||||
public onPasswordUpdated = this._onPasswordUpdated.event;
|
||||
public onStatusUpdated = this._onStatusUpdated.event;
|
||||
public onDatabasesUpdated = this._onDatabasesUpdated.event;
|
||||
public passwordLastUpdated?: Date;
|
||||
public statusLastUpdated?: Date;
|
||||
public databasesLastUpdated?: Date;
|
||||
|
||||
private _refreshPromise: Deferred<void> | undefined = undefined;
|
||||
|
||||
@@ -78,12 +77,14 @@ export class MiaaModel extends ResourceModel {
|
||||
try {
|
||||
const instanceRefresh = this._sqlInstanceRouter.apiV1HybridSqlNsNameGet(this.info.namespace, this.info.name).then(response => {
|
||||
this._status = response.body;
|
||||
this.statusLastUpdated = new Date();
|
||||
this._onStatusUpdated.fire(this._status);
|
||||
}).catch(err => {
|
||||
// If an error occurs show a message so the user knows something failed but still
|
||||
// fire the event so callers can know to update (e.g. so dashboards don't show the
|
||||
// loading icon forever)
|
||||
vscode.window.showErrorMessage(loc.fetchStatusFailed(this.info.name, err));
|
||||
this.statusLastUpdated = new Date();
|
||||
this._onStatusUpdated.fire(undefined);
|
||||
throw err;
|
||||
});
|
||||
@@ -111,6 +112,7 @@ export class MiaaModel extends ResourceModel {
|
||||
} else {
|
||||
this._databases = (<string[]>databases).map(db => { return { name: db, status: '-' }; });
|
||||
}
|
||||
this.databasesLastUpdated = new Date();
|
||||
this._onDatabasesUpdated.fire(this._databases);
|
||||
});
|
||||
});
|
||||
@@ -125,6 +127,7 @@ export class MiaaModel extends ResourceModel {
|
||||
} else {
|
||||
vscode.window.showErrorMessage(loc.fetchStatusFailed(this.info.name, err));
|
||||
}
|
||||
this.databasesLastUpdated = new Date();
|
||||
this._onDatabasesUpdated.fire(this._databases);
|
||||
throw err;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user