Commit e9aaf305 authored by yangxiaodong's avatar yangxiaodong

update dashboard.

parent 675e3c19
...@@ -6,25 +6,26 @@ namespace DotNetCore.CAP.Dashboard ...@@ -6,25 +6,26 @@ namespace DotNetCore.CAP.Dashboard
{ {
internal class BatchCommandDispatcher : IDashboardDispatcher internal class BatchCommandDispatcher : IDashboardDispatcher
{ {
private readonly Action<DashboardContext, string> _command; private readonly Action<DashboardContext, int> _command;
public BatchCommandDispatcher(Action<DashboardContext, string> command) public BatchCommandDispatcher(Action<DashboardContext, int> command)
{ {
_command = command; _command = command;
} }
public async Task Dispatch(DashboardContext context) public async Task Dispatch(DashboardContext context)
{ {
var jobIds = await context.Request.GetFormValuesAsync("jobs[]"); var messageIds = await context.Request.GetFormValuesAsync("messages[]");
if (jobIds.Count == 0) if (messageIds.Count == 0)
{ {
context.Response.StatusCode = 422; context.Response.StatusCode = 422;
return; return;
} }
foreach (var jobId in jobIds) foreach (var messageId in messageIds)
{ {
_command(context, jobId); var id = int.Parse(messageId);
_command(context, id);
} }
context.Response.StatusCode = (int)HttpStatusCode.NoContent; context.Response.StatusCode = (int)HttpStatusCode.NoContent;
......
...@@ -468,7 +468,7 @@ ...@@ -468,7 +468,7 @@
var $this = $(this); var $this = $(this);
var confirmText = $this.data('confirm'); var confirmText = $this.data('confirm');
var jobs = $("input[name='jobs[]']:checked", container).map(function () { var jobs = $("input[name='messages[]']:checked", container).map(function () {
return $(this).val(); return $(this).val();
}).get(); }).get();
...@@ -478,7 +478,7 @@ ...@@ -478,7 +478,7 @@
$this.button('loading'); $this.button('loading');
}, 100); }, 100);
$.post($this.data('url'), { 'jobs[]': jobs }, function () { $.post($this.data('url'), { 'messages[]': jobs }, function () {
clearTimeout(loadingDelay); clearTimeout(loadingDelay);
window.location.reload(); window.location.reload();
}); });
...@@ -498,3 +498,37 @@ ...@@ -498,3 +498,37 @@
$(function () { $(function () {
Cap.page = new Cap.Page(Cap.config); Cap.page = new Cap.Page(Cap.config);
}); });
(function () {
var json = null;
$(".openModal").click(function () {
var url = $(this).data("url");
$.ajax({
url: url,
dataType: "json",
success: function (data) {
json = data;
$("#formatBtn").click();
$(".modal").modal("show");
}
});
});
$("#formatBtn").click(function () {
$('#jsonContent').JSONView(json);
});
$("#rawBtn").click(function () {
$('#jsonContent').text(JSON.stringify(json));
});
$("#expandBtn").click(function () {
$('#jsonContent').JSONView('expand');
});
$("#collapseBtn").click(function () {
$('#jsonContent').JSONView('collapse');
});
})();
\ No newline at end of file
...@@ -431,69 +431,6 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -431,69 +431,6 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Awaiting.
/// </summary>
public static string JobsSidebarMenu_Awaiting {
get {
return ResourceManager.GetString("JobsSidebarMenu_Awaiting", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deleted.
/// </summary>
public static string JobsSidebarMenu_Deleted {
get {
return ResourceManager.GetString("JobsSidebarMenu_Deleted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Enqueued.
/// </summary>
public static string JobsSidebarMenu_Enqueued {
get {
return ResourceManager.GetString("JobsSidebarMenu_Enqueued", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed.
/// </summary>
public static string JobsSidebarMenu_Failed {
get {
return ResourceManager.GetString("JobsSidebarMenu_Failed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Processing.
/// </summary>
public static string JobsSidebarMenu_Processing {
get {
return ResourceManager.GetString("JobsSidebarMenu_Processing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Scheduled.
/// </summary>
public static string JobsSidebarMenu_Scheduled {
get {
return ResourceManager.GetString("JobsSidebarMenu_Scheduled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded.
/// </summary>
public static string JobsSidebarMenu_Succeeded {
get {
return ResourceManager.GetString("JobsSidebarMenu_Succeeded", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Back to site. /// Looks up a localized string similar to Back to site.
/// </summary> /// </summary>
...@@ -557,6 +494,15 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -557,6 +494,15 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to No published messages found..
/// </summary>
public static string MessagesPage_NoMessages {
get {
return ResourceManager.GetString("MessagesPage_NoMessages", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Query. /// Looks up a localized string similar to Query.
/// </summary> /// </summary>
...@@ -575,6 +521,15 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -575,6 +521,15 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Message group.
/// </summary>
public static string MessagesPage_Query_MessageGroup {
get {
return ResourceManager.GetString("MessagesPage_Query_MessageGroup", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Message name. /// Looks up a localized string similar to Message name.
/// </summary> /// </summary>
...@@ -602,6 +557,15 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -602,6 +557,15 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Group.
/// </summary>
public static string MessagesPage_Table_Group {
get {
return ResourceManager.GetString("MessagesPage_Table_Group", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Name. /// Looks up a localized string similar to Name.
/// </summary> /// </summary>
...@@ -864,11 +828,11 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -864,11 +828,11 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to No published messages found.. /// Looks up a localized string similar to Published Messages.
/// </summary> /// </summary>
public static string PublishedPage_NoMessages { public static string PublishedMessagesPage_Title {
get { get {
return ResourceManager.GetString("PublishedPage_NoMessages", resourceCulture); return ResourceManager.GetString("PublishedMessagesPage_Title", resourceCulture);
} }
} }
...@@ -881,6 +845,24 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -881,6 +845,24 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Received Messages.
/// </summary>
public static string ReceivedMessagesPage_Title {
get {
return ResourceManager.GetString("ReceivedMessagesPage_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Received Messages.
/// </summary>
public static string ReceivedPage_Title {
get {
return ResourceManager.GetString("ReceivedPage_Title", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to All is OK – you have no retries.. /// Looks up a localized string similar to All is OK – you have no retries..
/// </summary> /// </summary>
...@@ -981,11 +963,29 @@ namespace DotNetCore.CAP.Dashboard.Resources { ...@@ -981,11 +963,29 @@ namespace DotNetCore.CAP.Dashboard.Resources {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Succeeded Messages. /// Looks up a localized string similar to Failed.
/// </summary>
public static string SidebarMenu_Failed {
get {
return ResourceManager.GetString("SidebarMenu_Failed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Processing.
/// </summary>
public static string SidebarMenu_Processing {
get {
return ResourceManager.GetString("SidebarMenu_Processing", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Succeeded.
/// </summary> /// </summary>
public static string SucceededMessagesPage_Title { public static string SidebarMenu_Succeeded {
get { get {
return ResourceManager.GetString("SucceededMessagesPage_Title", resourceCulture); return ResourceManager.GetString("SidebarMenu_Succeeded", resourceCulture);
} }
} }
} }
......
...@@ -293,25 +293,16 @@ ...@@ -293,25 +293,16 @@
<data name="ServersPage_Title" xml:space="preserve"> <data name="ServersPage_Title" xml:space="preserve">
<value>Servers</value> <value>Servers</value>
</data> </data>
<data name="SucceededMessagesPage_Title" xml:space="preserve"> <data name="PublishedMessagesPage_Title" xml:space="preserve">
<value>Succeeded Messages</value> <value>Published Messages</value>
</data> </data>
<data name="JobsSidebarMenu_Awaiting" xml:space="preserve"> <data name="SidebarMenu_Failed" xml:space="preserve">
<value>Awaiting</value>
</data>
<data name="JobsSidebarMenu_Deleted" xml:space="preserve">
<value>Deleted</value>
</data>
<data name="JobsSidebarMenu_Failed" xml:space="preserve">
<value>Failed</value> <value>Failed</value>
</data> </data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve"> <data name="SidebarMenu_Processing" xml:space="preserve">
<value>Processing</value> <value>Processing</value>
</data> </data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve"> <data name="SidebarMenu_Succeeded" xml:space="preserve">
<value>Scheduled</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<value>Succeeded</value> <value>Succeeded</value>
</data> </data>
<data name="NavigationMenu_Published" xml:space="preserve"> <data name="NavigationMenu_Published" xml:space="preserve">
...@@ -338,9 +329,6 @@ ...@@ -338,9 +329,6 @@
<data name="Common_NoState" xml:space="preserve"> <data name="Common_NoState" xml:space="preserve">
<value>No state</value> <value>No state</value>
</data> </data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve"> <data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value> <value>Active Connections</value>
</data> </data>
...@@ -428,10 +416,22 @@ ...@@ -428,10 +416,22 @@
<data name="MessagesPage_Table_Retries" xml:space="preserve"> <data name="MessagesPage_Table_Retries" xml:space="preserve">
<value>Retries</value> <value>Retries</value>
</data> </data>
<data name="PublishedPage_NoMessages" xml:space="preserve"> <data name="MessagesPage_NoMessages" xml:space="preserve">
<value>No published messages found.</value> <value>No published messages found.</value>
</data> </data>
<data name="PublishedPage_Title" xml:space="preserve"> <data name="PublishedPage_Title" xml:space="preserve">
<value>Published Jobs</value> <value>Published Jobs</value>
</data> </data>
<data name="MessagesPage_Query_MessageGroup" xml:space="preserve">
<value>Message group</value>
</data>
<data name="MessagesPage_Table_Group" xml:space="preserve">
<value>Group</value>
</data>
<data name="ReceivedMessagesPage_Title" xml:space="preserve">
<value>Received Messages</value>
</data>
<data name="ReceivedPage_Title" xml:space="preserve">
<value>Received Messages</value>
</data>
</root> </root>
\ No newline at end of file
...@@ -221,9 +221,6 @@ ...@@ -221,9 +221,6 @@
<data name="HomePage_Title" xml:space="preserve"> <data name="HomePage_Title" xml:space="preserve">
<value>仪表盘</value> <value>仪表盘</value>
</data> </data>
<data name="JobDetailsPage_State" xml:space="preserve">
<value>状态</value>
</data>
<data name="LayoutPage_Back" xml:space="preserve"> <data name="LayoutPage_Back" xml:space="preserve">
<value>返回应用</value> <value>返回应用</value>
</data> </data>
...@@ -314,25 +311,16 @@ ...@@ -314,25 +311,16 @@
<data name="ServersPage_Title" xml:space="preserve"> <data name="ServersPage_Title" xml:space="preserve">
<value>服务器</value> <value>服务器</value>
</data> </data>
<data name="SucceededMessagesPage_Title" xml:space="preserve"> <data name="PublishedMessagesPage_Title" xml:space="preserve">
<value>已发送消息</value> <value>发送出的消息</value>
</data>
<data name="JobsSidebarMenu_Awaiting" xml:space="preserve">
<value>等待中</value>
</data>
<data name="JobsSidebarMenu_Deleted" xml:space="preserve">
<value>删除</value>
</data> </data>
<data name="JobsSidebarMenu_Failed" xml:space="preserve"> <data name="SidebarMenu_Failed" xml:space="preserve">
<value>失败</value> <value>失败</value>
</data> </data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve"> <data name="SidebarMenu_Processing" xml:space="preserve">
<value>执行中</value> <value>执行中</value>
</data> </data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve"> <data name="SidebarMenu_Succeeded" xml:space="preserve">
<value>计划</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<value>完成</value> <value>完成</value>
</data> </data>
<data name="NavigationMenu_Published" xml:space="preserve"> <data name="NavigationMenu_Published" xml:space="preserve">
...@@ -359,9 +347,6 @@ ...@@ -359,9 +347,6 @@
<data name="Common_NoState" xml:space="preserve"> <data name="Common_NoState" xml:space="preserve">
<value>No state</value> <value>No state</value>
</data> </data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve"> <data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value> <value>Active Connections</value>
</data> </data>
...@@ -449,10 +434,22 @@ ...@@ -449,10 +434,22 @@
<data name="MessagesPage_Table_Retries" xml:space="preserve"> <data name="MessagesPage_Table_Retries" xml:space="preserve">
<value>重试次数</value> <value>重试次数</value>
</data> </data>
<data name="PublishedPage_NoMessages" xml:space="preserve"> <data name="MesssagesPage_NoMessages" xml:space="preserve">
<value>没有消息</value> <value>没有消息</value>
</data> </data>
<data name="PublishedPage_Title" xml:space="preserve"> <data name="PublishedPage_Title" xml:space="preserve">
<value>已发送消息</value> <value>已发送消息</value>
</data> </data>
<data name="MessagesPage_Query_MessageGroup" xml:space="preserve">
<value>消息分组</value>
</data>
<data name="MessagesPage_Table_Group" xml:space="preserve">
<value>分组</value>
</data>
<data name="ReceivedMessagesPage_Title" xml:space="preserve">
<value>接收的消息</value>
</data>
<data name="ReceivedPage_Title" xml:space="preserve">
<value>已接收消息</value>
</data>
</root> </root>
\ No newline at end of file
...@@ -77,13 +77,18 @@ namespace DotNetCore.CAP.Dashboard ...@@ -77,13 +77,18 @@ namespace DotNetCore.CAP.Dashboard
#region Razor pages and commands #region Razor pages and commands
Routes.AddJsonResult("/publishd/message/(?<Id>.+)", x => Routes.AddJsonResult("/published/message/(?<Id>.+)", x =>
{ {
var id = int.Parse(x.UriMatch.Groups["Id"].Value); var id = int.Parse(x.UriMatch.Groups["Id"].Value);
var message = x.Storage.GetConnection().GetPublishedMessageAsync(id).GetAwaiter().GetResult(); var message = x.Storage.GetConnection().GetPublishedMessageAsync(id).GetAwaiter().GetResult();
return message; return message.Content;
});
Routes.AddJsonResult("/received/message/(?<Id>.+)", x =>
{
var id = int.Parse(x.UriMatch.Groups["Id"].Value);
var message = x.Storage.GetConnection().GetReceivedMessageAsync(id).GetAwaiter().GetResult();
return message.Content;
}); });
//Routes.AddRazorPage("/jobs/enqueued", x => new QueuesPage()); //Routes.AddRazorPage("/jobs/enqueued", x => new QueuesPage());
//Routes.AddRazorPage( //Routes.AddRazorPage(
// "/jobs/enqueued/fetched/(?<Queue>.+)", // "/jobs/enqueued/fetched/(?<Queue>.+)",
...@@ -115,14 +120,16 @@ namespace DotNetCore.CAP.Dashboard ...@@ -115,14 +120,16 @@ namespace DotNetCore.CAP.Dashboard
// "/jobs/scheduled/delete", // "/jobs/scheduled/delete",
// (client, jobId) => client.ChangeState(jobId, CreateDeletedState(), ScheduledState.StateName)); // (client, jobId) => client.ChangeState(jobId, CreateDeletedState(), ScheduledState.StateName));
Routes.AddPublishBatchCommand(
"/published/requeue",
(client, messageId) => client.Storage.GetConnection().ChangePublishedState(messageId, new ScheduledState()));
Routes.AddPublishBatchCommand(
"/received/requeue",
(client, messageId) => client.Storage.GetConnection().ChangeReceivedState(messageId, new ScheduledState()));
Routes.AddRazorPage( Routes.AddRazorPage(
"/published/(?<StatusName>.+)", "/published/(?<StatusName>.+)",
x => new PublishedPage(x.Groups["StatusName"].Value)); x => new PublishedPage(x.Groups["StatusName"].Value));
//Routes.AddPublishBatchCommand(
// "/published/succeeded/requeue",
// (client, jobId) => client.ChangeState(jobId, CreateEnqueuedState(), SucceededState.StateName));
Routes.AddRazorPage( Routes.AddRazorPage(
"/received/(?<StatusName>.+)", "/received/(?<StatusName>.+)",
x => new ReceivedPage(x.Groups["StatusName"].Value)); x => new ReceivedPage(x.Groups["StatusName"].Value));
......
...@@ -10,17 +10,26 @@ namespace DotNetCore.CAP.Dashboard ...@@ -10,17 +10,26 @@ namespace DotNetCore.CAP.Dashboard
internal class JsonDispatcher : IDashboardDispatcher internal class JsonDispatcher : IDashboardDispatcher
{ {
private readonly Func<DashboardContext, object> _command; private readonly Func<DashboardContext, object> _command;
private readonly Func<DashboardContext, string> _jsonCommand;
public JsonDispatcher(Func<DashboardContext, object> command) public JsonDispatcher(Func<DashboardContext, object> command)
{ {
_command = command; _command = command;
} }
public JsonDispatcher(Func<DashboardContext, string> command)
{
_jsonCommand = command;
}
public async Task Dispatch(DashboardContext context) public async Task Dispatch(DashboardContext context)
{ {
var request = context.Request; var request = context.Request;
var response = context.Response; var response = context.Response;
string serialized = null;
if (_command != null)
{
object result = _command(context); object result = _command(context);
var settings = new JsonSerializerSettings var settings = new JsonSerializerSettings
...@@ -28,7 +37,13 @@ namespace DotNetCore.CAP.Dashboard ...@@ -28,7 +37,13 @@ namespace DotNetCore.CAP.Dashboard
ContractResolver = new CamelCasePropertyNamesContractResolver(), ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[] { new StringEnumConverter { CamelCaseText = true } } Converters = new JsonConverter[] { new StringEnumConverter { CamelCaseText = true } }
}; };
var serialized = JsonConvert.SerializeObject(result, settings); serialized = JsonConvert.SerializeObject(result, settings);
}
if (_jsonCommand != null)
{
serialized = _jsonCommand(context);
}
context.Response.ContentType = "application/json"; context.Response.ContentType = "application/json";
await context.Response.WriteAsync(serialized); await context.Response.WriteAsync(serialized);
......
...@@ -14,19 +14,19 @@ namespace DotNetCore.CAP.Dashboard ...@@ -14,19 +14,19 @@ namespace DotNetCore.CAP.Dashboard
static MessagesSidebarMenu() static MessagesSidebarMenu()
{ {
PublishedItems.Add(page => new MenuItem(Strings.MessagesSidebarMenu_Succeeded, page.Url.To("/published/succeeded")) PublishedItems.Add(page => new MenuItem(Strings.SidebarMenu_Succeeded, page.Url.To("/published/succeeded"))
{ {
Active = page.RequestPath.StartsWith("/published/succeeded"), Active = page.RequestPath.StartsWith("/published/succeeded"),
Metric = DashboardMetrics.PublishedSucceededCount Metric = DashboardMetrics.PublishedSucceededCount
}); });
PublishedItems.Add(page => new MenuItem(Strings.MessagesSidebarMenu_Processing, page.Url.To("/published/processing")) PublishedItems.Add(page => new MenuItem(Strings.SidebarMenu_Processing, page.Url.To("/published/processing"))
{ {
Active = page.RequestPath.StartsWith("/published/processing"), Active = page.RequestPath.StartsWith("/published/processing"),
Metric = DashboardMetrics.PublishedProcessingCount Metric = DashboardMetrics.PublishedProcessingCount
}); });
PublishedItems.Add(page => new MenuItem(Strings.MessagesSidebarMenu_Failed, page.Url.To("/published/failed")) PublishedItems.Add(page => new MenuItem(Strings.SidebarMenu_Failed, page.Url.To("/published/failed"))
{ {
Active = page.RequestPath.StartsWith("/published/failed"), Active = page.RequestPath.StartsWith("/published/failed"),
Metric = DashboardMetrics.PublishedFailedCount Metric = DashboardMetrics.PublishedFailedCount
...@@ -34,19 +34,19 @@ namespace DotNetCore.CAP.Dashboard ...@@ -34,19 +34,19 @@ namespace DotNetCore.CAP.Dashboard
//=======================================ReceivedItems============================= //=======================================ReceivedItems=============================
ReceivedItems.Add(page => new MenuItem(Strings.MessagesSidebarMenu_Succeeded, page.Url.To("/received/succeeded")) ReceivedItems.Add(page => new MenuItem(Strings.SidebarMenu_Succeeded, page.Url.To("/received/succeeded"))
{ {
Active = page.RequestPath.StartsWith("/received/succeeded"), Active = page.RequestPath.StartsWith("/received/succeeded"),
Metric = DashboardMetrics.ReceivedSucceededCount Metric = DashboardMetrics.ReceivedSucceededCount
}); });
ReceivedItems.Add(page => new MenuItem(Strings.MessagesSidebarMenu_Processing, page.Url.To("/received/processing")) ReceivedItems.Add(page => new MenuItem(Strings.SidebarMenu_Processing, page.Url.To("/received/processing"))
{ {
Active = page.RequestPath.StartsWith("/received/processing"), Active = page.RequestPath.StartsWith("/received/processing"),
Metric = DashboardMetrics.ReceivedProcessingCount Metric = DashboardMetrics.ReceivedProcessingCount
}); });
ReceivedItems.Add(page => new MenuItem(Strings.MessagesSidebarMenu_Failed, page.Url.To("/received/failed")) ReceivedItems.Add(page => new MenuItem(Strings.SidebarMenu_Failed, page.Url.To("/received/failed"))
{ {
Active = page.RequestPath.StartsWith("/received/failed"), Active = page.RequestPath.StartsWith("/received/failed"),
Metric = DashboardMetrics.ReceivedFailedCount Metric = DashboardMetrics.ReceivedFailedCount
......
...@@ -9,6 +9,7 @@ namespace DotNetCore.CAP.Dashboard.Monitoring ...@@ -9,6 +9,7 @@ namespace DotNetCore.CAP.Dashboard.Monitoring
{ {
public MessageType MessageType { get; set; } public MessageType MessageType { get; set; }
public string Group { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Content { get; set; } public string Content { get; set; }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
@using DotNetCore.CAP.Dashboard.Resources @using DotNetCore.CAP.Dashboard.Resources
@inherits RazorPage @inherits RazorPage
@{ @{
Layout = new LayoutPage(Strings.SucceededMessagesPage_Title); Layout = new LayoutPage(Strings.PublishedMessagesPage_Title);
int from, perPage; int from, perPage;
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
@if (succeededMessages.Count == 0) @if (succeededMessages.Count == 0)
{ {
<div class="alert alert-info"> <div class="alert alert-info">
@Strings.PublishedPage_NoMessages @Strings.MessagesPage_NoMessages
</div> </div>
} }
else else
......
...@@ -73,7 +73,7 @@ WriteLiteral("\r\n"); ...@@ -73,7 +73,7 @@ WriteLiteral("\r\n");
#line 9 "..\..\Dashboard\Pages\PublishedPage.cshtml" #line 9 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Layout = new LayoutPage(Strings.SucceededMessagesPage_Title); Layout = new LayoutPage(Strings.PublishedMessagesPage_Title);
int from, perPage; int from, perPage;
...@@ -130,8 +130,17 @@ WriteLiteral("</h1>\r\n\r\n"); ...@@ -130,8 +130,17 @@ WriteLiteral("</h1>\r\n\r\n");
#line default #line default
#line hidden #line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n 没有消息\r\n </d" + WriteLiteral(" <div class=\"alert alert-info\">\r\n ");
"iv>\r\n");
#line 43 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Write(Strings.MessagesPage_NoMessages);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
......
...@@ -7,12 +7,13 @@ ...@@ -7,12 +7,13 @@
@using DotNetCore.CAP.Dashboard.Resources @using DotNetCore.CAP.Dashboard.Resources
@inherits RazorPage @inherits RazorPage
@{ @{
Layout = new LayoutPage(Strings.SucceededMessagesPage_Title); Layout = new LayoutPage(Strings.ReceivedMessagesPage_Title);
int from, perPage; int from, perPage;
int.TryParse(Query("from"), out from); int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage); int.TryParse(Query("count"), out perPage);
string group = Query("group");
string name = Query("name"); string name = Query("name");
string content = Query("content"); string content = Query("content");
...@@ -21,6 +22,7 @@ ...@@ -21,6 +22,7 @@
var queryDto = new MessageQueryDto var queryDto = new MessageQueryDto
{ {
MessageType = MessageType.Subscribe, MessageType = MessageType.Subscribe,
Group =group,
Name = name, Name = name,
Content = content, Content = content,
StatusName = StatusName, StatusName = StatusName,
...@@ -35,12 +37,12 @@ ...@@ -35,12 +37,12 @@
@Html.JobsSidebar(MessageType.Subscribe) @Html.JobsSidebar(MessageType.Subscribe)
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
<h1 class="page-header">@Strings.SucceededMessagesPage_Title</h1> <h1 class="page-header">@Strings.ReceivedPage_Title</h1>
@if (succeededMessages.Count == 0) @if (succeededMessages.Count == 0)
{ {
<div class="alert alert-info"> <div class="alert alert-info">
@Strings.SucceededJobsPage_NoJobs @Strings.MessagesPage_NoMessages
</div> </div>
} }
else else
...@@ -48,14 +50,17 @@ ...@@ -48,14 +50,17 @@
<div class="js-jobs-list"> <div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top"> <div class="btn-toolbar btn-toolbar-top">
<form class="row"> <form class="row">
<span class="col-md-2">
<input type="text" class="form-control" name="name" value="@Query("group")" placeholder="@Strings.MessagesPage_Query_MessageGroup" />
</span>
<span class="col-md-3"> <span class="col-md-3">
<input type="text" class="form-control" name="name" value="@Query("name")" placeholder="消息名称" /> <input type="text" class="form-control" name="name" value="@Query("name")" placeholder="@Strings.MessagesPage_Query_MessageName" />
</span> </span>
<div class="col-md-5"> <div class="col-md-5">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" name="content" value="@Query("content")" placeholder="消息内容" /> <input type="text" class="form-control" name="content" value="@Query("content")" placeholder="@Strings.MessagesPage_Query_MessageBody" />
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-info">查找</button> <button class="btn btn-info">@Strings.MessagesPage_Query_Button</button>
</span> </span>
</div> </div>
</div> </div>
...@@ -80,10 +85,11 @@ ...@@ -80,10 +85,11 @@
<th style="width:60px;"> <th style="width:60px;">
<input type="checkbox" class="js-jobs-list-select-all" /> <input type="checkbox" class="js-jobs-list-select-all" />
</th> </th>
<th>名称</th> <th>@Strings.MessagesPage_Table_Code</th>
<th>内容</th> <th>@Strings.MessagesPage_Table_Group</th>
<th class="min-width">重试次数</th> <th>@Strings.MessagesPage_Table_Name</th>
<th class="min-width align-right">过期时间</th> <th class="min-width">@Strings.MessagesPage_Table_Retries</th>
<th class="align-right">@Strings.MessagesPage_Table_ExpiresAt</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
...@@ -91,13 +97,16 @@ ...@@ -91,13 +97,16 @@
{ {
<tr class="js-jobs-list-row hover"> <tr class="js-jobs-list-row hover">
<td> <td>
<input type="checkbox" class="js-jobs-list-checkbox" name="jobs[]" value="@message.Id" /> <input type="checkbox" class="js-jobs-list-checkbox" name="messages[]" value="@message.Id" />
</td> </td>
<td class="word-break"> <td class="word-break">
@message.Name <a href="javascript:;" data-url='@(Url.To("/received/message/")+message.Id)' class="openModal">#@message.Id</a>
</td>
<td>
@message.Group
</td> </td>
<td> <td>
@message.Content @message.Name
</td> </td>
<td> <td>
@message.Retries @message.Retries
...@@ -108,6 +117,7 @@ ...@@ -108,6 +117,7 @@
@Html.RelativeTime(message.ExpiresAt.Value) @Html.RelativeTime(message.ExpiresAt.Value)
} }
</td> </td>
</tr> </tr>
} }
</tbody> </tbody>
...@@ -115,6 +125,27 @@ ...@@ -115,6 +125,27 @@
</div> </div>
@Html.Paginator(pager) @Html.Paginator(pager)
</div> </div>
<div>
<div class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Message Content</h4>
</div>
<div id="jsonContent" style="max-height:500px;overflow-y:auto;" class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-primary" id="formatBtn" onclick="">@Strings.MessagesPage_Modal_Format</button>
<button type="button" class="btn btn-sm btn-primary" id="rawBtn" onclick="">@Strings.MessagesPage_Modal_Raw</button>
<button type="button" class="btn btn-sm btn-primary" id="expandBtn" onclick="">@Strings.MessagesPage_Modal_Expand</button>
<button type="button" class="btn btn-sm btn-primary" id="collapseBtn" onclick="">@Strings.MessagesPage_Model_Collaspse</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</div>
} }
</div> </div>
</div> </div>
\ No newline at end of file
...@@ -41,10 +41,22 @@ namespace DotNetCore.CAP.Dashboard ...@@ -41,10 +41,22 @@ namespace DotNetCore.CAP.Dashboard
routes.Add(pathTemplate, new JsonDispatcher(func)); routes.Add(pathTemplate, new JsonDispatcher(func));
} }
public static void AddJsonResult(
this RouteCollection routes,
string pathTemplate,
Func<DashboardContext, string> Jsonfunc)
{
if (routes == null) throw new ArgumentNullException(nameof(routes));
if (pathTemplate == null) throw new ArgumentNullException(nameof(pathTemplate));
if (Jsonfunc == null) throw new ArgumentNullException(nameof(Jsonfunc));
routes.Add(pathTemplate, new JsonDispatcher(Jsonfunc));
}
public static void AddPublishBatchCommand( public static void AddPublishBatchCommand(
this RouteCollection routes, this RouteCollection routes,
string pathTemplate, string pathTemplate,
Action<DashboardContext, string> command) Action<DashboardContext, int> command)
{ {
if (routes == null) throw new ArgumentNullException(nameof(routes)); if (routes == null) throw new ArgumentNullException(nameof(routes));
if (pathTemplate == null) throw new ArgumentNullException(nameof(pathTemplate)); if (pathTemplate == null) throw new ArgumentNullException(nameof(pathTemplate));
......
...@@ -60,4 +60,20 @@ ...@@ -60,4 +60,20 @@
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Compile Update="Dashboard\Content\resx\Strings.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Strings.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Dashboard\Content\resx\Strings.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<CustomToolNamespace>DotNetCore.CAP.Dashboard.Resources</CustomToolNamespace>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>
...@@ -2,6 +2,7 @@ using System; ...@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using DotNetCore.CAP.Models; using DotNetCore.CAP.Models;
using DotNetCore.CAP.Processor.States;
namespace DotNetCore.CAP namespace DotNetCore.CAP
{ {
...@@ -64,8 +65,11 @@ namespace DotNetCore.CAP ...@@ -64,8 +65,11 @@ namespace DotNetCore.CAP
/// </summary> /// </summary>
IStorageTransaction CreateTransaction(); IStorageTransaction CreateTransaction();
//------------------------------------------- //-------------------------------------------
bool ChangePublishedState(int messageId, IState state);
bool ChangeReceivedState(int messageId, IState state);
long GetSetCount(string key); long GetSetCount(string key);
List<string> GetRangeFromSet(string key, int startingFrom, int endingAt); List<string> GetRangeFromSet(string key, int startingFrom, int endingAt);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment