Skip to content

Commit 585d31b

Browse files
use LRUStack based usage history to generate smart default value.
1 parent 40ede0b commit 585d31b

File tree

45 files changed

+272
-119
lines changed

Some content is hidden

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

45 files changed

+272
-119
lines changed

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

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

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

8-
import com.azure.resourcemanager.applicationinsights.models.ApplicationInsightsComponent;
8+
import com.google.common.base.Preconditions;
99
import com.intellij.openapi.actionSystem.AnActionEvent;
1010
import com.microsoft.azure.toolkit.ide.applicationinsights.ApplicationInsightsActionsContributor;
1111
import com.microsoft.azure.toolkit.ide.common.IActionsContributor;
@@ -20,18 +20,20 @@
2020
import com.microsoft.azure.toolkit.lib.applicationinsights.AzureApplicationInsights;
2121
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
2222
import com.microsoft.azure.toolkit.lib.common.action.AzureActionManager;
23+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
24+
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzResource;
2325
import com.microsoft.azure.toolkit.lib.common.model.AzResource;
2426
import com.microsoft.azure.toolkit.lib.common.model.Region;
2527
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
2628
import com.microsoft.azure.toolkit.lib.common.operation.OperationBundle;
2729
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
2830
import com.microsoft.azure.toolkit.lib.common.utils.Utils;
29-
import com.microsoft.azure.toolkit.lib.resource.AzureResources;
3031
import com.microsoft.azure.toolkit.lib.resource.ResourceGroup;
31-
import com.microsoft.azure.toolkit.lib.resource.ResourceGroupDraft;
32+
import org.apache.commons.collections4.CollectionUtils;
3233

3334
import javax.annotation.Nullable;
3435
import java.util.List;
36+
import java.util.Objects;
3537
import java.util.Optional;
3638
import java.util.function.BiConsumer;
3739
import java.util.function.BiPredicate;
@@ -59,16 +61,29 @@ public void registerHandlers(AzureActionManager am) {
5961
}
6062

