Skip to content

Commit 65f066e

Browse files
Merge remote-tracking branch 'origin/develop' into develop.next
2 parents 7c0fa05 + 9ee4564 commit 65f066e

File tree

89 files changed

+3068
-2416
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+3068
-2416
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-applicationinsights/src/main/java/com/microsoft/azure/toolkit/intellij/applicationinsights/connection/ApplicationInsightsResourceDefinition.java

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,22 @@
55

66
package com.microsoft.azure.toolkit.intellij.applicationinsights.connection;
77

8-
import com.intellij.ide.plugins.PluginManagerCore;
9-
import com.intellij.openapi.extensions.PluginId;
108
import com.intellij.openapi.project.Project;
119
import com.microsoft.azure.toolkit.ide.common.icon.AzureIcons;
1210
import com.microsoft.azure.toolkit.intellij.common.AzureFormJPanel;
13-
import com.microsoft.azure.toolkit.intellij.common.CommonConst;
1411
import com.microsoft.azure.toolkit.intellij.connector.AzureServiceResource;
15-
import com.microsoft.azure.toolkit.intellij.connector.IJavaAgentSupported;
1612
import com.microsoft.azure.toolkit.intellij.connector.Resource;
1713
import com.microsoft.azure.toolkit.lib.Azure;
1814
import com.microsoft.azure.toolkit.lib.applicationinsights.ApplicationInsight;
1915
import com.microsoft.azure.toolkit.lib.applicationinsights.AzureApplicationInsights;
20-
import com.microsoft.azure.toolkit.lib.common.cache.Preload;
2116
import lombok.Getter;
22-
import org.apache.commons.io.FileUtils;
2317

24-
import javax.annotation.Nullable;
25-
import java.io.File;
26-
import java.io.IOException;
27-
import java.net.URL;
2818
import java.util.HashMap;
2919
import java.util.List;
3020
import java.util.Map;
3121

