Exemple #1
0
        private async void TimerElapsed(object sender, ElapsedEventArgs e)
        {
            List <ITimedJob> timedJobs = new List <ITimedJob>();

            using (FitzContext db = this.dbFactory.Create())
            {
                List <Job> jobs = db.Jobs.ToList();

                foreach (ITimedJob timedJob in this.services.GetServices <ITimedJob>())
                {
                    string jobName = timedJob.GetType().FullName;

                    Job job = jobs.Where(j => j.Name == jobName).FirstOrDefault();

                    if (job == null)
                    {
                        job = new Job()
                        {
                            Name          = jobName,
                            LastExecution = DateTime.UnixEpoch.ToUniversalTime(),
                        };

                        db.Jobs.Add(job);
                    }

                    if ((DateTime.UtcNow - job.LastExecution).TotalMinutes >= timedJob.Interval)
                    {
                        timedJobs.Add(timedJob);
                        job.LastExecution = DateTime.UtcNow;
                    }
                }

                await db.SaveChangesAsync().ConfigureAwait(false);
            }

            if (timedJobs.Count > 0)
            {
                await this.activityManager.TrySetActivityAsync($"{timedJobs.Count} job(s)", ActivityType.Watching, true).ConfigureAwait(false);

                Task jobs = Task.WhenAll(timedJobs.Select(t => t.Execute()));

                try
                {
                    await jobs.ConfigureAwait(false);
                }
#pragma warning disable CA1031 // Do not catch general exception types
                catch (Exception)
#pragma warning restore CA1031 // Do not catch general exception types
                {
                    this.bloonLog.Error($"{jobs.Exception.InnerExceptions.Count} job(s) failed! Check logs");
                    Log.Error(jobs.Exception, "One or more jobs failed.");
                }
            }
        }
Exemple #2
0
 public PublicCommands(FitzContext db)
 {
     this.db = db;
 }