61 lines
2.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|