@namespace Oqtane.Modules.Admin.Jobs @inherits ModuleBase @inject IJobService JobService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (_jobs == null) {

@SharedLocalizer["Loading"]

} else {

      @SharedLocalizer["Name"] @SharedLocalizer["Status"] @Localizer["Frequency"] @Localizer["NextExecution"]  
@context.Name @DisplayStatus(context.IsEnabled, context.IsExecuting) @DisplayFrequency(context.Interval, context.Frequency) @context.NextExecution @if (context.IsStarted) { } else { }
} @code { private List _jobs; public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } protected override async Task OnParametersSetAsync() { _jobs = await JobService.GetJobsAsync(); if (_jobs.Count == 0) { AddModuleMessage(string.Format(Localizer["Message.NoJobs"], NavigateUrl("admin/system")), MessageType.Warning); } } private string DisplayStatus(bool isEnabled, bool isExecuting) { var status = string.Empty; if (!isEnabled) { status = Localizer["Disabled"]; } else { if (isExecuting) { status = Localizer["Executing"]; } else { status = Localizer["Idle"]; } } return status; } private string DisplayFrequency(int interval, string frequency) { var result = ""; switch (frequency) { case "m": result = $"{Localizer["Every"]} {interval.ToString()} " + Localizer["Minute"]; break; case "H": result = $"{Localizer["Every"]} {interval.ToString()} " + Localizer["Hour"]; break; case "d": result = $"{Localizer["Every"]} {interval.ToString()} " + Localizer["Day"]; break; case "w": result = $"{Localizer["Every"]} {interval.ToString()} " + Localizer["Week"]; break; case "M": result = $"{Localizer["Every"]} {interval.ToString()} " + Localizer["Month"]; break; case "O": result = Localizer["Once"]; break; } return result; } private async Task DeleteJob(Job job) { try { await JobService.DeleteJobAsync(job.JobId); await logger.LogInformation("Job Deleted {Job}", job); _jobs = await JobService.GetJobsAsync(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Job {Job} {Error}", job, ex.Message); AddModuleMessage(Localizer["Error.Job.Delete"], MessageType.Error); } } private async Task StartJob(int jobId) { try { await JobService.StartJobAsync(jobId); await logger.LogInformation("Job Started {JobId}", jobId); AddModuleMessage(Localizer["Message.Job.Start"], MessageType.Success); _jobs = await JobService.GetJobsAsync(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Starting Job {JobId} {Error}", jobId, ex.Message); AddModuleMessage(Localizer["Error.Job.Start"], MessageType.Error); } } private async Task StopJob(int jobId) { try { await JobService.StopJobAsync(jobId); await logger.LogInformation("Job Stopped {JobId}", jobId); AddModuleMessage(Localizer["Message.Job.Stop"], MessageType.Success); _jobs = await JobService.GetJobsAsync(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Stopping Job {JobId} {Error}", jobId, ex.Message); AddModuleMessage(Localizer["Error.Job.Stop"], MessageType.Error); } } private async Task Refresh() { _jobs = await JobService.GetJobsAsync(); StateHasChanged(); } }