ECMJobRunner/ECM.JobRunner.Web/Data/DashboardService.cs
Jonathan Jenne 45f8dd2aad 16-12-2022
2022-12-16 15:59:26 +01:00

92 lines
2.6 KiB
C#

using DigitalData.Modules.Logging;
using DigitalData.Modules.Messaging.WCF;
using ECM.JobRunner.Common;
namespace ECM.JobRunner.Web.Data
{
public class DashboardService
{
private readonly Common.JobRunnerReference.IEDMIServiceChannel channel;
private Logger logger;
private readonly System.Timers.Timer pollingTimer = new();
public event EventHandler<DashboardResponse>? DataUpdated;
public DashboardService(LoggingService Logging, WcfService Wcf)
{
logger = Logging.LogConfig.GetLogger();
channel = Wcf.Channel;
pollingTimer.Elapsed += PollingTimer_Elapsed;
}
protected virtual void OnDataUpdated(DashboardResponse e)
{
DataUpdated?.Invoke(this, e);
}
private async void PollingTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
OnDataUpdated(await GetData());
}
public async Task<DashboardResponse> GetData()
{
List<Common.JobRunnerReference.HistoryItem> jobHistory = await GetHistoryItems();
List<Common.JobRunnerReference.StatusItem> jobStatus = await GetStatusItems();
return new DashboardResponse()
{
jobHistory = jobHistory.OrderByDescending(e => e.CreatedAt).ToList(),
jobStatus = jobStatus.OrderByDescending(e => e.StartTime).ToList()
};
}
private async Task<List<Common.JobRunnerReference.HistoryItem>> GetHistoryItems()
{
try
{
var oResponse = await channel.GetJobStatusAsync();
if (oResponse.OK)
{
return oResponse.HistoryItems.ToList();
}
else
{
return new();
}
}
catch (Exception e)
{
logger.Error(e);
return new();
}
}
private async Task<List<Common.JobRunnerReference.StatusItem>> GetStatusItems()
{
try
{
var oResponse = await channel.GetJobStatusAsync();
if (oResponse.OK)
{
return oResponse.StatusItems.ToList();
}
else
{
return new();
}
}
catch (Exception e)
{
logger.Error(e);
return new();
}
}
}
}