Update to latest version and show additional features

This commit is contained in:
2026-07-29 13:25:23 +02:00
parent 25690690d0
commit e44f2e7380
20 changed files with 804 additions and 31 deletions
@@ -0,0 +1,79 @@
using System.Diagnostics;
using GerstITS.Data;
using GerstITS.Examples.JobDashboard.Configurations;
using GerstITS.Examples.JobDashboard.Data;
using GerstITS.Job;
using Quartz;
namespace GerstITS.Examples.JobDashboard.Jobs;
/// <summary>
/// A scheduled job that, on every run, persists a run record to the EF Core InMemory store through the
/// framework's <see cref="IRepository" /> (wired via AddEntityFrameworkSession). Every third run fails so
/// the Job Dashboard shows a mix of successful and failed executions.
/// </summary>
[DisallowConcurrentExecution]
public sealed class ReportGenerationJob : JobBase
{
#region Fields
private static int _runCounter;
private readonly ReportGenerationJobConfiguration _configuration;
private readonly IRepository _repository;
#endregion
#region Constructors
public ReportGenerationJob(ReportGenerationJobConfiguration configuration,
IRepository repository)
{
_configuration = configuration;
_repository = repository;
}
#endregion
#region Methods
protected override void Execute()
{
var runNumber = Interlocked.Increment(ref _runCounter);
var startedAt = DateTimeOffset.UtcNow;
var stopwatch = Stopwatch.StartNew();
// Simulate some work.
Thread.Sleep(250);
stopwatch.Stop();
var success = runNumber % 3 != 0;
var error = success
? null
: $"Report generation run #{runNumber} failed (simulated).";
PersistRun(startedAt, stopwatch.ElapsedMilliseconds, success, error);
if (!success)
throw new InvalidOperationException(error);
}
private void PersistRun(DateTimeOffset startedAt, long durationMilliseconds, bool success, string error)
{
_repository.Save(new JobRunEntity
{
JobName = _configuration.Name,
StartedAt = startedAt,
DurationMilliseconds = durationMilliseconds,
Success = success,
Error = error
});
var storedRuns = _repository.Query<JobRunEntity>()
.Count();
Console.WriteLine($"---> [EF Core InMemory] persisted run of '{_configuration.Name}' (success: {success}); total runs stored: {storedRuns}");
}
#endregion
}