using DigitalData.Modules.Messaging.WCF; using ECM.JobRunner.Common; namespace ECM.JobRunner.Web.Data { public class ApiService { private readonly Channel channelManager; private readonly Common.JobRunnerReference.IEDMIServiceChannel channel; private ServerAddress address; private System.Timers.Timer pollingTimer = new(); public event EventHandler DataUpdated; public ApiService(LoggingService Logging, WcfService Wcf) { channel = Wcf.Channel; pollingTimer.Elapsed += PollingTimer_Elapsed; pollingTimer.Interval = 1000; pollingTimer.Start(); } protected virtual void OnDataUpdated(ApiStatusResponse e) { EventHandler handler = DataUpdated; if (handler != null) { handler(this, e); } } private async void PollingTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { OnDataUpdated(await GetData()); } public async Task?> GetJobList() { var resp = await channel.GetJobConfigAsync(); if (resp != null && resp.OK) { return resp.JobDefinitions.ToList(); } else { return null; } } public async Task GetData() { DateTime heartbeat = await GetHeartbeat(); List jobHistory = await GetHistoryEntries(); return new ApiStatusResponse() { heartbeat = heartbeat, jobHistory = jobHistory.OrderByDescending(e => e.CreatedAt).Take(10).ToList() }; } private async Task GetHeartbeat() { return await channel.GetHeartbeatAsync(); } private async Task> GetHistoryEntries() { try { var oResponse = await channel.GetJobHistoryAsync(); if (oResponse.OK) { return oResponse.Items.ToList(); } else { return new(); } } catch (Exception) { throw; } } } }