public static List <AgentJobHistoryInfo> ConvertToAgentJobHistoryInfo(List <ILogEntry> logEntries, DataRow jobRow, JobStepCollection steps, JobScheduleCollection schedules, List <Alert> alerts) { List <AgentJobHistoryInfo> jobs = new List <AgentJobHistoryInfo>(); // get all the values for a job history foreach (ILogEntry entry in logEntries) { // Make a new AgentJobHistoryInfo object var jobHistoryInfo = new AgentJobHistoryInfo(); jobHistoryInfo.InstanceId = Convert.ToInt32(jobRow[UrnInstanceID], System.Globalization.CultureInfo.InvariantCulture); jobHistoryInfo.JobId = (Guid)jobRow[UrnJobId]; var logEntry = entry as LogSourceJobHistory.LogEntryJobHistory; jobHistoryInfo.RunStatus = entry.Severity == SeverityClass.Error ? 0 : 1; jobHistoryInfo.SqlMessageId = logEntry.SqlMessageID; jobHistoryInfo.Message = logEntry.Message; jobHistoryInfo.StepId = logEntry.StepID; jobHistoryInfo.StepName = logEntry.StepName; jobHistoryInfo.SqlSeverity = logEntry.SqlSeverity; jobHistoryInfo.JobName = logEntry.JobName; jobHistoryInfo.RunDate = entry.PointInTime; jobHistoryInfo.RunDuration = logEntry.Duration; jobHistoryInfo.OperatorEmailed = logEntry.OperatorEmailed; jobHistoryInfo.OperatorNetsent = logEntry.OperatorNetsent; jobHistoryInfo.OperatorPaged = logEntry.OperatorPaged; jobHistoryInfo.RetriesAttempted = logEntry.RetriesAttempted; jobHistoryInfo.Server = logEntry.Server; // Add steps to the job if any var jobSteps = new List <AgentJobStep>(); foreach (JobStep step in steps) { var jobId = jobRow[UrnJobId].ToString(); jobSteps.Add(AgentUtilities.ConvertToAgentJobStepInfo(step, logEntry, jobId)); } jobHistoryInfo.Steps = jobSteps.ToArray(); // Add schedules to the job if any var jobSchedules = new List <AgentScheduleInfo>(); foreach (JobSchedule schedule in schedules) { jobSchedules.Add(AgentUtilities.ConvertToAgentScheduleInfo(schedule)); } jobHistoryInfo.Schedules = jobSchedules.ToArray(); // Add alerts to the job if any var jobAlerts = new List <AgentAlertInfo>(); foreach (Alert alert in alerts) { jobAlerts.Add(AgentUtilities.ConvertToAgentAlertInfo(alert)); } jobHistoryInfo.Alerts = jobAlerts.ToArray(); jobs.Add(jobHistoryInfo); } return(jobs); }
/// <summary> /// Handle request to get Agent Job history /// </summary> internal async Task HandleJobHistoryRequest(AgentJobHistoryParams parameters, RequestContext <AgentJobHistoryResult> requestContext) { await Task.Run(async() => { try { var result = new AgentJobHistoryResult(); ConnectionInfo connInfo; ConnectionServiceInstance.TryFindConnection( parameters.OwnerUri, out connInfo); if (connInfo != null) { CDataContainer dataContainer = CDataContainer.CreateDataContainer(connInfo, databaseExists: true); var jobs = dataContainer.Server.JobServer.Jobs; Tuple <SqlConnectionInfo, DataTable, ServerConnection> tuple = CreateSqlConnection(connInfo, parameters.JobId); SqlConnectionInfo sqlConnInfo = tuple.Item1; DataTable dt = tuple.Item2; ServerConnection connection = tuple.Item3; // Send Steps, Alerts and Schedules with job history in background // Add steps to the job if any JobStepCollection steps = jobs[parameters.JobName].JobSteps; var jobSteps = new List <AgentJobStepInfo>(); foreach (JobStep step in steps) { jobSteps.Add(AgentUtilities.ConvertToAgentJobStepInfo(step, parameters.JobId, parameters.JobName)); } result.Steps = jobSteps.ToArray(); // Add schedules to the job if any JobScheduleCollection schedules = jobs[parameters.JobName].JobSchedules; var jobSchedules = new List <AgentScheduleInfo>(); foreach (JobSchedule schedule in schedules) { jobSchedules.Add(AgentUtilities.ConvertToAgentScheduleInfo(schedule)); } result.Schedules = jobSchedules.ToArray(); // Alerts AlertCollection alerts = dataContainer.Server.JobServer.Alerts; var jobAlerts = new List <Alert>(); foreach (Alert alert in alerts) { if (alert.JobName == parameters.JobName) { jobAlerts.Add(alert); } } result.Alerts = AgentUtilities.ConvertToAgentAlertInfo(jobAlerts); // Add histories int count = dt.Rows.Count; List <AgentJobHistoryInfo> jobHistories = new List <AgentJobHistoryInfo>(); if (count > 0) { var job = dt.Rows[0]; Guid jobId = (Guid)job[AgentUtilities.UrnJobId]; int runStatus = Convert.ToInt32(job[AgentUtilities.UrnRunStatus], System.Globalization.CultureInfo.InvariantCulture); var t = new LogSourceJobHistory(parameters.JobName, sqlConnInfo, null, runStatus, jobId, null); var tlog = t as ILogSource; tlog.Initialize(); var logEntries = t.LogEntries; // Finally add the job histories jobHistories = AgentUtilities.ConvertToAgentJobHistoryInfo(logEntries, job, steps); result.Histories = jobHistories.ToArray(); result.Success = true; tlog.CloseReader(); } connection.Disconnect(); await requestContext.SendResult(result); } } catch (Exception e) { await requestContext.SendError(e); } }); }