Files
2026-08-19 19:27:41 +02:00

61 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace FileInterface.Scheduler
{
public sealed class JobLogEntry
{
public DateTime Timestamp { get; set; }
public string JobType { get; set; }
public string JobId { get; set; }
public string JobName { get; set; }
public string Level { get; set; }
public string Message { get; set; }
}
public sealed class JobLog
{
private readonly object _sync = new object();
private readonly Queue<JobLogEntry> _entries = new Queue<JobLogEntry>();
private readonly int _maxEntries;
public JobLog(int maxEntries)
{
_maxEntries = Math.Max(100, maxEntries);
}
public void Info(CronJobConfig job, string message) { Add("CRON", job == null ? "" : job.Id, job == null ? "" : job.Name, "INFO", message); }
public void Error(CronJobConfig job, string message) { Add("CRON", job == null ? "" : job.Id, job == null ? "" : job.Name, "ERROR", message); }
public void Info(WatcherJobConfig job, string message) { Add("WATCHER", job == null ? "" : job.Id, job == null ? "" : job.Name, "INFO", message); }
public void Error(WatcherJobConfig job, string message) { Add("WATCHER", job == null ? "" : job.Id, job == null ? "" : job.Name, "ERROR", message); }
public void SystemInfo(string message) { Add("SYSTEM", "", "System", "INFO", message); }
public void SystemError(string message) { Add("SYSTEM", "", "System", "ERROR", message); }
public IList<JobLogEntry> GetLatest(int limit)
{
lock (_sync)
{
return _entries.Reverse().Take(Math.Max(1, Math.Min(limit, _maxEntries))).ToList();
}
}
private void Add(string jobType, string jobId, string jobName, string level, string message)
{
lock (_sync)
{
_entries.Enqueue(new JobLogEntry
{
Timestamp = DateTime.Now,
JobType = jobType ?? "",
JobId = jobId ?? "",
JobName = jobName ?? "",
Level = level,
Message = message ?? ""
});
while (_entries.Count > _maxEntries) _entries.Dequeue();
}
}
}
}