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); }
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); }