Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
                }
            });
        }