6163
private static ApplicationInsightDraft getDraftApplicationInsight(@Nullable final ResourceGroup resourceGroup) {
62-
final List<Subscription> selectedSubscriptions = Azure.az(AzureAccount.class).account().getSelectedSubscriptions();
63-
if (selectedSubscriptions.size() == 0) {
64-
return null;
65-
}
64+
final List<Subscription> subs = Azure.az(AzureAccount.class).account().getSelectedSubscriptions();
65+
Preconditions.checkArgument(CollectionUtils.isNotEmpty(subs), "There are no subscriptions in your account.");
66+
67+
final Subscription historySub = CacheManager.getUsageHistory(Subscription.class).peek(subs::contains);
68+
final ResourceGroup historyRg = CacheManager.getUsageHistory(ResourceGroup.class)
69+
.peek(r -> Objects.isNull(historySub) || r.getSubscriptionId().equals(historySub.getId()));
70+
final Region historyRegion = CacheManager.getUsageHistory(Region.class).peek();
71+
6672
final String timestamp = Utils.getTimestamp();
67-
final Subscription subscription = selectedSubscriptions.get(0);
68-
final Region region = Optional.ofNullable(resourceGroup).map(ResourceGroup::getRegion).orElse(null);
69-
final String resourceGroupName = resourceGroup == null ? String.format("rg-%s", timestamp) : resourceGroup.getResourceGroupName();
73+
final ResourceGroup rg = Optional.ofNullable(resourceGroup)
74+
.or(() -> Optional.ofNullable(historyRg))
75+
.orElse(null);
76+
final Subscription subscription = Optional.ofNullable(rg).map(AzResource::getSubscription)
77+
.or(() -> Optional.ofNullable(historySub).filter(subs::contains))
78+
.orElse(subs.get(0));
79+
final Region region = Optional.ofNullable(rg).map(ResourceGroup::getRegion)
80+
.or(() -> Optional.ofNullable(historyRegion))
81+
.orElse(null);
82+
final String resourceGroupName = Optional.ofNullable(rg)
83+
.map(AbstractAzResource::getResourceGroupName)
84+
.orElse(String.format("rg-%s", timestamp));
7085
final ApplicationInsightDraft applicationInsightDraft = Azure.az(AzureApplicationInsights.class).applicationInsights(subscription.getId())
71-
.create(String.format("ai-%s", timestamp), resourceGroupName);
86+
.create(String.format("ai-%s", timestamp), resourceGroupName);
7287
applicationInsightDraft.setRegion(region);
7388
return applicationInsightDraft;
7489
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ protected String getItemText(Object item) {
9696
@Override
9797
protected ApplicationInsight doGetDefaultValue() {
9898
return CacheManager.getUsageHistory(ApplicationInsight.class)
99-
.get(v -> Objects.isNull(subscriptionComboBox) || Objects.equals(subscriptionComboBox.getValue(), v.getSubscription()));
99+
.peek(v -> Objects.isNull(subscriptionComboBox) || Objects.equals(subscriptionComboBox.getValue(), v.getSubscription()));
100100
}
101101

102102
@Override

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-applicationinsights/src/main/java/com/microsoft/azure/toolkit/intellij/applicationinsights/creation/CreateApplicationInsightsAction.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.microsoft.azure.toolkit.lib.applicationinsights.ApplicationInsightDraft;
1212
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
1313
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
14+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
1415
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1516
import com.microsoft.azure.toolkit.lib.common.operation.OperationBundle;
1617
import com.microsoft.azure.toolkit.lib.common.operation.OperationContext;
@@ -51,6 +52,8 @@ public static ApplicationInsight createApplicationInsights(ApplicationInsightDra
5152
final ResourceGroup newResourceGroup = Azure.az(AzureResources.class)
5253
.groups(subscriptionId).createResourceGroupIfNotExist(draft.getResourceGroupName(), draft.getRegion());
5354
}
54-
return draft.commit();
55+
final ApplicationInsight resource = draft.commit();
56+
CacheManager.getUsageHistory(ApplicationInsight.class).push(draft);
57+
return resource;
5558
}
5659
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/appservice/serviceplan/ServicePlanComboBox.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public void setRegion(Region region) {
9494
@Override
9595
protected AppServicePlan doGetDefaultValue() {
9696
return CacheManager.getUsageHistory(AppServicePlan.class)
97-
.get(v -> (Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()) &&
97+
.peek(v -> (Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()) &&
9898
(Objects.isNull(region) || Objects.equals(region, v.getRegion())) &&
9999
(Objects.isNull(os) || os == v.getOperatingSystem())));
100100
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/function/action/CreateFunctionAppAction.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99
import com.intellij.openapi.progress.ProgressManager;
1010
import com.intellij.openapi.project.Project;
1111
import com.microsoft.azure.toolkit.ide.appservice.function.FunctionAppConfig;
12+
import com.microsoft.azure.toolkit.ide.appservice.webapp.model.WebAppConfig;
1213
import com.microsoft.azure.toolkit.intellij.common.messager.IntellijAzureMessager;
1314
import com.microsoft.azure.toolkit.intellij.legacy.function.FunctionAppCreationDialog;
1415
import com.microsoft.azure.toolkit.lib.appservice.function.FunctionApp;
1516
import com.microsoft.azure.toolkit.lib.common.action.Action;
1617
import com.microsoft.azure.toolkit.lib.common.action.ActionView;
1718
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
19+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
1820
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
1921
import com.microsoft.azure.toolkit.lib.common.messager.IAzureMessage;
2022
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
@@ -83,6 +85,7 @@ public boolean show(IAzureMessage raw) {
8385
operation.complete();
8486
}
8587
});
88+
CacheManager.getUsageHistory(FunctionAppConfig.class).push(config);
8689
return AzureTaskManager.getInstance().runInModalAsObservable(task).toSingle().doOnSuccess(app -> {
8790
AzureMessager.getMessager().success(message("function.create.success.message", app.name()), message("function.create.success.title"));
8891
});

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/webapp/action/CreateWebAppAction.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import com.microsoft.azure.toolkit.lib.common.action.Action;
2020
import com.microsoft.azure.toolkit.lib.common.action.ActionView;
2121
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
22+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
23+
import com.microsoft.azure.toolkit.lib.common.cache.LRUStack;
2224
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
2325
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
2426
import com.microsoft.azure.toolkit.lib.common.task.AzureTask;
@@ -74,6 +76,7 @@ private static Single<WebApp> createWebApp(final WebAppConfig config) {
7476
indicator.setIndeterminate(true);
7577
return WebAppService.getInstance().createWebApp(config);
7678
});
79+
CacheManager.getUsageHistory(WebAppConfig.class).push(config);
7780
return AzureTaskManager.getInstance().runInModalAsObservable(task).toSingle().doOnSuccess(CreateWebAppAction::notifyCreationSuccess);
7881
}
7982

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-containerservice/src/main/java/com/microsoft/azure/toolkit/intellij/containerservice/creation/CreateKubernetesServiceAction.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010
import com.microsoft.azure.toolkit.lib.Azure;
1111
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
1212
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
13+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
14+
import com.microsoft.azure.toolkit.lib.common.model.AzResource;
1315
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1416
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1517
import com.microsoft.azure.toolkit.lib.common.operation.OperationBundle;
1618
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
1719
import com.microsoft.azure.toolkit.lib.common.utils.Utils;
1820
import com.microsoft.azure.toolkit.lib.containerservice.AzureContainerService;
21+
import com.microsoft.azure.toolkit.lib.containerservice.KubernetesCluster;
1922
import com.microsoft.azure.toolkit.lib.containerservice.KubernetesClusterDraft;
2023
import com.microsoft.azure.toolkit.lib.containerservice.KubernetesClusterModule;
2124
import com.microsoft.azure.toolkit.lib.resource.AzureResources;
@@ -27,6 +30,7 @@
2730
import javax.annotation.Nullable;
2831
import java.util.List;
2932
import java.util.Objects;
33+
import java.util.Optional;
3034

