public static SCOJobInstance[] GetRunbookJobInstances(String runbookPath, String runbookName) { OrchestratorContext context = GetOrchestratorContext(); ArrayList jInstanceArrayList = new ArrayList(); SCOJobInstance[] jInstances; var runbook = (from rb in context.Runbooks where rb.Path == runbookPath && rb.Name == runbookName select rb).FirstOrDefault(); if (runbook == null) { var msg = string.Format(CultureInfo.InvariantCulture, "Runbook Not Found: ", runbookPath); throw new Exception(msg); } var jobs = (from jb in context.Jobs where jb.RunbookId == runbook.Id select jb); if (jobs == null) { if (runbook == null) { var msg = string.Format(CultureInfo.InvariantCulture, "Jobs not found for Runbook: ", runbookPath); throw new Exception(msg); } } foreach (Job j in jobs) { jInstanceArrayList.Add(GetJobDetails(j.Id)); } jInstances = new SCOJobInstance[jInstanceArrayList.Count]; jInstanceArrayList.CopyTo(jInstances); return(jInstances); }
public static SCOJobInstance StopRunbookJob(Guid JobId) { OrchestratorContext context = GetOrchestratorContext(); var jobId = JobId; var job = (from j in context.Jobs where j.Id == jobId select j).FirstOrDefault(); if (job == null) { var msg = string.Format(CultureInfo.InvariantCulture, "Job Not Found: ", jobId); throw new Exception(msg); } List <SCORunbookInstanceParameter> jobOutput = new List <SCORunbookInstanceParameter>(); List <SCORunbookInstanceParameter> jobInput = new List <SCORunbookInstanceParameter>(); if (job.Status.Equals("Completed", StringComparison.OrdinalIgnoreCase)) { // Get the return data var instances = context.RunbookInstances.Where(ri => ri.JobId == jobId); // For the non-monitor runbook job, there should be only one instance. foreach (var instance in instances) { if (!instance.Status.Equals("Success", StringComparison.OrdinalIgnoreCase)) { continue; } var outParameters = context.RunbookInstanceParameters.Where( rip => rip.RunbookInstanceId == instance.Id && rip.Direction.Equals("Out", StringComparison.OrdinalIgnoreCase)); foreach (var parameter in outParameters) { SCORunbookInstanceParameter newParam = new SCORunbookInstanceParameter(); newParam.Name = parameter.Name; newParam.Value = parameter.Value; jobOutput.Add(newParam); } var inParameters = context.RunbookInstanceParameters.Where( rip => rip.RunbookInstanceId == instance.Id && rip.Direction.Equals("In", StringComparison.OrdinalIgnoreCase)); foreach (var parameter in inParameters) { SCORunbookInstanceParameter newParam = new SCORunbookInstanceParameter(); newParam.Name = parameter.Name; newParam.Value = parameter.Value; jobInput.Add(newParam); } } } else { // Get the return data var instances = context.RunbookInstances.Where(ri => ri.JobId == jobId); foreach (var instance in instances) { var inParameters = context.RunbookInstanceParameters.Where( rip => rip.RunbookInstanceId == instance.Id && rip.Direction.Equals("In", StringComparison.OrdinalIgnoreCase)); foreach (var parameter in inParameters) { SCORunbookInstanceParameter newParam = new SCORunbookInstanceParameter(); newParam.Name = parameter.Name; newParam.Value = parameter.Value; jobInput.Add(newParam); } } // Set <Status> to "Canceled" (this is what stops the Job) job.Status = "Canceled"; context.UpdateObject(job); context.SaveChanges(); } SCOJobInstance jInstance = new SCOJobInstance() { Job = new SCOJob(job), InputParameters = jobInput.ToArray(), OutputParameters = jobOutput.ToArray() }; return(jInstance); }