From e3f271ac334144be2fad20d90c14e037667c743a Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Wed, 21 Dec 2022 16:09:49 +0100 Subject: [PATCH] 21-12-2022 --- ECM.JobRunner.Web/Data/DashboardResponse.cs | 26 ---------- ECM.JobRunner.Web/Data/HelperService.cs | 51 ++++++++++++++++++- ECM.JobRunner.Web/Pages/History.razor | 44 ++++++++++++---- .../Pages/ImportProfile/EditProfile.razor | 3 +- .../Pages/ImportProfile/ProfileIndex.razor | 3 +- .../Pages/ImportProfile/ShowProfile.razor | 30 +++++------ .../Pages/ImportStep/StepForm.razor | 2 +- ECM.JobRunner.Web/Pages/Index.razor | 3 +- ECM.JobRunner.Web/Pages/Profiles.razor | 10 +++- ECM.JobRunner.Web/Pages/Status.razor | 17 ++++--- ECM.JobRunner.Web/Program.cs | 4 +- ECM.JobRunner.Web/Shared/MainLayout.razor | 23 ++++++--- ECM.JobRunner.Web/_Imports.razor | 3 ++ 13 files changed, 139 insertions(+), 80 deletions(-) diff --git a/ECM.JobRunner.Web/Data/DashboardResponse.cs b/ECM.JobRunner.Web/Data/DashboardResponse.cs index 4783616..d89f95a 100644 --- a/ECM.JobRunner.Web/Data/DashboardResponse.cs +++ b/ECM.JobRunner.Web/Data/DashboardResponse.cs @@ -6,31 +6,5 @@ namespace ECM.JobRunner.Web.Data { public DateTime heartbeat = DateTime.MinValue; public List jobStatus = new(); - - public class JobHistory - { - public List items; - public int total; - public int success; - public int failed; - public int waiting; - } - - public JobHistory GetHistoryForLastMinutes(int pMinutes) - { - var items = jobStatus. - Where(s => (DateTime.Now - s.CompleteTime) < new TimeSpan(0, pMinutes, 0)). - Where(s => s.Executing == false). - ToList(); - - return new JobHistory() - { - items = items, - total = items.Count, - success = items.Where(i => i.Successful && i.Waiting == false).Count(), - failed = items.Where(i => i.Successful == false).Count(), - waiting = items.Where(i => i.Successful && i.Waiting == true).Count() - }; - } } } diff --git a/ECM.JobRunner.Web/Data/HelperService.cs b/ECM.JobRunner.Web/Data/HelperService.cs index 43eea0a..95b7c32 100644 --- a/ECM.JobRunner.Web/Data/HelperService.cs +++ b/ECM.JobRunner.Web/Data/HelperService.cs @@ -1,5 +1,6 @@ using DigitalData.Modules.Logging; using ECM.JobRunner.Common.JobRunnerReference; +using System; namespace ECM.JobRunner.Web.Data { @@ -8,13 +9,59 @@ namespace ECM.JobRunner.Web.Data private readonly Logger logger; private readonly IEDMIServiceChannel channel; - public string Title = "No Title"; + public event EventHandler? PageTitleChanged; public HelperService(LoggingService Logging, WcfService Wcf) { logger = Logging.LogConfig.GetLogger(); channel = Wcf.Channel; - } + } + + public void SetPageTitle(string title) + { + PageTitleChanged?.Invoke(this, title); + } + + public List GetItemsForTimespan(List items, TimeSpan timespan) + { + return items. + Where(s => (DateTime.Now - s.CompleteTime) < timespan). + ToList(); + } + + public List GetItemsForLastMinutes(List items, int minutes) => + GetItemsForTimespan(items, new TimeSpan(0, minutes, 0)); + + public List GetItemsForLastHours(List items, int hours) => + GetItemsForTimespan(items, new TimeSpan(hours, 0, 0)); + + public List GetItemsForLastSeconds(List items, int seconds) => + GetItemsForTimespan(items, new TimeSpan(0, 0, seconds)); + + public class JobHistory + { + public List items; + public int total; + public int success; + public int failed; + public int waiting; + } + + public JobHistory GetJobHistory(List items, int sinceMinutes) + { + var filteredItems = GetItemsForLastMinutes(items, sinceMinutes); + var executingItems = filteredItems.Where(s => s.Executing == false); + + return new JobHistory() + { + items = executingItems.ToList(), + total = executingItems.Count(), + success = executingItems.Where(i => i.Successful && i.Waiting == false).Count(), + failed = executingItems.Where(i => i.Successful == false).Count(), + waiting = executingItems.Where(i => i.Successful && i.Waiting == true).Count() + }; + } + public DateTime GetNextExecutionTime(string pCronExpression) { diff --git a/ECM.JobRunner.Web/Pages/History.razor b/ECM.JobRunner.Web/Pages/History.razor index dd0545b..19e1cd5 100644 --- a/ECM.JobRunner.Web/Pages/History.razor +++ b/ECM.JobRunner.Web/Pages/History.razor @@ -5,8 +5,6 @@ History -

Job History

-
@@ -15,6 +13,17 @@
Filter + +
@@ -37,7 +46,7 @@ else if (filteredEntries.Count == 0) {
    -
  • No Job History yet.
  • +
  • No Job History.
} else @@ -116,12 +125,16 @@ private List? statusEntries; private List? filteredEntries; + private int dateFilter = 1; + private bool showWaiting = true; + + // TODO: implement more filters private bool showSuccessful = true; private bool showFailed = true; - private bool showWaiting = true; protected async override void OnInitialized() { + Helper.SetPageTitle("History"); DashboardResponse data = await Api.GetData(); UpdateData(data); @@ -137,6 +150,14 @@ InvokeAsync(StateHasChanged); } + private void DateFilterChanged(ChangeEventArgs e) + { + var dateFilterString = e.Value.ToString(); + dateFilter = int.Parse(dateFilterString); + UpdateEntries(statusEntries); + InvokeAsync(StateHasChanged); + } + protected void Api_DataUpdated(object? sender, DashboardResponse e) { UpdateData(e); @@ -146,26 +167,29 @@ { today = response.heartbeat; statusEntries = response.jobStatus; - UpdateEntries(response.jobStatus); + filteredEntries = UpdateEntries(response.jobStatus); InvokeAsync(StateHasChanged); } - protected void UpdateEntries(List? entries) + protected List? UpdateEntries(List? entries) { if (entries == null) { - return; + return null; } var filtered = entries. - Where(s => s.Executing == false); + Where(s => s.Executing == false). + ToList(); if (!showWaiting) { filtered = filtered. - Where(e => e.Waiting == false); + Where(e => e.Waiting == false).ToList(); } - filteredEntries = filtered.ToList(); + filtered = Helper.GetItemsForLastHours(filtered, dateFilter); + + return filtered; } } \ No newline at end of file diff --git a/ECM.JobRunner.Web/Pages/ImportProfile/EditProfile.razor b/ECM.JobRunner.Web/Pages/ImportProfile/EditProfile.razor index dff9fce..9988a98 100644 --- a/ECM.JobRunner.Web/Pages/ImportProfile/EditProfile.razor +++ b/ECM.JobRunner.Web/Pages/ImportProfile/EditProfile.razor @@ -7,8 +7,6 @@ Job bearbeiten -

Job bearbeiten

- @code { @@ -21,6 +19,7 @@ private async void OnFormSubmit(EditContext ctx) { ImportProfile profile = (ImportProfile)ctx.Model; + Helper.SetPageTitle(profile.Job.Name); bool result = await Profile.UpdateProfile(profile); if (result == true) diff --git a/ECM.JobRunner.Web/Pages/ImportProfile/ProfileIndex.razor b/ECM.JobRunner.Web/Pages/ImportProfile/ProfileIndex.razor index 20ecb7c..255e085 100644 --- a/ECM.JobRunner.Web/Pages/ImportProfile/ProfileIndex.razor +++ b/ECM.JobRunner.Web/Pages/ImportProfile/ProfileIndex.razor @@ -6,8 +6,6 @@ Import Profiles -

Import Profiles

- @if (filteredProfiles == null) {
    @@ -95,6 +93,7 @@ else protected async override void OnInitialized() { + Helper.SetPageTitle("Import Profiles"); profiles = await Import.GetProfiles(); filteredProfiles = profiles; diff --git a/ECM.JobRunner.Web/Pages/ImportProfile/ShowProfile.razor b/ECM.JobRunner.Web/Pages/ImportProfile/ShowProfile.razor index c8131b8..6b29430 100644 --- a/ECM.JobRunner.Web/Pages/ImportProfile/ShowProfile.razor +++ b/ECM.JobRunner.Web/Pages/ImportProfile/ShowProfile.razor @@ -19,25 +19,18 @@ } else { -

    - @if (profile.Active) - { - - - - - } - else - { - - - - - } - @profile.Job.Name -

    -
      +
    • +
      +
      + + + + Aktiv +
      + @profile.Active +
      +
    • @@ -111,6 +104,7 @@ else if (profile != null) { + Helper.SetPageTitle(profile.Job.Name); nextExecution = Helper.GetNextExecutionTime(profile.Job.CronSchedule); StateHasChanged(); } diff --git a/ECM.JobRunner.Web/Pages/ImportStep/StepForm.razor b/ECM.JobRunner.Web/Pages/ImportStep/StepForm.razor index 96765ce..efd8967 100644 --- a/ECM.JobRunner.Web/Pages/ImportStep/StepForm.razor +++ b/ECM.JobRunner.Web/Pages/ImportStep/StepForm.razor @@ -149,7 +149,7 @@ else protected string GetBackUrl() { - return $"/profiles/import/{ProfileId}/steps/{StepId}"; + return StepId < 0 ? $"/profiles/import/{ProfileId}/steps" : $"/profiles/import/{ProfileId}/steps/{StepId}"; } protected override async Task OnInitializedAsync() diff --git a/ECM.JobRunner.Web/Pages/Index.razor b/ECM.JobRunner.Web/Pages/Index.razor index 8ac5d03..0fde9d2 100644 --- a/ECM.JobRunner.Web/Pages/Index.razor +++ b/ECM.JobRunner.Web/Pages/Index.razor @@ -1,5 +1,4 @@ @using ECM.JobRunner.Web.Data; -@inject HelperService Helper; @page "/" Index @@ -9,6 +8,6 @@ @code { protected override void OnInitialized() { - Helper.Title = "Start"; + Helper.SetPageTitle("Index"); } } diff --git a/ECM.JobRunner.Web/Pages/Profiles.razor b/ECM.JobRunner.Web/Pages/Profiles.razor index 21ce789..117524c 100644 --- a/ECM.JobRunner.Web/Pages/Profiles.razor +++ b/ECM.JobRunner.Web/Pages/Profiles.razor @@ -2,8 +2,6 @@ Profile -

      Profile

      - + +@code { + protected override void OnInitialized() + { + base.OnInitialized(); + Helper.SetPageTitle("Profile"); + } +} \ No newline at end of file diff --git a/ECM.JobRunner.Web/Pages/Status.razor b/ECM.JobRunner.Web/Pages/Status.razor index 2677146..f1f4fe5 100644 --- a/ECM.JobRunner.Web/Pages/Status.razor +++ b/ECM.JobRunner.Web/Pages/Status.razor @@ -19,7 +19,7 @@ Last 5 Minutes
      - @last5MinutesItems.total jobs executed, + @last5MinutesItems.total jobs executed, @last5MinutesItems.success Successful, @last5MinutesItems.failed Failed, @last5MinutesItems.waiting Waiting @@ -112,12 +112,13 @@ private List? executingEntries; private List? completedEntries; - private DashboardResponse.JobHistory? last5MinutesItems; - private DashboardResponse.JobHistory? lastHourItems; - private DashboardResponse.JobHistory? last12HoursItems; + private HelperService.JobHistory last5MinutesItems; + private HelperService.JobHistory lastHourItems; + private HelperService.JobHistory last12HoursItems; protected async override void OnInitialized() { + Helper.SetPageTitle("Status"); DashboardResponse data = await Dashboard.GetData(); UpdateData(data); @@ -143,12 +144,14 @@ Where(s => s.StartTime.AddMinutes(10) > DateTime.Now). ToList(); - last5MinutesItems = response.GetHistoryForLastMinutes(5); - lastHourItems = response.GetHistoryForLastMinutes(60); - last12HoursItems = response.GetHistoryForLastMinutes(60 * 12); + last5MinutesItems = Helper.GetJobHistory(response.jobStatus, 5); + lastHourItems = Helper.GetJobHistory(response.jobStatus, 60); + last12HoursItems = Helper.GetJobHistory(response.jobStatus, 60 * 12); InvokeAsync(StateHasChanged); } + + } diff --git a/ECM.JobRunner.Web/Program.cs b/ECM.JobRunner.Web/Program.cs index d378d68..e511c5b 100644 --- a/ECM.JobRunner.Web/Program.cs +++ b/ECM.JobRunner.Web/Program.cs @@ -10,9 +10,11 @@ builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); builder.Services.AddTransient(); builder.Services.AddTransient(); + builder.Services.AddSingleton(); +builder.Services.AddSingleton(); + builder.Services.AddTransient(); -builder.Services.AddTransient(); builder.Services.AddTransient(); var app = builder.Build(); diff --git a/ECM.JobRunner.Web/Shared/MainLayout.razor b/ECM.JobRunner.Web/Shared/MainLayout.razor index 8a8581f..f3d8b28 100644 --- a/ECM.JobRunner.Web/Shared/MainLayout.razor +++ b/ECM.JobRunner.Web/Shared/MainLayout.razor @@ -5,15 +5,16 @@ ECM.JobRunner.Web -
      +
      -
      - @Helper.Title - About +
      @@ -23,17 +24,25 @@
      @code { - private bool connected = true; + private bool Connected = true; + private string Title = ""; protected override Task OnInitializedAsync() { + Helper.PageTitleChanged += Helper_PageTitleChanged; Wcf.ConnectedChanged += Wcf_ConnectedChanged; return Task.FromResult(true); } + public void Helper_PageTitleChanged(object? sender, string title) + { + Title = title; + InvokeAsync(StateHasChanged); + } + public void Wcf_ConnectedChanged(object? sender, bool status) { - connected = status; + Connected = status; InvokeAsync(StateHasChanged); } } diff --git a/ECM.JobRunner.Web/_Imports.razor b/ECM.JobRunner.Web/_Imports.razor index c271dc3..a1017bf 100644 --- a/ECM.JobRunner.Web/_Imports.razor +++ b/ECM.JobRunner.Web/_Imports.razor @@ -7,4 +7,7 @@ @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using ECM.JobRunner.Web +@using ECM.JobRunner.Web.Data @using ECM.JobRunner.Web.Shared + +@inject HelperService Helper \ No newline at end of file