/// <summary>Get the list of virtual machines, based on the precondition check on the schedule table and activity table. /// here precondion ==> get the virtual machines from the crawler which are not in the recent scheduled list and not in the recent activities.</summary> /// <param name="scaleSetId">scale set id to filter the virtual machines.</param> /// <returns></returns> private IList <VirtualMachineCrawlerResponse> GetVirtualMachineSet(string loadBalancerId) { var rowKey = loadBalancerId.Replace(Delimeters.ForwardSlash, Delimeters.Exclamatory); var groupNameFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, rowKey); var resultsSet = ResourceFilterHelper.QueryCrawlerResponseByMeanTime <VirtualMachineCrawlerResponse>(_azureClient.AzureSettings, StorageTableNames.VirtualMachineCrawlerTableName, groupNameFilter); resultsSet = resultsSet.Where(x => PowerState.Parse(x.State) == PowerState.Running).ToList(); if (resultsSet == null || !resultsSet.Any()) { return(null); } // TODO combine the schedule and activity table var scheduleEntities = ResourceFilterHelper.QuerySchedulesByMeanTime <ScheduledRules>( _azureClient.AzureSettings, StorageTableNames.ScheduledRulesTableName); var scheduleEntitiesResourceIds = scheduleEntities == null || !scheduleEntities.Any() ? new List <string>() : scheduleEntities.Select(x => x.RowKey.Replace(Delimeters.Exclamatory, Delimeters.ForwardSlash)); var result = resultsSet.Where(x => !scheduleEntitiesResourceIds.Contains(x.Id)); return(result.ToList()); }
private static IEnumerable <ScheduledRules> GetSchedulesByDateForActivities(string fromDate, string toDate) { //double fromDateSeconds = 86400; //double toDateSeconds = 0; /*if (!string.IsNullOrWhiteSpace(fromDate)) * { * DateTime myFromDate = DateTime.ParseExact(fromDate.Split('+')[0], "dd/MM/yyyy HH:mm:ss", * System.Globalization.CultureInfo.InvariantCulture); * fromDateSeconds = (DateTime.UtcNow - myFromDate).TotalSeconds; * } * * if (!string.IsNullOrWhiteSpace(toDate)) * { * DateTime myToDate = DateTime.ParseExact(toDate.Split('+')[0], "dd/MM/yyyy HH:mm:ss", * System.Globalization.CultureInfo.InvariantCulture); * toDateSeconds = (DateTime.UtcNow - myToDate).TotalSeconds; * } */ DateTimeOffset fromDateTimeOffset = DateTimeOffset.UtcNow.AddDays(-1); if (!string.IsNullOrWhiteSpace(fromDate)) { fromDateTimeOffset = DateTimeOffset.ParseExact(fromDate.Split('+')[0], "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); } DateTimeOffset toDateTimeOffset = DateTimeOffset.UtcNow; if (!string.IsNullOrWhiteSpace(toDate)) { toDateTimeOffset = DateTimeOffset.ParseExact(toDate.Split('+')[0], "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); } var result = ResourceFilterHelper.QueryByFromToDateForActivities <ScheduledRules>(fromDateTimeOffset.ToUniversalTime(), toDateTimeOffset.ToUniversalTime(), "ScheduledExecutionTime", StorageTableNames.ScheduledRulesTableName); var results = result.Where(x => x != null && x.ExecutionStartTime != null && x.InitialState != null && x.ExecutionStatus != null && x.ResourceName != null); //x is SchedulesRules return(results?.OrderByDescending(x => x.ScheduledExecutionTime)); //return result?.OrderByDescending(x => x.ScheduledExecutionTime); }
/// <summary>Pick the random scale set.</summary> /// <returns></returns> private LoadBalancerCrawlerResponse GetRandomLoadBalancer() { var filter = TableQuery.GenerateFilterConditionForBool("HasVirtualMachines", QueryComparisons.Equal, true); var resultsSet = ResourceFilterHelper.QueryCrawlerResponseByMeanTime <LoadBalancerCrawlerResponse>(_azureClient.AzureSettings, StorageTableNames.LoadBalancerCrawlerTableName, filter); if (resultsSet == null || !resultsSet.Any()) { return(null); } var random = new Random(); var randomLoadBalancerIndex = random.Next(0, resultsSet.Count); return(resultsSet.ToArray()[randomLoadBalancerIndex]); }
/// <summary>Get the list of virtual machines, based on the preconditioncheck on the schedule table and activity table. /// here precondion ==> get the virtual machines from the crawler which are not in the recent scheduled list and not in the recent activities.</summary> /// <returns></returns> private IList <VirtualMachineCrawlerResponse> GetRandomVmSet() { //To remove the virtual machines which are recently executed. var executedResultsSet = new List <VirtualMachineCrawlerResponse>(); var groupNameFilter = TableQuery.GenerateFilterCondition("VirtualMachineGroup", QueryComparisons.Equal, VirtualMachineGroup.VirtualMachines.ToString()); var resultsSet = ResourceFilterHelper.QueryCrawlerResponseByMeanTime <VirtualMachineCrawlerResponse>( azureClient.AzureSettings, StorageTableNames.VirtualMachineCrawlerTableName, groupNameFilter); resultsSet = resultsSet.Where(x => PowerState.Parse(x.State) == PowerState.Running).ToList(); if (!resultsSet.Any()) { return(null); } var scheduleEntities = ResourceFilterHelper.QuerySchedulesByMeanTime <ScheduledRules>(azureClient.AzureSettings, StorageTableNames.ScheduledRulesTableName); var scheduleEntitiesResourceIds = scheduleEntities == null || !scheduleEntities.Any() ? new List <string>() : scheduleEntities.Select(x => x.RowKey.Replace(Delimeters.Exclamatory, Delimeters.ForwardSlash)); if (scheduleEntitiesResourceIds.Count() != 0) { foreach (var result in resultsSet) { foreach (var Id in scheduleEntitiesResourceIds) { if ((Id.Contains(result.ResourceGroupName)) && (Id.Contains(result.ResourceName))) { executedResultsSet.Add(result); break; } } } //List<VirtualMachineCrawlerResponse> resultsSets = resultsSet.Where(x => (scheduleEntitiesResourceIds.Contains(x.ResourceGroupName) && scheduleEntitiesResourceIds.Contains(x.ResourceName))).ToList(); return(resultsSet = resultsSet.Except(executedResultsSet).ToList()); } else { return(resultsSet.ToList()); } }
/// <summary>Get the list of virtual machines, based on the preconditioncheck on the schedule table and activity table. /// here precondion ==> get the virtual machines from the crawler which are not in the recent scheduled list and not in the recent activities.</summary> /// <returns></returns> private IList <VirtualMachineCrawlerResponse> GetRandomVmSet() { var groupNameFilter = TableQuery.GenerateFilterCondition("VirtualMachineGroup", QueryComparisons.Equal, VirtualMachineGroup.VirtualMachines.ToString()); var resultsSet = ResourceFilterHelper.QueryCrawlerResponseByMeanTime <VirtualMachineCrawlerResponse>( azureClient.AzureSettings, StorageTableNames.VirtualMachineCrawlerTableName, groupNameFilter); resultsSet = resultsSet.Where(x => PowerState.Parse(x.State) == PowerState.Running).ToList(); if (!resultsSet.Any()) { return(null); } var scheduleEntities = ResourceFilterHelper.QuerySchedulesByMeanTime <ScheduledRules>(azureClient.AzureSettings, StorageTableNames.ScheduledRulesTableName); var scheduleEntitiesResourceIds = scheduleEntities == null || !scheduleEntities.Any() ? new List <string>() : scheduleEntities.Select(x => x.RowKey.Replace(Delimeters.Exclamatory, Delimeters.ForwardSlash)); var result = resultsSet.Where(x => !scheduleEntitiesResourceIds.Contains(x.Id)); return(result.ToList()); }
public ActionResult OnSelectTreeViewItemFilter(string selectedItems) { if (selectedItems == null) { Session["FilterSchedules"] = null; return(new EmptyResult()); } else { using (ScheduleManager schManager = new ScheduleManager()) using (ResourceManager srManager = new ResourceManager()) { //results after filtering List <Schedule> resultScheduleList = new List <Schedule>(); //result resource list after filtering List <long> resultResourceIDList = new List <long>(); //Filter is this format: AttrID_DomainItem, AttrID_Domain List <string> items = selectedItems.Split(',').ToList(); //get all schedules List <Schedule> allSchedules = schManager.GetAllSchedules().ToList(); //get all scheduled resources List <SingleResource> resourcesList; if (Session["resourcesList"] == null) { resourcesList = srManager.GetAllResources().ToList(); Session["resourcesList"] = resourcesList; } else { resourcesList = (List <SingleResource>)Session["resourcesList"]; } List <ResourceFilterHelper.FilterTreeItem> filterList = new List <ResourceFilterHelper.FilterTreeItem>(); //split Id and DomainItem and add it to a FilterItem list foreach (string item in items) { //index 0 = attrbute id, index1 domainvalue List <string> i = item.Split('_').ToList(); ResourceFilterHelper.FilterTreeItem filterItem = new ResourceFilterHelper.FilterTreeItem(); try { filterItem.Id = Convert.ToInt64(i[0]); } catch (Exception e) { Console.WriteLine(e); throw; } try { filterItem.Value = i[1].ToString(); } catch (Exception e) { Console.WriteLine(e); throw; } filterList.Add(filterItem); } List <ResourceAttributeValueModel> treeDomainList = new List <ResourceAttributeValueModel>(); if (Session["treeDomainModel"] == null) { //Create for each Resource TreeDomainModel witch includes all Attribute Ids and all values foreach (SingleResource r in resourcesList) { ResourceAttributeValueModel treeDomainModel = new ResourceAttributeValueModel(r); treeDomainList.Add(treeDomainModel); } Session["treeDomainModel"] = treeDomainList; } else { treeDomainList = (List <ResourceAttributeValueModel>)Session["treeDomainModel"]; } //Dictionary to save every Filter (domain items) to one attr Dictionary <long, List <string> > filterDic = ResourceFilterHelper.GetFilterDic(filterList); List <ResourceAttributeValueModel> temp = new List <ResourceAttributeValueModel>(); //check for every TreeDomainModel (resource) if fits the filter foreach (ResourceAttributeValueModel m in treeDomainList) { if (ResourceFilterHelper.CheckTreeDomainModel(m, filterDic)) { resultResourceIDList.Add(m.Resource.Id); } } //create schedule resource list with selected resources foreach (Schedule s in allSchedules) { if (resultResourceIDList.Contains(s.Resource.Id)) { resultScheduleList.Add(s); } } Session["FilterSchedules"] = resultScheduleList; //return Redirect(Request.UrlReferrer.ToString()); return(new EmptyResult()); } } }