public static MakeSubscriptionFreeTrialResult MakeTrialSubscription(this Subscription subscription)
        {
            var result = new MakeSubscriptionFreeTrialResult();

            result.ToCreateInRegions = subscription.GeoRegions
                                       .Where(g => !subscription.ResourceGroups
                                              .Any(rg => rg.ResourceGroupName.StartsWith(string.Format(CultureInfo.InvariantCulture, "{0}_{1}", Constants.TryResourceGroupPrefix, g.Replace(" ", Constants.TryResourceGroupSeparator)), StringComparison.OrdinalIgnoreCase)))
                                       .Concat(subscription.ResourceGroups
                                               .GroupBy(s => s.GeoRegion)
                                               .Select(g => new { Region = g.Key, ResourceGroups = g.Select(r => r), RemainingCount = (subscription.ResourceGroupsPerGeoRegion) - g.Count() })
                                               .Where(g => g.RemainingCount > 0)
                                               .Select(g => Enumerable.Repeat(g.Region, g.RemainingCount))
                                               .Select(i => i)
                                               .SelectMany(i => i)
                                               );
            result.ToDelete = subscription.ResourceGroups
                              .GroupBy(s => s.GeoRegion)
                              .Select(g => new { Region = g.Key, ResourceGroups = g.Select(r => r), Count = g.Count() })
                              .Where(g => g.Count > subscription.ResourceGroupsPerGeoRegion)
                              .Select(g => g.ResourceGroups.Where(rg => string.IsNullOrEmpty(rg.UserId)).Skip((subscription.ResourceGroupsPerGeoRegion)))
                              .SelectMany(i => i);

            //TODO:Also delete RGs that are not in subscription.GeoRegions

            result.Ready = subscription.ResourceGroups.Where(rg => !result.ToDelete.Any(drg => drg.ResourceGroupName == rg.ResourceGroupName));

            return(result);
        }
        public static MakeSubscriptionFreeTrialResult GetMonitoringToolsResource(this Subscription subscription)
        {
            var result = new MakeSubscriptionFreeTrialResult();

            result.Ready = subscription.ResourceGroups.Where(rg => rg.ResourceGroupName == SimpleSettings.MonitoringToolsResourceGroupName);

            return(result);
        }
