/// <summary> /// Lists the tasks matching the specified filter options /// </summary> /// <param name="options">The options to use when querying for tasks</param> /// <returns>The tasks matching the specified filter options</returns> public IEnumerable<PSCloudTask> ListTasks(ListTaskOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single task matching the specified name if (!string.IsNullOrEmpty(options.TaskName)) { WriteVerbose(string.Format(Resources.GBT_GetByName, options.TaskName, options.JobName, options.WorkItemName)); using (IWorkItemManager wiManager = options.Context.BatchOMClient.OpenWorkItemManager()) { ICloudTask task = wiManager.GetTask(options.WorkItemName, options.JobName, options.TaskName, additionalBehaviors: options.AdditionalBehaviors); PSCloudTask psTask = new PSCloudTask(task); return new PSCloudTask[] { psTask }; } } // List tasks using the specified filter else { string jName = options.Job == null ? options.JobName : options.Job.Name; ODATADetailLevel odata = null; string verboseLogString = null; if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = string.Format(Resources.GBT_GetByOData, jName); odata = new ODATADetailLevel(filterClause: options.Filter); } else { verboseLogString = string.Format(Resources.GBT_GetNoFilter, jName); } WriteVerbose(verboseLogString); IEnumerableAsyncExtended<ICloudTask> tasks = null; if (options.Job != null) { tasks = options.Job.omObject.ListTasks(odata, options.AdditionalBehaviors); } else { using (IWorkItemManager wiManager = options.Context.BatchOMClient.OpenWorkItemManager()) { tasks = wiManager.ListTasks(options.WorkItemName, options.JobName, odata, options.AdditionalBehaviors); } } Func<ICloudTask, PSCloudTask> mappingFunction = t => { return new PSCloudTask(t); }; return PSAsyncEnumerable<PSCloudTask, ICloudTask>.CreateWithMaxCount( tasks, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount))); } }
/// <summary> /// Lists the tasks matching the specified filter options. /// </summary> /// <param name="options">The options to use when querying for tasks.</param> /// <returns>The tasks matching the specified filter options.</returns> public IEnumerable<PSCloudTask> ListTasks(ListTaskOptions options) { if (options == null) { throw new ArgumentNullException("options"); } // Get the single task matching the specified id if (!string.IsNullOrEmpty(options.TaskId)) { WriteVerbose(string.Format(Resources.GetTaskById, options.TaskId, options.JobId)); JobOperations jobOperations = options.Context.BatchOMClient.JobOperations; ODATADetailLevel getDetailLevel = new ODATADetailLevel(selectClause: options.Select, expandClause: options.Expand); CloudTask task = jobOperations.GetTask(options.JobId, options.TaskId, detailLevel: getDetailLevel, additionalBehaviors: options.AdditionalBehaviors); PSCloudTask psTask = new PSCloudTask(task); return new PSCloudTask[] { psTask }; } // List tasks using the specified filter else { string jobId = options.Job == null ? options.JobId : options.Job.Id; string verboseLogString = null; ODATADetailLevel listDetailLevel = new ODATADetailLevel(selectClause: options.Select, expandClause: options.Expand); if (!string.IsNullOrEmpty(options.Filter)) { verboseLogString = string.Format(Resources.GetTaskByOData, jobId); listDetailLevel.FilterClause = options.Filter; } else { verboseLogString = string.Format(Resources.GetTaskNoFilter, jobId); } WriteVerbose(verboseLogString); IPagedEnumerable<CloudTask> tasks = null; if (options.Job != null) { tasks = options.Job.omObject.ListTasks(listDetailLevel, options.AdditionalBehaviors); } else { JobOperations jobOperations = options.Context.BatchOMClient.JobOperations; tasks = jobOperations.ListTasks(options.JobId, listDetailLevel, options.AdditionalBehaviors); } Func<CloudTask, PSCloudTask> mappingFunction = t => { return new PSCloudTask(t); }; return PSPagedEnumerable<PSCloudTask, CloudTask>.CreateWithMaxCount( tasks, mappingFunction, options.MaxCount, () => WriteVerbose(string.Format(Resources.MaxCount, options.MaxCount))); } }
public override void ExecuteCmdlet() { ListTaskOptions options = new ListTaskOptions(this.BatchContext, this.JobId, this.Job, this.AdditionalBehaviors) { TaskId = 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 (PSCloudTask task in BatchClient.ListTasks(options)) { WriteObject(task); } }
/// <summary> /// Waits for the specified task to complete /// </summary> public static void WaitForTaskCompletion(BatchController controller, BatchAccountContext context, string jobId, string taskId) { RequestInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListTaskOptions options = new ListTaskOptions(context, jobId, null, behaviors) { TaskId = taskId }; IEnumerable<PSCloudTask> tasks = client.ListTasks(options); // Save time by not waiting during playback scenarios if (HttpMockServer.Mode == HttpRecorderMode.Record) { TaskStateMonitor monitor = context.BatchOMClient.Utilities.CreateTaskStateMonitor(); monitor.WaitAll(tasks.Select(t => t.omObject), TaskState.Completed, TimeSpan.FromMinutes(2), null); } }
/// <summary> /// Waits for the specified task to complete /// </summary> public static void WaitForTaskCompletion(BatchController controller, BatchAccountContext context, string workItemName, string jobName, string taskName) { YieldInjectionInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListTaskOptions options = new ListTaskOptions(context, workItemName, jobName, null, behaviors) { TaskName = taskName }; IEnumerable<PSCloudTask> tasks = client.ListTasks(options); ITaskStateMonitor monitor = context.BatchOMClient.OpenToolbox().CreateTaskStateMonitor(); monitor.WaitAll(tasks.Select(t => t.omObject), TaskState.Completed, TimeSpan.FromMinutes(2), null, behaviors); }
/// <summary> /// Gets the id of the compute node that the specified task completed on. Returns null if the task isn't complete. /// </summary> public static string GetTaskComputeNodeId(BatchController controller, BatchAccountContext context, string jobId, string taskId) { BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListTaskOptions options = new ListTaskOptions(context, jobId, null) { TaskId = taskId }; PSCloudTask task = client.ListTasks(options).First(); return task.ComputeNodeInformation == null ? null : task.ComputeNodeInformation.ComputeNodeId; }