Flat File Import says command not found on first run (#10081) (#10184)

* Changed the activation event from onCommand to startup "*"

* Refractored some code to fix the issue

* Made some PR related changes and fixed a condition where the same error was occurring when the flatFileImport has to download binaries from the internet.

* Reverted activation event back to previous state as it had no effect.

* Made changes mentioned in the PR

Co-authored-by: Aasim Shahnawaz Khan <aaskhan@microsoft.com>
This commit is contained in:
Aasim Khan
2020-04-28 18:15:20 -07:00
committed by GitHub
parent 793f189a83
commit 046995f2a5
3 changed files with 44 additions and 55 deletions

View File

@@ -30,45 +30,43 @@ export class ServiceClient {
config.installDirectory = path.join(context.extensionPath, config.installDirectory);
config.proxy = vscode.workspace.getConfiguration('http').get('proxy');
config.strictSSL = vscode.workspace.getConfiguration('http').get('proxyStrictSSL') || true;
const serverdownloader = new ServerProvider(config);
serverdownloader.eventEmitter.onAny(this.generateHandleServerProviderEvent());
let clientOptions: ClientOptions = this.createClientOptions();
const installationStart = Date.now();
let client: SqlOpsDataClient;
return new Promise((resolve, reject) => {
serverdownloader.getOrDownloadServer().then(e => {
const installationComplete = Date.now();
let serverOptions = this.generateServerOptions(e, context);
client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
const processStart = Date.now();
client.onReady().then(() => {
const processEnd = Date.now();
this.statusView.text = localize('serviceStarted', "{0} Started", Constants.serviceName);
setTimeout(() => {
this.statusView.hide();
}, 1500);
Telemetry.sendTelemetryEvent('startup/LanguageClientStarted', {
installationTime: String(installationComplete - installationStart),
processStartupTime: String(processEnd - processStart),
totalTime: String(processEnd - installationStart),
beginningTimestamp: String(installationStart)
});
try {
const installationStart = Date.now();
let client: SqlOpsDataClient;
let serviceBinaries = await serverdownloader.getOrDownloadServer();
const installationComplete = Date.now();
let serverOptions = this.generateServerOptions(serviceBinaries, context);
client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
const processStart = Date.now();
client.onReady().then(() => {
const processEnd = Date.now();
this.statusView.text = localize('serviceStarted', "{0} Started", Constants.serviceName);
setTimeout(() => {
this.statusView.hide();
}, 1500);
Telemetry.sendTelemetryEvent('startup/LanguageClientStarted', {
installationTime: String(installationComplete - installationStart),
processStartupTime: String(processEnd - processStart),
totalTime: String(processEnd - installationStart),
beginningTimestamp: String(installationStart)
});
this.statusView.show();
this.statusView.text = localize('serviceStarting', "Starting {0}", Constants.serviceName);
let disposable = client.start();
context.subscriptions.push(disposable);
resolve(client);
}, e => {
Telemetry.sendTelemetryEvent('ServiceInitializingFailed');
vscode.window.showErrorMessage(localize('flatFileImport.serviceStartFailed', "Failed to start {0}: {1}", Constants.serviceName, e));
// Just resolve to avoid unhandled promise. We show the error to the user.
resolve(undefined);
});
});
this.statusView.show();
this.statusView.text = localize('serviceStarting', "Starting {0}", Constants.serviceName);
let disposable = client.start();
context.subscriptions.push(disposable);
return client;
}
catch (error) {
Telemetry.sendTelemetryEvent('ServiceInitializingFailed');
vscode.window.showErrorMessage(localize('flatFileImport.serviceStartFailed', "Failed to start {0}: {1}", Constants.serviceName, error));
// Just resolve to avoid unhandled promise. We show the error to the user.
return undefined;
}
}
private createClientOptions(): ClientOptions {