Exemple #3
0
        public static MakeSubscriptionFreeTrialResult MakeTrialSubscription(this Subscription subscription)
        {
            var result     = new MakeSubscriptionFreeTrialResult();
            var geoRegions = SimpleSettings.GeoRegions.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(r => r.Trim());

            result.ToCreateInRegions = geoRegions
                                       .Where(g =>
                                              !subscription.ResourceGroups
                                              .Any(rg => rg.ResourceGroupName.StartsWith(string.Format(CultureInfo.InvariantCulture, "{0}_{1}", Constants.TryResourceGroupPrefix, g.Replace(" ", Constants.TryResourceGroupSeparator)), StringComparison.OrdinalIgnoreCase)));

            result.ToDelete = subscription.ResourceGroups
                              .GroupBy(s => s.GeoRegion)
                              .Select(g => new { Region = g.Key, ResourceGroups = g.Select(r => r), Count = g.Count() })
                              .Where(g => g.Count > 1)
                              .Select(g => g.ResourceGroups.Where(rg => string.IsNullOrEmpty(rg.UserId)).Skip(1))
                              .SelectMany(i => i);

            result.Ready = subscription.ResourceGroups.Where(rg => !result.ToDelete.Any(drg => drg.ResourceGroupName == rg.ResourceGroupName));

            return(result);
        }
        public static MakeSubscriptionFreeTrialResult MakeTrialSubscription(this Subscription subscription)
        {
            var result = new MakeSubscriptionFreeTrialResult();

            if (subscription.Type != SubscriptionType.VSCodeLinux)
            {
                result.ToCreateTemplates = new List <TemplateStats>();
                result.ToCreateInRegions = subscription.GeoRegions
                                           .Where(g => !subscription.ResourceGroups
                                                  .Any(rg => rg.ResourceGroupName.StartsWith(string.Format(CultureInfo.InvariantCulture, "{0}_{1}", Constants.TryResourceGroupPrefix, g.Replace(" ", Constants.TryResourceGroupSeparator)), StringComparison.OrdinalIgnoreCase)))
                                           .Concat(subscription.ResourceGroups
                                                   .GroupBy(s => s.GeoRegion)
                                                   .Select(g => new { Region = g.Key, ResourceGroups = g.Select(r => r), RemainingCount = (subscription.ResourceGroupsPerGeoRegion) - g.Count() })
                                                   .Where(g => g.RemainingCount > 0)
                                                   .Select(g => Enumerable.Repeat(g.Region, g.RemainingCount))
                                                   .Select(i => i)
                                                   .SelectMany(i => i)
                                                   );
                result.ToDelete = subscription.ResourceGroups
                                  .GroupBy(s => s.GeoRegion)
                                  .Select(g => new { Region = g.Key, ResourceGroups = g.Select(r => r), Count = g.Count() })
                                  .Where(g => g.Count > subscription.ResourceGroupsPerGeoRegion)
                                  .Select(g => g.ResourceGroups.Where(rg => string.IsNullOrEmpty(rg.UserId)).Skip((subscription.ResourceGroupsPerGeoRegion)))
                                  .SelectMany(i => i);
            }
            else if (subscription.Type == SubscriptionType.VSCodeLinux)
            {
                result.ToCreateInRegions = new List <string>();
                var vscodeTemplates = TemplatesManager.GetTemplates().Where(a => a.AppService == AppService.VSCodeLinux);
                var temp            = subscription.ResourceGroups.GroupBy(a => a.TemplateName)
                                      .Select(g => new
                                              TemplateStats
                {
                    TemplateName   = g.Key,
                    RemainingCount = (subscription.ResourceGroupsPerTemplate) - g.Count()
                })
                                      .Where(g => g.RemainingCount > 0);

                var temp2 = new List <TemplateStats>();
                foreach (var remaining in vscodeTemplates)
                {
                    if (!temp.Any(a => a.TemplateName == remaining.Name))
                    {
                        temp = temp.Union(new List <TemplateStats> {
                            new TemplateStats {
                                TemplateName = remaining.Name, RemainingCount = subscription.ResourceGroupsPerTemplate
                            }
                        });
                    }
                    var count = temp.First(a => a.TemplateName == remaining.Name).RemainingCount;
                    temp2.Add(new TemplateStats {
                        TemplateName = remaining.Name, RemainingCount = count
                    });
                }
                result.ToCreateTemplates = temp2;
                result.ToDelete          = subscription.ResourceGroups
                                           .GroupBy(s => s.DeployedTemplateName)
                                           .Select(g => new { TemplateName = g.Key, ResourceGroups = g.Select(r => r), ExtraCount = g.Count() - (subscription.ResourceGroupsPerTemplate) })
                                           .Where(g => g.ExtraCount > 0)
                                           .Select(g => g.ResourceGroups.Where(rg => string.IsNullOrEmpty(rg.UserId)).Skip((subscription.ResourceGroupsPerGeoRegion)))
                                           .SelectMany(i => i);
            }

            //TODO:Also delete RGs that are not in subscription.GeoRegions
            result.Ready = subscription.ResourceGroups.Where(rg => !result.ToDelete.Any(drg => drg.ResourceGroupName == rg.ResourceGroupName));
            SimpleTrace.TraceInformation($"MakeTrialSubscription for: {subscription.SubscriptionId} -> Ready:{result.Ready.Count()} -> ToCreate:{result.ToCreateInRegions.Count()}  -> ToDelete:{result.ToDelete.Count()} -> result:{JsonConvert.SerializeObject(result)}");
            return(result);
        }