public override void ExecuteCmdlet() { ListJobScheduleOptions options = new ListJobScheduleOptions(this.BatchContext, this.AdditionalBehaviors) { JobScheduleId = this.Id, Filter = this.Filter, MaxCount = this.MaxCount }; // The enumerator will internally query the service in chunks. Using WriteObject with the enumerate flag will enumerate // the entire collection first and then write the items out one by one in a single group. Using foreach, we can take // advantage of the enumerator's behavior and write output to the pipeline in bursts. foreach (PSCloudJobSchedule jobSchedule in BatchClient.ListJobSchedules(options)) { WriteObject(jobSchedule); } }
/// <summary> /// Lists the job schedules matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for job schedules.</param> /// <returns>The workitems matching the specified filter options.</returns> public IEnumerable<PSCloudJobSchedule> ListJobSchedules(ListJobScheduleOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single job schedule matching the specified id if (!string.IsNullOrWhiteSpace(options.JobScheduleId)) { WriteVerbose(string.Format(Resources.GetJobScheduleById, options.JobScheduleId)); JobScheduleOperations jobScheduleOperations = options.Context.BatchOMClient.JobScheduleOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select, expandClause: options.Expand); CloudJobSchedule jobSchedule = jobScheduleOperations.GetJobSchedule(options.JobScheduleId, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSCloudJobSchedule psJobSchedule = new PSCloudJobSchedule(jobSchedule); return new PSCloudJobSchedule[] { psJobSchedule }; } // List job schedules using the specified filter else { string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select, expandClause: options.Expand); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = Resources.GetJobScheduleByOData; listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = Resources.GetJobScheduleNoFilter; } WriteVerbose(verboseLogString); JobScheduleOperations jobScheduleOperations = options.Context.BatchOMClient.JobScheduleOperations; IPagedEnumerable<CloudJobSchedule> workItems = jobScheduleOperations.ListJobSchedules(listDetailLevel, options.AdditionalBehaviors); Func<CloudJobSchedule, PSCloudJobSchedule> mappingFunction = j => { return new PSCloudJobSchedule(j); }; return PSPagedEnumerable<PSCloudJobSchedule, CloudJobSchedule>.CreateWithMaxCount( workItems, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount))); } }
/// <summary> /// Lists the job schedules matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for job schedules.</param> /// <returns>The workitems matching the specified filter options.</returns> public IEnumerable <PSCloudJobSchedule> ListJobSchedules(ListJobScheduleOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single job schedule matching the specified id if (!string.IsNullOrWhiteSpace(options.JobScheduleId)) { WriteVerbose(string.Format(Resources.GetJobScheduleById, options.JobScheduleId)); JobScheduleOperations jobScheduleOperations = options.Context.BatchOMClient.JobScheduleOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select, expandClause: options.Expand); CloudJobSchedule jobSchedule = jobScheduleOperations.GetJobSchedule(options.JobScheduleId, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSCloudJobSchedule psJobSchedule = new PSCloudJobSchedule(jobSchedule); return(new PSCloudJobSchedule[] { psJobSchedule }); } // List job schedules using the specified filter else { string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select, expandClause: options.Expand); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = Resources.GetJobScheduleByOData; listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = Resources.GetJobScheduleNoFilter; } WriteVerbose(verboseLogString); JobScheduleOperations jobScheduleOperations = options.Context.BatchOMClient.JobScheduleOperations; IPagedEnumerable <CloudJobSchedule> workItems = jobScheduleOperations.ListJobSchedules(listDetailLevel, options.AdditionalBehaviors); Func <CloudJobSchedule, PSCloudJobSchedule> mappingFunction = j => { return(new PSCloudJobSchedule(j)); }; return(PSPagedEnumerable <PSCloudJobSchedule, CloudJobSchedule> .CreateWithMaxCount( workItems, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount)))); } }
/// <summary> /// Waits for a recent job on a job schedule and returns its id. If a previous job is specified, this method waits until a new job is created. /// </summary> public static string WaitForRecentJob(BatchController controller, BatchAccountContext context, string jobScheduleId, string previousJob = null) { DateTime timeout = DateTime.Now.AddMinutes(2); RequestInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListJobScheduleOptions options = new ListJobScheduleOptions(context, behaviors) { JobScheduleId = jobScheduleId, Filter = null, MaxCount = Constants.DefaultMaxCount }; PSCloudJobSchedule jobSchedule = client.ListJobSchedules(options).First(); while (jobSchedule.ExecutionInformation.RecentJob == null || string.Equals(jobSchedule.ExecutionInformation.RecentJob.Id, previousJob, StringComparison.OrdinalIgnoreCase)) { if (DateTime.Now > timeout) { throw new TimeoutException("Timed out waiting for recent job"); } Sleep(5000); jobSchedule = client.ListJobSchedules(options).First(); } return jobSchedule.ExecutionInformation.RecentJob.Id; }