Esempio n. 1
0
        /// <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);
        }
Esempio n. 3
0
        /// <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());
        }
Esempio n. 6
0
        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());
                    }
            }
        }