@@ -1,57 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using DotNetCore.CAP.Dashboard.Resources; | |||
namespace DotNetCore.CAP.Dashboard | |||
{ | |||
public static class JobsSidebarMenu | |||
{ | |||
public static readonly List<Func<RazorPage, MenuItem>> Items | |||
= new List<Func<RazorPage, MenuItem>>(); | |||
static JobsSidebarMenu() | |||
{ | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Enqueued, page.Url.LinkToQueues()) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/enqueued"), | |||
Metric = DashboardMetrics.EnqueuedAndQueueCount | |||
}); | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Scheduled, page.Url.To("/jobs/scheduled")) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/scheduled"), | |||
Metric = DashboardMetrics.ScheduledCount | |||
}); | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Processing, page.Url.To("/jobs/processing")) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/processing"), | |||
Metric = DashboardMetrics.ProcessingCount | |||
}); | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Succeeded, page.Url.To("/jobs/succeeded")) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/succeeded"), | |||
Metric = DashboardMetrics.SucceededCount | |||
}); | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Failed, page.Url.To("/jobs/failed")) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/failed"), | |||
Metric = DashboardMetrics.FailedCount | |||
}); | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Deleted, page.Url.To("/jobs/deleted")) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/deleted"), | |||
Metric = DashboardMetrics.DeletedCount | |||
}); | |||
Items.Add(page => new MenuItem(Strings.JobsSidebarMenu_Awaiting, page.Url.To("/jobs/awaiting")) | |||
{ | |||
Active = page.RequestPath.StartsWith("/jobs/awaiting"), | |||
Metric = DashboardMetrics.AwaitingCount | |||
}); | |||
} | |||
} | |||
} |
@@ -1,18 +0,0 @@ | |||
using System; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class EnqueuedJobDto | |||
{ | |||
public EnqueuedJobDto() | |||
{ | |||
InEnqueuedState = true; | |||
} | |||
public Message Message { get; set; } | |||
public string State { get; set; } | |||
public DateTime? EnqueuedAt { get; set; } | |||
public bool InEnqueuedState { get; set; } | |||
} | |||
} |
@@ -1,21 +0,0 @@ | |||
using System; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class FailedJobDto | |||
{ | |||
public FailedJobDto() | |||
{ | |||
InFailedState = true; | |||
} | |||
public Message Message { get; set; } | |||
public string Reason { get; set; } | |||
public DateTime? FailedAt { get; set; } | |||
public string ExceptionType { get; set; } | |||
public string ExceptionMessage { get; set; } | |||
public string ExceptionDetails { get; set; } | |||
public bool InFailedState { get; set; } | |||
} | |||
} |
@@ -1,12 +0,0 @@ | |||
using System; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class FetchedJobDto | |||
{ | |||
public Message Message { get; set; } | |||
public string State { get; set; } | |||
public DateTime? FetchedAt { get; set; } | |||
} | |||
} |
@@ -1,15 +0,0 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class JobDetailsDto | |||
{ | |||
public Message Message { get; set; } | |||
public DateTime? CreatedAt { get; set; } | |||
public IDictionary<string, string> Properties { get; set; } | |||
public IList<StateHistoryDto> History { get; set; } | |||
public DateTime? ExpireAt { get; set; } | |||
} | |||
} |
@@ -1,12 +0,0 @@ | |||
using System.Collections.Generic; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class JobList<TDto> : List<KeyValuePair<string, TDto>> | |||
{ | |||
public JobList(IEnumerable<KeyValuePair<string, TDto>> source) | |||
: base(source) | |||
{ | |||
} | |||
} | |||
} |
@@ -1,18 +0,0 @@ | |||
using System; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class ProcessingJobDto | |||
{ | |||
public ProcessingJobDto() | |||
{ | |||
InProcessingState = true; | |||
} | |||
public Message Message { get; set; } | |||
public bool InProcessingState { get; set; } | |||
public string ServerId { get; set; } | |||
public DateTime? StartedAt { get; set; } | |||
} | |||
} |
@@ -1,18 +0,0 @@ | |||
using System; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class ScheduledJobDto | |||
{ | |||
public ScheduledJobDto() | |||
{ | |||
InScheduledState = true; | |||
} | |||
public Message Message { get; set; } | |||
public DateTime EnqueueAt { get; set; } | |||
public DateTime? ScheduledAt { get; set; } | |||
public bool InScheduledState { get; set; } | |||
} | |||
} |
@@ -1,19 +0,0 @@ | |||
using System; | |||
using DotNetCore.CAP.Models; | |||
namespace DotNetCore.CAP.Dashboard.Monitoring | |||
{ | |||
public class SucceededJobDto | |||
{ | |||
public SucceededJobDto() | |||
{ | |||
InSucceededState = true; | |||
} | |||
public Message Message { get; set; } | |||
public object Result { get; set; } | |||
public long? TotalDuration { get; set; } | |||
public DateTime? SucceededAt { get; set; } | |||
public bool InSucceededState { get; set; } | |||
} | |||
} |
@@ -1,122 +0,0 @@ | |||
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@ | |||
@using System.Linq | |||
@using DotNetCore.CAP.Dashboard | |||
@using DotNetCore.CAP.Dashboard.Pages | |||
@using DotNetCore.CAP.Dashboard.Resources | |||
@inherits RazorPage | |||
@{ | |||
Layout = new LayoutPage(Strings.QueuesPage_Title); | |||
var monitor = Storage.GetMonitoringApi(); | |||
var queues = monitor.Queues(); | |||
} | |||
<div class="row"> | |||
<div class="col-md-3"> | |||
@Html.JobsSidebar() | |||
</div> | |||
<div class="col-md-9"> | |||
<h1 class="page-header">@Strings.QueuesPage_Title</h1> | |||
@if (queues.Count == 0) | |||
{ | |||
<div class="alert alert-warning"> | |||
@Strings.QueuesPage_NoQueues | |||
</div> | |||
} | |||
else | |||
{ | |||
<div class="table-responsive"> | |||
<table class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th style="min-width: 200px;">@Strings.QueuesPage_Table_Queue</th> | |||
<th>@Strings.QueuesPage_Table_Length</th> | |||
<th>@Strings.Common_Fetched</th> | |||
<th>@Strings.QueuesPage_Table_NextsJobs</th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@foreach (var queue in queues) | |||
{ | |||
<tr> | |||
<td>@Html.QueueLabel(queue.Name)</td> | |||
<td>@queue.Length</td> | |||
<td> | |||
@if (queue.Fetched.HasValue) | |||
{ | |||
<a href="@Url.To("/jobs/enqueued/fetched/" + queue.Name)"> | |||
@queue.Fetched | |||
</a> | |||
} | |||
else | |||
{ | |||
<em>@Strings.Common_NotAvailable</em> | |||
} | |||
</td> | |||
<td> | |||
@if (queue.FirstJobs.Count == 0) | |||
{ | |||
<em> | |||
@Strings.QueuesPage_NoJobs | |||
</em> | |||
} | |||
else | |||
{ | |||
<table class="table table-condensed table-inner"> | |||
<thead> | |||
<tr> | |||
<th class="min-width">@Strings.Common_Id</th> | |||
<th class="min-width">@Strings.Common_State</th> | |||
<th>@Strings.Common_Job</th> | |||
<th class="align-right min-width">@Strings.Common_Enqueued</th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@foreach (var job in queue.FirstJobs) | |||
{ | |||
<tr class="@(job.Value == null || !job.Value.InEnqueuedState ? "obsolete-data" : null)"> | |||
<td class="min-width"> | |||
@Html.JobIdLink(job.Key) | |||
@if (job.Value != null && !job.Value.InEnqueuedState) | |||
{ | |||
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span> | |||
} | |||
</td> | |||
@if (job.Value == null) | |||
{ | |||
<td colspan="3"><em>@Strings.Common_JobExpired</em></td> | |||
} | |||
else | |||
{ | |||
<td class="min-width"> | |||
@Html.StateLabel(job.Value.State) | |||
</td> | |||
<td class="word-break"> | |||
@Html.JobNameLink(job.Key, job.Value.Message) | |||
</td> | |||
<td class="align-right min-width"> | |||
@if (job.Value.EnqueuedAt.HasValue) | |||
{ | |||
@Html.RelativeTime(job.Value.EnqueuedAt.Value) | |||
} | |||
else | |||
{ | |||
<em>@Strings.Common_NotAvailable</em> | |||
} | |||
</td> | |||
} | |||
</tr> | |||
} | |||
</tbody> | |||
</table> | |||
} | |||
</td> | |||
</tr> | |||
} | |||
</tbody> | |||
</table> | |||
</div> | |||
} | |||
</div> | |||
</div> |
@@ -1,574 +0,0 @@ | |||
#pragma warning disable 1591 | |||
//------------------------------------------------------------------------------ | |||
// <auto-generated> | |||
// This code was generated by a tool. | |||
// Runtime Version:4.0.30319.42000 | |||
// | |||
// Changes to this file may cause incorrect behavior and will be lost if | |||
// the code is regenerated. | |||
// </auto-generated> | |||
//------------------------------------------------------------------------------ | |||
namespace DotNetCore.CAP.Dashboard.Pages | |||
{ | |||
using System; | |||
using System.Collections.Generic; | |||
#line 2 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
using System.Linq; | |||
#line default | |||
#line hidden | |||
using System.Text; | |||
#line 3 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
using DotNetCore.CAP.Dashboard; | |||
#line default | |||
#line hidden | |||
#line 4 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
using DotNetCore.CAP.Dashboard.Pages; | |||
#line default | |||
#line hidden | |||
#line 5 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
using DotNetCore.CAP.Dashboard.Resources; | |||
#line default | |||
#line hidden | |||
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] | |||
internal partial class QueuesPage : RazorPage | |||
{ | |||
#line hidden | |||
public override void Execute() | |||
{ | |||
WriteLiteral("\r\n"); | |||
#line 7 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Layout = new LayoutPage(Strings.QueuesPage_Title); | |||
var monitor = Storage.GetMonitoringApi(); | |||
var queues = monitor.Queues(); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-3\">\r\n "); | |||
#line 16 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Html.JobsSidebar()); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n </div>\r\n <div class=\"col-md-9\">\r\n <h1 class=\"page-header\">"); | |||
#line 19 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.QueuesPage_Title); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</h1>\r\n\r\n"); | |||
#line 21 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
if (queues.Count == 0) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <div class=\"alert alert-warning\">\r\n "); | |||
#line 24 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.QueuesPage_NoQueues); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n </div>\r\n"); | |||
#line 26 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
else | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <div class=\"table-responsive\">\r\n <table class=\"table t" + | |||
"able-striped\">\r\n <thead>\r\n <tr>\r\n " + | |||
" <th style=\"min-width: 200px;\">"); | |||
#line 33 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.QueuesPage_Table_Queue); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n <th>"); | |||
#line 34 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.QueuesPage_Table_Length); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n <th>"); | |||
#line 35 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_Fetched); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n <th>"); | |||
#line 36 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.QueuesPage_Table_NextsJobs); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n " + | |||
" <tbody>\r\n"); | |||
#line 40 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
foreach (var queue in queues) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <tr>\r\n <td>"); | |||
#line 43 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Html.QueueLabel(queue.Name)); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</td>\r\n <td>"); | |||
#line 44 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(queue.Length); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</td>\r\n <td>\r\n"); | |||
#line 46 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
if (queue.Fetched.HasValue) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <a href=\""); | |||
#line 48 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Url.To("/jobs/enqueued/fetched/" + queue.Name)); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\">\r\n "); | |||
#line 49 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(queue.Fetched); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n </a>\r\n"); | |||
#line 51 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
else | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <em>"); | |||
#line 54 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_NotAvailable); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</em>\r\n"); | |||
#line 55 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </td>\r\n <td>\r\n"); | |||
#line 58 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
if (queue.FirstJobs.Count == 0) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <em>\r\n " + | |||
" "); | |||
#line 61 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.QueuesPage_NoJobs); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n </em>\r\n"); | |||
#line 63 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
else | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(@" <table class=""table table-condensed table-inner""> | |||
<thead> | |||
<tr> | |||
<th class=""min-width"">"); | |||
#line 69 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_Id); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n <th class=\"min-width\">" + | |||
""); | |||
#line 70 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_State); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n <th>"); | |||
#line 71 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_Job); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n <th class=\"align-right" + | |||
" min-width\">"); | |||
#line 72 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_Enqueued); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</th>\r\n </tr>\r\n " + | |||
" </thead>\r\n <" + | |||
"tbody>\r\n"); | |||
#line 76 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
foreach (var job in queue.FirstJobs) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <tr class=\""); | |||
#line 78 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(job.Value == null || !job.Value.InEnqueuedState ? "obsolete-data" : null); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\">\r\n <td class=\"min-width\"" + | |||
">\r\n "); | |||
#line 80 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Html.JobIdLink(job.Key)); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n"); | |||
#line 81 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
if (job.Value != null && !job.Value.InEnqueuedState) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <span title=\""); | |||
#line 83 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_JobStateChanged_Text); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\" class=\"glyphicon glyphicon-question-sign\"></span>\r\n"); | |||
#line 84 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </td>\r\n"); | |||
#line 86 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
if (job.Value == null) | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <td colspan=\"3\"><em>"); | |||
#line 88 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_JobExpired); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</em></td>\r\n"); | |||
#line 89 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
else | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <td class=\"min-width\"" + | |||
">\r\n "); | |||
#line 93 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Html.StateLabel(job.Value.State)); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n </td>\r\n"); | |||
WriteLiteral(" <td class=\"word-break" + | |||
"\">\r\n "); | |||
#line 96 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Html.JobNameLink(job.Key, job.Value.Message)); | |||
#line default | |||
#line hidden | |||
WriteLiteral("\r\n </td>\r\n"); | |||
WriteLiteral(" <td class=\"align-righ" + | |||
"t min-width\">\r\n"); | |||
#line 99 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
if (job.Value.EnqueuedAt.HasValue) | |||
{ | |||
#line default | |||
#line hidden | |||
#line 101 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Html.RelativeTime(job.Value.EnqueuedAt.Value)); | |||
#line default | |||
#line hidden | |||
#line 101 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
else | |||
{ | |||
#line default | |||
#line hidden | |||
WriteLiteral(" <em>"); | |||
#line 105 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
Write(Strings.Common_NotAvailable); | |||
#line default | |||
#line hidden | |||
WriteLiteral("</em>\r\n"); | |||
#line 106 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </td>\r\n"); | |||
#line 108 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </tr>\r\n"); | |||
#line 110 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </tbody>\r\n " + | |||
" </table>\r\n"); | |||
#line 113 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </td>\r\n </tr>\r\n"); | |||
#line 116 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n"); | |||
#line 120 "..\..\Dashboard\Pages\QueuesPage.cshtml" | |||
} | |||
#line default | |||
#line hidden | |||
WriteLiteral(" </div>\r\n</div>"); | |||
} | |||
} | |||
} | |||
#pragma warning restore 1591 |
@@ -1,113 +0,0 @@ | |||
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@ | |||
@using System | |||
@using DotNetCore.CAP.Dashboard | |||
@using DotNetCore.CAP.Dashboard.Pages | |||
@using DotNetCore.CAP.Dashboard.Resources | |||
@inherits RazorPage | |||
@{ | |||
Layout = new LayoutPage(Strings.SucceededJobsPage_Title); | |||
int from, perPage; | |||
int.TryParse(Query("from"), out from); | |||
int.TryParse(Query("count"), out perPage); | |||
var monitor = Storage.GetMonitoringApi(); | |||
var pager = new Pager(from, perPage, monitor.SucceededListCount()); | |||
var succeededJobs = monitor.SucceededJobs(pager.FromRecord, pager.RecordsPerPage); | |||
} | |||
<div class="row"> | |||
<div class="col-md-3"> | |||
@Html.JobsSidebar() | |||
</div> | |||
<div class="col-md-9"> | |||
<h1 class="page-header">@Strings.SucceededJobsPage_Title</h1> | |||
@if (pager.TotalPageCount == 0) | |||
{ | |||
<div class="alert alert-info"> | |||
@Strings.SucceededJobsPage_NoJobs | |||
</div> | |||
} | |||
else | |||
{ | |||
<div class="js-jobs-list"> | |||
<div class="btn-toolbar btn-toolbar-top"> | |||
<button class="js-jobs-list-command btn btn-sm btn-primary" | |||
data-url="@Url.To("/jobs/succeeded/requeue")" | |||
data-loading-text="@Strings.Common_Enqueueing" | |||
disabled="disabled"> | |||
<span class="glyphicon glyphicon-repeat"></span> | |||
@Strings.Common_RequeueJobs | |||
</button> | |||
@Html.PerPageSelector(pager) | |||
</div> | |||
<div class="table-responsive"> | |||
<table class="table"> | |||
<thead> | |||
<tr> | |||
<th class="min-width"> | |||
<input type="checkbox" class="js-jobs-list-select-all" /> | |||
</th> | |||
<th class="min-width">@Strings.Common_Id</th> | |||
<th>@Strings.Common_Job</th> | |||
<th class="min-width">@Strings.SucceededJobsPage_Table_TotalDuration</th> | |||
<th class="align-right">@Strings.SucceededJobsPage_Table_Succeeded</th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@foreach (var job in succeededJobs) | |||
{ | |||
<tr class="js-jobs-list-row @(job.Value == null || !job.Value.InSucceededState ? "obsolete-data" : null) @(job.Value != null && job.Value.InSucceededState ? "hover" : null)"> | |||
<td> | |||
@if (job.Value == null || job.Value.InSucceededState) | |||
{ | |||
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@job.Key" /> | |||
} | |||
</td> | |||
<td class="min-width"> | |||
@Html.JobIdLink(job.Key) | |||
@if (job.Value != null && !job.Value.InSucceededState) | |||
{ | |||
<span title="@Strings.Common_JobStateChanged_Text" class="glyphicon glyphicon-question-sign"></span> | |||
} | |||
</td> | |||
@if (job.Value == null) | |||
{ | |||
<td colspan="3"> | |||
<em>@Strings.Common_JobExpired</em> | |||
</td> | |||
} | |||
else | |||
{ | |||
<td class="word-break"> | |||
@Html.JobNameLink(job.Key, job.Value.Job) | |||
</td> | |||
<td class="min-width align-right"> | |||
@if (job.Value.TotalDuration.HasValue) | |||
{ | |||
@Html.ToHumanDuration(TimeSpan.FromMilliseconds(job.Value.TotalDuration.Value), false) | |||
} | |||
</td> | |||
<td class="min-width align-right"> | |||
@if (job.Value.SucceededAt.HasValue) | |||
{ | |||
@Html.RelativeTime(job.Value.SucceededAt.Value) | |||
} | |||
</td> | |||
} | |||
</tr> | |||
} | |||
</tbody> | |||
</table> | |||
</div> | |||
@Html.Paginator(pager) | |||
</div> | |||
} | |||
</div> | |||
</div> |