3222
@Getter
33-
public class ApplicationInsightsResourceDefinition extends AzureServiceResource.Definition<ApplicationInsight> implements IJavaAgentSupported {
23+
public class ApplicationInsightsResourceDefinition extends AzureServiceResource.Definition<ApplicationInsight> {
3424
public static final ApplicationInsightsResourceDefinition INSTANCE = new ApplicationInsightsResourceDefinition();
3525

3626
public ApplicationInsightsResourceDefinition() {
@@ -55,6 +45,7 @@ public Map<String, String> initEnv(AzureServiceResource<ApplicationInsight> data
5545
final HashMap<String, String> env = new HashMap<>();
5646
env.put("APPINSIGHTS_INSTRUMENTATIONKEY", insight.getInstrumentationKey());
5747
env.put("APPLICATIONINSIGHTS_CONNECTION_STRING", insight.getConnectionString());
48+
env.put("ApplicationInsightsAgent_EXTENSION_VERSION", "~2"); // todo: set value by target resource, should be `~3` for linux app service
5849
return env;
5950
}
6051

@@ -63,31 +54,4 @@ public AzureFormJPanel<Resource<ApplicationInsight>> getResourcePanel(Project pr
6354
return new ApplicationInsightsResourcePanel();
6455
}
6556

66-
@Override
67-
@Nullable
68-
public File getJavaAgent() {
69-
return ApplicationInsightsAgentHolder.getApplicationInsightsLibrary();
70-
}
71-
72-
// todo: @hanli
73-
// 1. Get latest ai library release
74-
// 2. Framework for plugin local file cache
75-
static class ApplicationInsightsAgentHolder {
76-
private static final String APPLICATION_INSIGHTS_URL =
77-
"https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.4.10/applicationinsights-agent-3.4.10.jar";
78-
private static final File applicationInsightsLibrary =
79-
new File(PluginManagerCore.getPlugin(PluginId.findId(CommonConst.PLUGIN_ID)).getPluginPath().toString(), "applicationinsights-agent.jar");
80-
81-
@Preload
82-
public static synchronized File getApplicationInsightsLibrary() {
83-
if (!applicationInsightsLibrary.exists()) {
84-
try {
85-
FileUtils.copyURLToFile(new URL(APPLICATION_INSIGHTS_URL), applicationInsightsLibrary);
86-
} catch (IOException e) {
87-
return null;
88-
}
89-
}
90-
return applicationInsightsLibrary;
91-
}
92-
}
9357
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice-java/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@ dependencies {
2121
runtimeOnly project(path: ':azure-intellij-resource-connector-lib', configuration: 'instrumentedJar')
2222
compileOnly project(path: ':azure-intellij-plugin-containerregistry')
2323
runtimeOnly project(path: ':azure-intellij-plugin-containerregistry', configuration: 'instrumentedJar')
24+
compileOnly project(path: ':azure-intellij-plugin-containerapps')
25+
runtimeOnly project(path: ':azure-intellij-plugin-containerapps', configuration: 'instrumentedJar')
2426
implementation 'com.github.docker-java:docker-java:3.3.0'
2527
implementation 'com.microsoft.azure:azure-toolkit-appservice-lib'
2628
implementation 'com.microsoft.azure:azure-toolkit-ide-appservice-lib'
29+
implementation 'com.microsoft.azure:azure-toolkit-ide-containerapps-lib'
2730
implementation 'com.microsoft.azure:azure-toolkit-ide-containerregistry-lib'
2831
implementation 'com.jcraft:jsch:0.1.55'
2932
implementation 'org.codehaus.plexus:plexus-archiver:4.2.7'

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice-java/src/main/java/com/microsoft/azure/toolkit/intellij/appservice/AppServiceIntelliJActionsContributor.java

Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,53 +13,59 @@
1313
import com.intellij.openapi.ui.Messages;
1414
import com.microsoft.azure.toolkit.ide.appservice.AppServiceActionsContributor;
1515
import com.microsoft.azure.toolkit.ide.appservice.function.FunctionAppActionsContributor;
16-
import com.microsoft.azure.toolkit.ide.appservice.function.FunctionAppConfig;
1716
import com.microsoft.azure.toolkit.ide.appservice.function.coretools.FunctionsCoreToolsManager;
1817
import com.microsoft.azure.toolkit.ide.appservice.webapp.WebAppActionsContributor;
19-
import com.microsoft.azure.toolkit.ide.appservice.webapp.model.WebAppConfig;
2018
import com.microsoft.azure.toolkit.ide.common.IActionsContributor;
2119
import com.microsoft.azure.toolkit.ide.common.action.ResourceCommonActionsContributor;
2220
import com.microsoft.azure.toolkit.ide.containerregistry.ContainerRegistryActionsContributor;
2321
import com.microsoft.azure.toolkit.ide.guidance.GuidanceViewManager;
2422
import com.microsoft.azure.toolkit.intellij.appservice.actions.AppServiceFileAction;
2523
import com.microsoft.azure.toolkit.intellij.appservice.actions.OpenAppServicePropertyViewAction;
2624
import com.microsoft.azure.toolkit.intellij.containerregistry.pushimage.PushImageAction;
25+
import com.microsoft.azure.toolkit.intellij.function.actions.FunctionAppUpdateImageAction;
2726
import com.microsoft.azure.toolkit.intellij.function.remotedebug.FunctionEnableRemoteDebuggingAction;
2827
import com.microsoft.azure.toolkit.intellij.function.remotedebug.FunctionRemoteDebuggingAction;
29-
import com.microsoft.azure.toolkit.intellij.legacy.appservice.action.OpenLogsInMonitorAction;
30-
import com.microsoft.azure.toolkit.intellij.legacy.appservice.action.ProfileFlightRecordAction;
31-
import com.microsoft.azure.toolkit.intellij.legacy.appservice.action.SSHIntoWebAppAction;
32-
import com.microsoft.azure.toolkit.intellij.legacy.appservice.action.StartStreamingLogsAction;
33-
import com.microsoft.azure.toolkit.intellij.legacy.appservice.action.StopStreamingLogsAction;
28+
import com.microsoft.azure.toolkit.intellij.legacy.appservice.action.*;
3429
import com.microsoft.azure.toolkit.intellij.legacy.function.action.CreateFunctionAppAction;
3530
import com.microsoft.azure.toolkit.intellij.legacy.function.action.DeployFunctionAppAction;
3631
import com.microsoft.azure.toolkit.intellij.legacy.webapp.action.CreateWebAppAction;
3732
import com.microsoft.azure.toolkit.intellij.legacy.webapp.action.DeployWebAppAction;
3833
import com.microsoft.azure.toolkit.lib.Azure;
3934
import com.microsoft.azure.toolkit.lib.appservice.AppServiceAppBase;
35+
import com.microsoft.azure.toolkit.lib.appservice.config.AppServiceConfig;
36+
import com.microsoft.azure.toolkit.lib.appservice.config.FunctionAppConfig;
37+
import com.microsoft.azure.toolkit.lib.appservice.config.RuntimeConfig;
4038
import com.microsoft.azure.toolkit.lib.appservice.entity.FunctionEntity;
4139
import com.microsoft.azure.toolkit.lib.appservice.function.AzureFunctions;
4240
import com.microsoft.azure.toolkit.lib.appservice.function.FunctionApp;
4341
import com.microsoft.azure.toolkit.lib.appservice.function.FunctionAppBase;
4442
import com.microsoft.azure.toolkit.lib.appservice.function.FunctionAppDeploymentSlot;
4543
import com.microsoft.azure.toolkit.lib.appservice.model.AppServiceFile;
44+
import com.microsoft.azure.toolkit.lib.appservice.model.FunctionAppDockerRuntime;
45+
import com.microsoft.azure.toolkit.lib.appservice.model.PricingTier;
4646
import com.microsoft.azure.toolkit.lib.appservice.model.Runtime;
4747
import com.microsoft.azure.toolkit.lib.appservice.webapp.AzureWebApp;
4848
import com.microsoft.azure.toolkit.lib.appservice.webapp.WebApp;
4949
import com.microsoft.azure.toolkit.lib.appservice.webapp.WebAppDeploymentSlot;
50+
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
5051
import com.microsoft.azure.toolkit.lib.common.action.Action;
5152
import com.microsoft.azure.toolkit.lib.common.action.AzureActionManager;
5253
import com.microsoft.azure.toolkit.lib.common.event.AzureEventBus;
5354
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
5455
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzService;
5556
import com.microsoft.azure.toolkit.lib.common.model.AzResource;
57+
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
5658
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
59+
import com.microsoft.azure.toolkit.lib.common.utils.Utils;
60+
import com.microsoft.azure.toolkit.lib.containerapps.environment.ContainerAppsEnvironment;
5761
import com.microsoft.azure.toolkit.lib.containerregistry.ContainerRegistry;
5862
import com.microsoft.azure.toolkit.lib.resource.ResourceGroup;
59-
import com.microsoft.azure.toolkit.lib.resource.ResourceGroupConfig;
6063
import lombok.RequiredArgsConstructor;
6164
import org.apache.commons.lang3.StringUtils;
6265

66+
import javax.annotation.Nonnull;
67+
import javax.annotation.Nullable;
68+
import java.util.HashMap;
6369
import java.util.Objects;
6470
import java.util.Optional;
6571
import java.util.function.BiConsumer;
@@ -102,7 +108,7 @@ public void registerHandlers(AzureActionManager am) {
102108
am.registerHandler(ResourceCommonActionsContributor.GETTING_STARTED, (r, e) -> r instanceof AzureWebApp,
103109
(AbstractAzService<?, ?> c, AnActionEvent e) -> GuidanceViewManager.getInstance().openCourseView(e.getProject(), "hello-webapp"));
104110

105-
final BiPredicate<AppServiceAppBase<?, ?, ?>, AnActionEvent> isAppService = (r, e) -> r instanceof AppServiceAppBase<?, ?, ?>;
111+
final BiPredicate<AppServiceAppBase<?, ?, ?>, AnActionEvent> isAppService = (r, e) -> r != null;
106112
final BiPredicate<AppServiceAppBase<?, ?, ?>, AnActionEvent> nonLinuxFunction = (r, e) -> Objects.nonNull(r) &&
107113
!(r instanceof FunctionApp && Optional.ofNullable(r.getRuntime()).map(Runtime::isLinux).orElse(Boolean.FALSE));
108114
final AzureTaskManager tm = AzureTaskManager.getInstance();
@@ -130,13 +136,13 @@ public void registerHandlers(AzureActionManager am) {
130136
final BiConsumer<AzResource, AnActionEvent> deployWebAppHandler = (c, e) -> DeployWebAppAction.deploy((WebApp) c, Objects.requireNonNull(e.getProject()));
131137
am.registerHandler(ResourceCommonActionsContributor.DEPLOY, (r, e) -> r instanceof WebApp, deployWebAppHandler);
132138

133-
final BiConsumer<Object, AnActionEvent> createWebAppHandler = (c, e) -> CreateWebAppAction.openDialog(e.getProject(), null);
139+
final BiConsumer<Object, AnActionEvent> createWebAppHandler = (c, e) -> CreateWebAppAction.openDialog(e.getProject(), getDefaultWebAppConfig(null));
134140
am.registerHandler(ResourceCommonActionsContributor.CREATE, (r, e) -> r instanceof AzureWebApp, createWebAppHandler);
135141

136142
final BiConsumer<AzResource, AnActionEvent> deployFunctionAppHandler = (c, e) -> DeployFunctionAppAction.deploy((FunctionApp) c, Objects.requireNonNull(e.getProject()));
137143
am.registerHandler(ResourceCommonActionsContributor.DEPLOY, (r, e) -> r instanceof FunctionApp, deployFunctionAppHandler);
138144

139-
final BiConsumer<Object, AnActionEvent> createFunctionHandler = (c, e) -> CreateFunctionAppAction.openDialog(e.getProject(), null);
145+
final BiConsumer<Object, AnActionEvent> createFunctionHandler = (c, e) -> CreateFunctionAppAction.openDialog(e.getProject(), getDefaultFunctionAppConfig(null));
140146
am.registerHandler(ResourceCommonActionsContributor.CREATE, (r, e) -> r instanceof AzureFunctions, createFunctionHandler);
141147

142148
final BiConsumer<AzResource, AnActionEvent> showFunctionPropertyViewHandler = (c, e) -> tm
@@ -155,7 +161,7 @@ public void registerHandlers(AzureActionManager am) {
155161
.runLater(() -> new OpenAppServicePropertyViewAction().openDeploymentSlotPropertyView((WebAppDeploymentSlot) c, e.getProject()));
156162
am.registerHandler(ResourceCommonActionsContributor.SHOW_PROPERTIES, (r, e) -> r instanceof WebAppDeploymentSlot, showWebAppSlotPropertyViewHandler);
157163

158-
final BiPredicate<FunctionEntity, AnActionEvent> triggerPredicate = (r, e) -> r instanceof FunctionEntity;
164+
final BiPredicate<FunctionEntity, AnActionEvent> triggerPredicate = (r, e) -> r != null;
159165
final BiConsumer<FunctionEntity, AnActionEvent> triggerFunctionHandler = (entity, e) -> {
160166
final String functionId = Optional.ofNullable(entity.getFunctionAppId())
161167
.orElseGet(() -> ResourceId.fromString(entity.getTriggerId()).parent().id());
@@ -178,28 +184,19 @@ public void registerHandlers(AzureActionManager am) {
178184
am.registerHandler(FunctionAppActionsContributor.TRIGGER_FUNCTION, triggerPredicate, triggerFunctionHandler);
179185

180186
// keep push docker image in app service library as form is shared between appservice/container repository but could not split into different project
181-
final BiPredicate<ContainerRegistry, AnActionEvent> pushImageCondition = (r, e) -> r instanceof ContainerRegistry;
187+
final BiPredicate<ContainerRegistry, AnActionEvent> pushImageCondition = (r, e) -> r != null;
182188
final BiConsumer<ContainerRegistry, AnActionEvent> pushImageHandler =
183189
(c, e) -> PushImageAction.push(c, Objects.requireNonNull(e.getProject()));
184190
am.registerHandler(ContainerRegistryActionsContributor.PUSH_IMAGE, pushImageCondition, pushImageHandler);
185191

186-
final BiConsumer<ResourceGroup, AnActionEvent> groupCreateFunctionHandler =
187-
(r, e) -> CreateFunctionAppAction.openDialog(e.getProject(),
188-
FunctionAppConfig.getFunctionAppDefaultConfig().toBuilder()
189-
.subscription(r.getSubscription())
190-
.region(r.getRegion())
191-
.resourceGroup(ResourceGroupConfig.fromResource(r)).build());
192+
final BiConsumer<ResourceGroup, AnActionEvent> groupCreateFunctionHandler = (r, e) -> CreateFunctionAppAction.openDialog(e.getProject(), getDefaultFunctionAppConfig(r));
192193
am.registerHandler(FunctionAppActionsContributor.GROUP_CREATE_FUNCTION, (r, e) -> true, groupCreateFunctionHandler);
193194

194195
final BiConsumer<ResourceGroup, AnActionEvent> groupCreateWebAppHandler =
195-
(r, e) -> CreateWebAppAction.openDialog(e.getProject(),
196-
WebAppConfig.getWebAppDefaultConfig().toBuilder()
197-
.subscription(r.getSubscription())
198-
.region(r.getRegion())
199-
.resourceGroup(ResourceGroupConfig.fromResource(r)).build());
196+
(r, e) -> CreateWebAppAction.openDialog(e.getProject(), getDefaultWebAppConfig(r));
200197
am.registerHandler(WebAppActionsContributor.GROUP_CREATE_WEBAPP, (r, e) -> true, groupCreateWebAppHandler);
201198

202-
final BiPredicate<FunctionAppBase<?, ?, ?>, AnActionEvent> isFunction = (r, e) -> r instanceof FunctionAppBase<?, ?, ?>;
199+
final BiPredicate<FunctionAppBase<?, ?, ?>, AnActionEvent> isFunction = (r, e) -> r != null;
203200
final BiConsumer<FunctionAppBase<?, ?, ?>, AnActionEvent> enableRemoteDebuggingHandler = (c, e) ->
204201
FunctionEnableRemoteDebuggingAction.enableRemoteDebugging(c, e.getProject());
205202
am.registerHandler(FunctionAppActionsContributor.ENABLE_REMOTE_DEBUGGING, isFunction, enableRemoteDebuggingHandler);
@@ -227,6 +224,46 @@ public void registerHandlers(AzureActionManager am) {
227224
final String INSTALL_SUCCEED_MESSAGE = "Download and install Azure Functions Core Tools successfully. Auto configured Azure Functions Core Tools path in Azure Settings";
228225
AzureMessager.getMessager().success(INSTALL_SUCCEED_MESSAGE, null, openSettingsActionInMessage);
229226
}));
227+
228+
am.registerHandler(AppServiceActionsContributor.UPDATE_IMAGE, (c, e) -> c instanceof FunctionApp,
229+
(AppServiceAppBase<?, ?, ?> c, AnActionEvent e) -> FunctionAppUpdateImageAction.updateImage((FunctionApp) c, e.getProject()));
230+
231+
final BiConsumer<ContainerAppsEnvironment, AnActionEvent> createFunctionInEnvironmentHandler = (r, e) ->
232+
CreateFunctionAppAction.openDialog(e.getProject(), getDefaultContainerHostedFunctionAppConfig(r));
233+
am.registerHandler(FunctionAppActionsContributor.ENVIRONMENT_CREATE_FUNCTION, (c, e) -> c != null, createFunctionInEnvironmentHandler);
234+
}
235+
236+
private FunctionAppConfig getDefaultContainerHostedFunctionAppConfig(@Nonnull final ContainerAppsEnvironment environment) {
237+
final FunctionAppConfig config = getDefaultFunctionAppConfig(environment.getResourceGroup());
238+
config.region(environment.getRegion());
239+
config.environment(environment.getName());
240+
config.runtime(RuntimeConfig.fromRuntime(FunctionAppDockerRuntime.INSTANCE));
241+
return config;
242+
}
243+
244+
public static AppServiceConfig getDefaultWebAppConfig(@Nullable final ResourceGroup group) {
245+
final Subscription subscription = Optional.ofNullable(group).map(ResourceGroup::getSubscription)
246+
.orElseGet(() -> Azure.az(AzureAccount.class).account().getSelectedSubscriptions().stream().findFirst().orElse(null));
247+
final String appName = Utils.generateRandomResourceName("app", 32);
248+
final String rgName = Optional.ofNullable(group).map(ResourceGroup::getName).orElseGet(() -> "rg-" + appName);
249+
final AppServiceConfig result = AppServiceConfig.buildDefaultWebAppConfig(rgName, appName, "jar");
250+
result.appSettings(new HashMap<>());
251+
result.pricingTier(PricingTier.BASIC_B2);
252+
Optional.ofNullable(subscription).map(Subscription::getId).ifPresent(result::subscriptionId);
253+
Optional.ofNullable(group).map(ResourceGroup::getRegion).ifPresent(result::region);
254+
return result;
255+
}
256+
257+
public static FunctionAppConfig getDefaultFunctionAppConfig(@Nullable final ResourceGroup group) {
258+
final Subscription subscription = Optional.ofNullable(group).map(ResourceGroup::getSubscription)
259+
.orElseGet(() -> Azure.az(AzureAccount.class).account().getSelectedSubscriptions().stream().findFirst().orElse(null));
260+
final String appName = Utils.generateRandomResourceName("app", 32);
261+
final String rgName = Optional.ofNullable(group).map(ResourceGroup::getName).orElseGet(() -> "rg-" + appName);
262+
final FunctionAppConfig result = FunctionAppConfig.buildDefaultFunctionConfig(rgName, appName);
263+
result.appSettings(new HashMap<>());
264+
Optional.ofNullable(subscription).map(Subscription::getId).ifPresent(result::subscriptionId);
265+
Optional.ofNullable(group).map(ResourceGroup::getRegion).ifPresent(result::region);
266+
return result;
230267
}
231268

232269
@Override

0 commit comments

Comments
 (0)