/// <summary> /// Find all states that are set in flag enum to build a filter /// </summary> /// <param name="states"> /// All set states /// </param> /// <returns> /// String enumeration of all states /// </returns> private IEnumerable <string> FindAllStates(ScheduledJobState states) { if ((states & ScheduledJobState.Running) == ScheduledJobState.Running) { yield return("Running"); } if ((states & ScheduledJobState.Paused) == ScheduledJobState.Paused) { yield return("Paused"); } if ((states & ScheduledJobState.Completed) == ScheduledJobState.Completed) { yield return("Completed"); } if ((states & ScheduledJobState.Canceled) == ScheduledJobState.Canceled) { yield return("Canceled"); } }
/// <summary> /// Get all jobs of matching on type and description in specified states /// </summary> /// <param name="type"> /// Type of jobs we want to query /// </param> /// <param name="description"> /// Description belonging to jobs we want to query /// </param> /// <param name="states"> /// States job must be in to be returned by query /// </param> /// <returns> /// Enumeration of matching jobs /// </returns> public IEnumerable <ScheduledJobDetails> GetJobsByTypeAndDescription(ScheduledJobType type, string description, ScheduledJobState states) { string partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, ScheduledJobEntity.GetPartitionKey(type)); string descriptionFilter = TableQuery.GenerateFilterCondition("JobDescription", QueryComparisons.Equal, description); string partitionAndDescriptionFilter = TableQuery.CombineFilters( partitionKeyFilter, TableOperators.And, descriptionFilter); IEnumerable <string> statesToQueryOn = FindAllStates(states); string stateFilter = null; foreach (string state in statesToQueryOn) { if (stateFilter == null) { stateFilter = TableQuery.GenerateFilterCondition("State", QueryComparisons.Equal, state); } else { stateFilter = TableQuery.CombineFilters(stateFilter, TableOperators.Or, TableQuery.GenerateFilterCondition("State", QueryComparisons.Equal, state)); } } TableQuery <ScheduledJobEntity> query = new TableQuery <ScheduledJobEntity>().Where( TableQuery.CombineFilters( partitionAndDescriptionFilter, TableOperators.And, stateFilter)); IEnumerable <ScheduledJobEntity> entities = azureTableProvider.Table.ExecuteQuery(query); Collection <ScheduledJobDetails> jobs = new Collection <ScheduledJobDetails>(); foreach (ScheduledJobEntity scheduledJobEntity in entities) { ScheduledJobDetails details = new ScheduledJobDetails() { JobId = new Guid(scheduledJobEntity.RowKey), JobState = (ScheduledJobState)Enum.Parse(typeof(ScheduledJobState), scheduledJobEntity.State), JobType = (ScheduledJobType)Enum.Parse(typeof(ScheduledJobType), scheduledJobEntity.PartitionKey), Recurrence = JsonConvert.DeserializeObject <Recurrence>(scheduledJobEntity.Recurrence), StartTime = scheduledJobEntity.StartTime, Version = scheduledJobEntity.Version, JobDescription = scheduledJobEntity.JobDescription }; if (scheduledJobEntity.Payload != null) { details.Payload = JsonConvert.DeserializeObject <ConcurrentDictionary <string, string> >(scheduledJobEntity.Payload); } jobs.Add(details); } return(jobs); }