3135
import static com.microsoft.azure.toolkit.lib.Azure.az;
3236

@@ -46,14 +50,23 @@ public static void create(@Nonnull Project project, @Nullable KubernetesClusterD
4650
});
4751
}
4852

49-
public static KubernetesClusterDraft.Config getDefaultConfig(final ResourceGroup resourceGroup) {
50-
final List<Subscription> selectedSubscriptions = az(AzureAccount.class).account().getSelectedSubscriptions();
51-
Preconditions.checkArgument(CollectionUtils.isNotEmpty(selectedSubscriptions), "There are no subscriptions in your account.");
53+
public static KubernetesClusterDraft.Config getDefaultConfig(@Nullable final ResourceGroup resourceGroup) {
54+
final List<Subscription> subs = az(AzureAccount.class).account().getSelectedSubscriptions();
55+
Preconditions.checkArgument(CollectionUtils.isNotEmpty(subs), "There are no subscriptions in your account.");
5256
final String name = String.format("kubernetes-service-%s", Utils.getTimestamp());
5357
final String defaultResourceGroupName = String.format("rg-%s", name);
54-
final Subscription subscription = resourceGroup == null ? selectedSubscriptions.get(0) : resourceGroup.getSubscription();
55-
final ResourceGroup group = resourceGroup == null ? az(AzureResources.class).groups(subscription.getId())
56-
.create(defaultResourceGroupName, defaultResourceGroupName) : resourceGroup;
58+
59+
final Subscription historySub = CacheManager.getUsageHistory(Subscription.class).peek(subs::contains);
60+
final ResourceGroup historyRg = CacheManager.getUsageHistory(ResourceGroup.class)
61+
.peek(r -> Objects.isNull(historySub) || r.getSubscriptionId().equals(historySub.getId()));
62+
final ResourceGroup group = Optional.ofNullable(resourceGroup)
63+
.or(() -> Optional.ofNullable(historyRg))
64+
.orElse(az(AzureResources.class).groups(subs.get(0).getId())
65+
.create(defaultResourceGroupName, defaultResourceGroupName));
66+
final Subscription subscription = Optional.of(group).map(AzResource::getSubscription)
67+
.or(() -> Optional.ofNullable(historySub))
68+
.orElse(subs.get(0));
69+
5770
final KubernetesClusterDraft.Config config = new KubernetesClusterDraft.Config();
5871
config.setName(name);
5972
config.setSubscription(subscription);
@@ -76,6 +89,7 @@ private static void doCreate(final KubernetesClusterDraft.Config config, final P
7689
final KubernetesClusterDraft draft = module.create(config.getName(), config.getResourceGroup().getName());
7790
draft.setConfig(config);
7891
draft.commit();
92+
CacheManager.getUsageHistory(KubernetesCluster.class).push(draft);
7993
});
8094
}
8195
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cosmos/src/main/java/com/microsoft/azure/toolkit/intellij/cosmos/connection/CosmosDBAccountComboBox.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected T doGetDefaultValue() {
4141
final List<T> items = this.getItems();
4242
//noinspection unchecked
4343
return (T) CacheManager.getUsageHistory(items.get(0).getClass())
44-
.get(v -> Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()));
44+
.peek(v -> Objects.isNull(subscription) || Objects.equals(subscription, v.getSubscription()));
4545
}
4646

