use of com.microsoft.azure.toolkit.lib.appservice.model.Runtime in project azure-tools-for-java by Microsoft.
the class WebAppDeployDialog method deploy.
private void deploy(String artifactName, String artifactPath) {
int selectedRow = table.getSelectionIndex();
String appServiceName = table.getItems()[selectedRow].getText(0);
IWebApp webApp = webAppDetailsMap.get(appServiceName);
String jobDescription = String.format("Web App '%s' deployment", webApp.name());
if (isDeployToSlot) {
jobDescription = String.format("Web App '%s' deploy to slot '%s'", webApp.name(), isCreateNewSlot ? webAppSettingModel.getNewSlotName() : webAppSettingModel.getSlotName());
}
String deploymentName = UUID.randomUUID().toString();
AzureDeploymentProgressNotification.createAzureDeploymentProgressNotification(deploymentName, jobDescription);
boolean isDeployToRoot = btnDeployToRoot.getSelection();
Job job = new Job(jobDescription) {
@Override
protected IStatus run(IProgressMonitor monitor) {
String message = "Packaging Artifact...";
String cancelMessage = "Interrupted by user";
String successMessage = "";
String errorMessage = "Error";
Map<String, String> postEventProperties = new HashMap<>();
try {
boolean isJar = MavenUtils.isMavenProject(project) && MavenUtils.getPackaging(project).equals("jar");
postEventProperties.put(TelemetryConstants.JAVA_APPNAME, project.getName());
postEventProperties.put(TelemetryConstants.FILETYPE, isJar ? "jar" : "war");
Runtime runtime = webApp.getRuntime();
String osValue = (String) Optional.ofNullable(runtime.getOperatingSystem()).map(com.microsoft.azure.toolkit.lib.appservice.model.OperatingSystem::toString).orElse("");
String webContainerValue = (String) Optional.ofNullable(runtime.getWebContainer()).map(WebContainer::getValue).orElse("");
String javaVersionValue = (String) Optional.ofNullable(runtime.getJavaVersion()).map(com.microsoft.azure.toolkit.lib.appservice.model.JavaVersion::getValue).orElse("");
postEventProperties.put(TelemetryConstants.RUNTIME, String.format("%s-%s-%s", osValue, webContainerValue, javaVersionValue));
postEventProperties.put(TelemetryConstants.WEBAPP_DEPLOY_TO_SLOT, Boolean.valueOf(isDeployToSlot).toString());
} catch (Exception e) {
}
String errTitle = "Deploy Web App Error";
monitor.beginTask(message, IProgressMonitor.UNKNOWN);
IWebAppBase<? extends AppServiceBaseEntity> deployTarget = null;
Operation operation = TelemetryManager.createOperation(WEBAPP, DEPLOY_WEBAPP);
try {
operation.start();
deployTarget = getRealWebApp(webApp, this, monitor, deploymentName);
String sitePath = buildSiteLink(deployTarget, isDeployToRoot ? null : artifactName);
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, sitePath, 5, message);
if (!MavenUtils.isMavenProject(project)) {
export(artifactName, artifactPath);
}
message = "Deploying Web App...";
if (isDeployToSlot) {
message = "Deploying Web App to Slot...";
}
monitor.setTaskName(message);
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, sitePath, 30, message);
AzureWebAppMvpModel.getInstance().deployArtifactsToWebApp(deployTarget, new File(artifactPath), isDeployToRoot, new UpdateProgressIndicator(monitor));
if (monitor.isCanceled()) {
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, null, -1, cancelMessage);
return Status.CANCEL_STATUS;
}
message = "Checking Web App availability...";
monitor.setTaskName(message);
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, sitePath, 20, message);
// to make warn up cancelable
int stepLimit = 5;
int sleepMs = 1000;
CountDownLatch countDownLatch = new CountDownLatch(1);
new Thread(() -> {
try {
for (int step = 0; step < stepLimit; ++step) {
if (monitor.isCanceled() || isUrlAccessible(sitePath)) {
// warm up
break;
}
Thread.sleep(sleepMs);
}
} catch (Exception ex) {
LOG.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "run@Thread@run@ProgressDialog@deploy@AppServiceCreateDialog@SingInDialog", ex));
} finally {
countDownLatch.countDown();
}
}).start();
try {
countDownLatch.await();
} catch (Exception ignore) {
}
if (monitor.isCanceled()) {
// it's published but not warmed up yet - consider as success
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, sitePath, 100, successMessage);
return Status.CANCEL_STATUS;
}
monitor.done();
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, sitePath, 100, successMessage);
AppInsightsClient.create("Deploy as WebApp", "", postEventProperties);
} catch (Exception ex) {
postEventProperties.put("PublishError", ex.getMessage());
LOG.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "run@ProgressDialog@deploy@AppServiceCreateDialog", ex));
AzureDeploymentProgressNotification.notifyProgress(this, deploymentName, null, -1, errorMessage);
if (deployTarget != null) {
deployTarget.start();
}
Display.getDefault().asyncExec(() -> ErrorWindow.go(parentShell, ex.getMessage(), errTitle));
EventUtil.logError(operation, ErrorType.systemError, ex, postEventProperties, null);
} finally {
EventUtil.logEvent(EventType.info, operation, postEventProperties);
operation.complete();
}
return Status.OK_STATUS;
}
};
job.schedule();
}
use of com.microsoft.azure.toolkit.lib.appservice.model.Runtime in project azure-tools-for-java by Microsoft.
the class WebAppConfigFormPanelAdvance method createUIComponents.
private void createUIComponents() {
// TODO: place custom component creation code here
appServiceConfigPanelAdvanced = new AppServiceInfoAdvancedPanel(project, WebAppConfig::getWebAppDefaultConfig);
final List<PricingTier> validPricing = AzureMvpModel.getInstance().listPricingTier();
appServiceConfigPanelAdvanced.setValidPricingTier(validPricing, WebAppConfig.DEFAULT_PRICING_TIER);
appServiceMonitorPanel = new AppServiceMonitorPanel(project);
// Application Insights is not supported in Web App
appServiceMonitorPanel.setApplicationInsightsVisible(false);
appServiceMonitorPanel.setData(MonitorConfig.builder().build());
appServiceConfigPanelAdvanced.getSelectorRuntime().addActionListener(event -> {
final Runtime runtime = appServiceConfigPanelAdvanced.getSelectorRuntime().getValue();
appServiceMonitorPanel.setApplicationLogVisible(runtime != null && runtime.getOperatingSystem() == OperatingSystem.WINDOWS);
});
}
Aggregations