/// <summary>Create the table batch operation for the scheduled entity for the set of virtual machines.</summary>
        /// <param name="filteredVmSet">Set of virtual machines.</param>
        /// <param name="schedulerFrequency">Schedule frequency, it will be reading from the config</param>
        /// <param name="virtualMachineGroup"></param>
        /// <returns></returns>
        public static TableBatchOperation CreateScheduleEntity(IList <VirtualMachineCrawlerResponse> filteredVmSet,
                                                               int schedulerFrequency, List <string> azureFiOperationList, VirtualMachineGroup virtualMachineGroup)
        {
            TableBatchOperation tableBatchOperation = new TableBatchOperation();
            Random   random = new Random();
            DateTime randomExecutionDateTime = DateTime.UtcNow.AddMinutes(random.Next(1, schedulerFrequency));
            var      sessionId = Guid.NewGuid().ToString();

            foreach (var item in filteredVmSet)
            {
                if (item == null)
                {
                    continue;
                }

                string fiOperation = string.Empty;
                var    actionType  = GetActionType(item.RowKey, azureFiOperationList, item.State, out fiOperation);
                var    entityEntry = RuleEngineHelper.ConvertToScheduledRuleEntity(item, sessionId, actionType,
                                                                                   fiOperation, randomExecutionDateTime, virtualMachineGroup);
                if (entityEntry != null)
                {
                    tableBatchOperation.InsertOrMerge(entityEntry);
                }
            }

            return(tableBatchOperation);
        }
        public static ScheduledRules ConvertToScheduledRuleEntity <T>(T entity, string sessionId,
                                                                      ActionType action, string fiOperation, DateTime executionTime, VirtualMachineGroup virtualMachineGroup) where T : CrawlerResponse
        {
            if (entity == null || !Mappings.FunctionNameMap.ContainsKey(virtualMachineGroup.ToString()))
            {
                return(null);
            }
            var localGUID    = sessionId;// System.Guid.NewGuid().ToString();
            var scheduleRule = new ScheduledRules(localGUID, entity.RowKey)
            {
                ResourceType           = virtualMachineGroup.ToString(),
                ScheduledExecutionTime = executionTime,
                ResourceName           = entity.ResourceName,
                CurrentAction          = action.ToString(),
                FiOperation            = fiOperation,
                TriggerData            = GetTriggerData(entity, action, localGUID, entity.RowKey, virtualMachineGroup.ToString()),
                SchedulerSessionId     = sessionId
            };

            if (fiOperation.Equals(AzureFiOperation.PowerCycle.ToString()))
            {
                scheduleRule.Rolledback = false;
            }

            return(scheduleRule);
        }