public List <JobExecutionStatistics> GetByName(string jobName)
        {
            var    jobStatsList = new List <JobExecutionStatistics>();
            string query        = "select * from [SchedulerMonitoring].[dbo].[JobExecutionStatistics] where Name=@jobName";

            using (SqlConnection cn = new SqlConnection(_connectionString))
                using (SqlCommand cmd = new SqlCommand(query, cn))
                {
                    cn.Open();
                    cmd.Parameters.Add("@jobName", SqlDbType.VarChar, 50).Value = jobName;
                    var reader = cmd.ExecuteReader();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            var stats = new JobExecutionStatistics
                            {
                                Name              = reader["Name"].ToString(),
                                StartTime         = Convert.ToDateTime(reader["StartTime"].ToString()),
                                EndTime           = Convert.ToDateTime(reader["EndTime"].ToString()),
                                RunTime           = Int32.Parse(reader["RunTime"].ToString()),
                                ScheduledInterval = Int32.Parse(reader["ScheduledInterval"].ToString())
                            };
                            jobStatsList.Add(stats);
                        }
                    }
                    cn.Close();
                }
            return(jobStatsList);
        }
        public List <JobExecutionStatistics> Get()
        {
            var    jobStatsList = new List <JobExecutionStatistics>();
            string query        = "SELECT * FROM dbo.JobExecutionStatistics";

            using (SqlConnection cn = new SqlConnection(_connectionString))
                using (SqlCommand cmd = new SqlCommand(query, cn))
                {
                    cn.Open();
                    var reader = cmd.ExecuteReader();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            var stats = new JobExecutionStatistics {
                                Name              = reader["Name"].ToString(),
                                StartTime         = Convert.ToDateTime(reader["StartTime"].ToString()),
                                EndTime           = Convert.ToDateTime(reader["EndTime"].ToString()),
                                RunTime           = Int32.Parse(reader["RunTime"].ToString()),
                                ScheduledInterval = Int32.Parse(reader["ScheduledInterval"].ToString())
                            };
                            jobStatsList.Add(stats);
                        }
                    }
                    cn.Close();
                }
            return(jobStatsList);
        }
        public Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default(CancellationToken))
        {
            var trg   = context.Trigger as ISimpleTrigger;
            var stats = new JobExecutionStatistics {
                Name              = context.JobDetail.Key.Name,
                StartTime         = context.FireTimeUtc.DateTime,
                EndTime           = context.FireTimeUtc.DateTime.AddSeconds(context.JobRunTime.TotalSeconds),
                RunTime           = Convert.ToInt32(context.JobRunTime.TotalSeconds),
                ScheduledInterval = Convert.ToInt32(trg.RepeatInterval.TotalSeconds)
            };

            repository.Insert(stats);
            return(Task.CompletedTask);
        }
        public void Insert(JobExecutionStatistics stats)
        {
            string query = "INSERT INTO dbo.JobExecutionStatistics (Name, StartTime, EndTime, RunTime, ScheduledInterval) " +
                           "VALUES(@name, @startTime, @endTime, @runTime, @scheduledInterval)";

            using (SqlConnection cn = new SqlConnection(_connectionString))
                using (SqlCommand cmd = new SqlCommand(query, cn))
                {
                    cmd.Parameters.Add("@name", SqlDbType.VarChar, 50).Value      = stats.Name;
                    cmd.Parameters.Add("@startTime", SqlDbType.DateTime).Value    = stats.StartTime;
                    cmd.Parameters.Add("@endTime", SqlDbType.DateTime).Value      = stats.EndTime;
                    cmd.Parameters.Add("@runTime", SqlDbType.Int).Value           = stats.RunTime;
                    cmd.Parameters.Add("@scheduledInterval", SqlDbType.Int).Value = stats.ScheduledInterval;

                    cn.Open();
                    cmd.ExecuteNonQuery();
                    cn.Close();
                }
        }