4747
@Override

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cosmos/src/main/java/com/microsoft/azure/toolkit/intellij/cosmos/connection/CosmosDatabaseComboBox.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ protected T doGetDefaultValue() {
4343
final List<T> items = this.getItems();
4444
//noinspection unchecked
4545
return (T) CacheManager.getUsageHistory(items.get(0).getClass())
46-
.get(v -> Objects.isNull(account) || Objects.equals(account, ((AbstractAzResource<?, ?, ?>) v).getParent()));
46+
.peek(v -> Objects.isNull(account) || Objects.equals(account, ((AbstractAzResource<?, ?, ?>) v).getParent()));
4747
}
4848

4949
@Override

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-cosmos/src/main/java/com/microsoft/azure/toolkit/intellij/cosmos/creation/CreateCosmosDBAccountAction.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
import com.intellij.openapi.project.Project;
99
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
1010
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
11+
import com.microsoft.azure.toolkit.lib.common.cache.CacheManager;
12+
import com.microsoft.azure.toolkit.lib.common.model.AzResource;
1113
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1214
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1315
import com.microsoft.azure.toolkit.lib.common.operation.OperationBundle;
1416
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
1517
import com.microsoft.azure.toolkit.lib.common.utils.Utils;
1618
import com.microsoft.azure.toolkit.lib.cosmos.AzureCosmosService;
19+
import com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccount;
1720
import com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccountDraft;
1821
import com.microsoft.azure.toolkit.lib.cosmos.CosmosDBAccountModule;
1922
import com.microsoft.azure.toolkit.lib.cosmos.model.DatabaseAccountKind;
@@ -25,6 +28,7 @@
2528
import javax.annotation.Nullable;
2629
import java.util.List;
2730
import java.util.Objects;
31+
import java.util.Optional;
2832

2933
import static com.microsoft.azure.toolkit.lib.Azure.az;
3034

@@ -43,14 +47,23 @@ public static void create(@Nullable Project project, @Nullable CosmosDBAccountDr
4347
});
4448
}
4549

46-
public static CosmosDBAccountDraft.Config getDefaultConfig(final ResourceGroup resourceGroup) {
47-
final List<Subscription> selectedSubscriptions = az(AzureAccount.class).account().getSelectedSubscriptions();
48-
Preconditions.checkArgument(CollectionUtils.isNotEmpty(selectedSubscriptions), "There are no subscriptions in your account.");
50+
public static CosmosDBAccountDraft.Config getDefaultConfig(@Nullable final ResourceGroup resourceGroup) {
51+
final List<Subscription> subs = az(AzureAccount.class).account().getSelectedSubscriptions();
52+
Preconditions.checkArgument(CollectionUtils.isNotEmpty(subs), "There are no subscriptions in your account.");
4953
final String name = String.format("cosmos-db-%s", Utils.getTimestamp());
5054
final String defaultResourceGroupName = String.format("rg-%s", name);
51-
final Subscription subscription = resourceGroup == null ? selectedSubscriptions.get(0) : resourceGroup.getSubscription();
52-
final ResourceGroup group = resourceGroup == null ? az(AzureResources.class).groups(subscription.getId())
53-
.create(defaultResourceGroupName, defaultResourceGroupName) : resourceGroup;
55+
56+
final Subscription historySub = CacheManager.getUsageHistory(Subscription.class).peek(subs::contains);
57+
final ResourceGroup historyRg = CacheManager.getUsageHistory(ResourceGroup.class)
58+
.peek(r -> Objects.isNull(historySub) || r.getSubscriptionId().equals(historySub.getId()));
59+
final ResourceGroup group = Optional.ofNullable(resourceGroup)
60+
.or(() -> Optional.ofNullable(historyRg))
61+
.orElse(az(AzureResources.class).groups(subs.get(0).getId())
62+
.create(defaultResourceGroupName, defaultResourceGroupName));
63+
final Subscription subscription = Optional.of(group).map(AzResource::getSubscription)
64+
.or(() -> Optional.ofNullable(historySub))
65+
.orElse(subs.get(0));
66+
5467
final CosmosDBAccountDraft.Config config = new CosmosDBAccountDraft.Config();
5568
config.setName(name);
5669
config.setSubscription(subscription);
@@ -69,6 +82,7 @@ private static void doCreate(final CosmosDBAccountDraft.Config config, final Pro
6982
}
7083
final CosmosDBAccountModule module = az(AzureCosmosService.class).databaseAccounts(config.getSubscription().getId());
7184
final CosmosDBAccountDraft draft = module.create(config.getName(), config.getResourceGroup().getName());
85+
CacheManager.getUsageHistory(CosmosDBAccount.class).push(draft);
7286
draft.setConfig(config);
7387
draft.commit();
7488
});

0 commit comments

Comments
 (0)