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