Exemple #1
0
        /// <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");
            }
        }
Exemple #2
0
        /// <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);
        }