Commit e9aaf305 authored by yangxiaodong's avatar yangxiaodong

update dashboard.

parent 675e3c19
......@@ -6,25 +6,26 @@ namespace DotNetCore.CAP.Dashboard
{
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;
}
public async Task Dispatch(DashboardContext context)
{
var jobIds = await context.Request.GetFormValuesAsync("jobs[]");
if (jobIds.Count == 0)
var messageIds = await context.Request.GetFormValuesAsync("messages[]");
if (messageIds.Count == 0)
{
context.Response.StatusCode = 422;
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;
......
......@@ -468,7 +468,7 @@
var $this = $(this);
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();
}).get();
......@@ -478,7 +478,7 @@
$this.button('loading');
}, 100);
$.post($this.data('url'), { 'jobs[]': jobs }, function () {
$.post($this.data('url'), { 'messages[]': jobs }, function () {
clearTimeout(loadingDelay);
window.location.reload();
});
......@@ -498,3 +498,37 @@
$(function () {
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 {
}
}
/// <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>
/// Looks up a localized string similar to Back to site.
/// </summary>
......@@ -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>
/// Looks up a localized string similar to Query.
/// </summary>
......@@ -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>
/// Looks up a localized string similar to Message name.
/// </summary>
......@@ -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>
/// Looks up a localized string similar to Name.
/// </summary>
......@@ -864,11 +828,11 @@ namespace DotNetCore.CAP.Dashboard.Resources {
}
/// <summary>
/// Looks up a localized string similar to No published messages found..
/// Looks up a localized string similar to Published Messages.
/// </summary>
public static string PublishedPage_NoMessages {
public static string PublishedMessagesPage_Title {
get {
return ResourceManager.GetString("PublishedPage_NoMessages", resourceCulture);
return ResourceManager.GetString("PublishedMessagesPage_Title", resourceCulture);
}
}
......@@ -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>
/// Looks up a localized string similar to All is OK – you have no retries..
/// </summary>
......@@ -981,11 +963,29 @@ namespace DotNetCore.CAP.Dashboard.Resources {
}
/// <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>
public static string SucceededMessagesPage_Title {
public static string SidebarMenu_Succeeded {
get {
return ResourceManager.GetString("SucceededMessagesPage_Title", resourceCulture);
return ResourceManager.GetString("SidebarMenu_Succeeded", resourceCulture);
}
}
}
......
......@@ -293,25 +293,16 @@
<data name="ServersPage_Title" xml:space="preserve">
<value>Servers</value>
</data>
<data name="SucceededMessagesPage_Title" xml:space="preserve">
<value>Succeeded Messages</value>
<data name="PublishedMessagesPage_Title" xml:space="preserve">
<value>Published Messages</value>
</data>
<data name="JobsSidebarMenu_Awaiting" 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">
<data name="SidebarMenu_Failed" xml:space="preserve">
<value>Failed</value>
</data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve">
<data name="SidebarMenu_Processing" xml:space="preserve">
<value>Processing</value>
</data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve">
<value>Scheduled</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<data name="SidebarMenu_Succeeded" xml:space="preserve">
<value>Succeeded</value>
</data>
<data name="NavigationMenu_Published" xml:space="preserve">
......@@ -338,9 +329,6 @@
<data name="Common_NoState" xml:space="preserve">
<value>No state</value>
</data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value>
</data>
......@@ -428,10 +416,22 @@
<data name="MessagesPage_Table_Retries" xml:space="preserve">
<value>Retries</value>
</data>
<data name="PublishedPage_NoMessages" xml:space="preserve">
<data name="MessagesPage_NoMessages" xml:space="preserve">
<value>No published messages found.</value>
</data>
<data name="PublishedPage_Title" xml:space="preserve">
<value>Published Jobs</value>
</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>
\ No newline at end of file
......@@ -221,9 +221,6 @@
<data name="HomePage_Title" xml:space="preserve">
<value>仪表盘</value>
</data>
<data name="JobDetailsPage_State" xml:space="preserve">
<value>状态</value>
</data>
<data name="LayoutPage_Back" xml:space="preserve">
<value>返回应用</value>
</data>
......@@ -314,25 +311,16 @@
<data name="ServersPage_Title" xml:space="preserve">
<value>服务器</value>
</data>
<data name="SucceededMessagesPage_Title" xml:space="preserve">
<value>已发送消息</value>
</data>
<data name="JobsSidebarMenu_Awaiting" xml:space="preserve">
<value>等待中</value>
</data>
<data name="JobsSidebarMenu_Deleted" xml:space="preserve">
<value>删除</value>
<data name="PublishedMessagesPage_Title" xml:space="preserve">
<value>发送出的消息</value>
</data>
<data name="JobsSidebarMenu_Failed" xml:space="preserve">
<data name="SidebarMenu_Failed" xml:space="preserve">
<value>失败</value>
</data>
<data name="JobsSidebarMenu_Processing" xml:space="preserve">
<data name="SidebarMenu_Processing" xml:space="preserve">
<value>执行中</value>
</data>
<data name="JobsSidebarMenu_Scheduled" xml:space="preserve">
<value>计划</value>
</data>
<data name="JobsSidebarMenu_Succeeded" xml:space="preserve">
<data name="SidebarMenu_Succeeded" xml:space="preserve">
<value>完成</value>
</data>
<data name="NavigationMenu_Published" xml:space="preserve">
......@@ -359,9 +347,6 @@
<data name="Common_NoState" xml:space="preserve">
<value>No state</value>
</data>
<data name="JobsSidebarMenu_Enqueued" xml:space="preserve">
<value>Enqueued</value>
</data>
<data name="Metrics_ActiveConnections" xml:space="preserve">
<value>Active Connections</value>
</data>
......@@ -449,10 +434,22 @@
<data name="MessagesPage_Table_Retries" xml:space="preserve">
<value>重试次数</value>
</data>
<data name="PublishedPage_NoMessages" xml:space="preserve">
<data name="MesssagesPage_NoMessages" xml:space="preserve">
<value>没有消息</value>
</data>
<data name="PublishedPage_Title" xml:space="preserve">
<value>已发送消息</value>
</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>
\ No newline at end of file
......@@ -77,13 +77,18 @@ namespace DotNetCore.CAP.Dashboard
#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 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/fetched/(?<Queue>.+)",
......@@ -115,14 +120,16 @@ namespace DotNetCore.CAP.Dashboard
// "/jobs/scheduled/delete",
// (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(
"/published/(?<StatusName>.+)",
x => new PublishedPage(x.Groups["StatusName"].Value));
//Routes.AddPublishBatchCommand(
// "/published/succeeded/requeue",
// (client, jobId) => client.ChangeState(jobId, CreateEnqueuedState(), SucceededState.StateName));
Routes.AddRazorPage(
"/received/(?<StatusName>.+)",
x => new ReceivedPage(x.Groups["StatusName"].Value));
......
......@@ -10,25 +10,40 @@ namespace DotNetCore.CAP.Dashboard
internal class JsonDispatcher : IDashboardDispatcher
{
private readonly Func<DashboardContext, object> _command;
private readonly Func<DashboardContext, string> _jsonCommand;
public JsonDispatcher(Func<DashboardContext, object> command)
{
_command = command;
}
public JsonDispatcher(Func<DashboardContext, string> command)
{
_jsonCommand = command;
}
public async Task Dispatch(DashboardContext context)
{
var request = context.Request;
var response = context.Response;
object result = _command(context);
var settings = new JsonSerializerSettings
string serialized = null;
if (_command != null)
{
object result = _command(context);
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[] { new StringEnumConverter { CamelCaseText = true } }
};
serialized = JsonConvert.SerializeObject(result, settings);
}
if (_jsonCommand != null)
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[] { new StringEnumConverter { CamelCaseText = true } }
};
var serialized = JsonConvert.SerializeObject(result, settings);
serialized = _jsonCommand(context);
}
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(serialized);
......
......@@ -14,19 +14,19 @@ namespace DotNetCore.CAP.Dashboard
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"),
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"),
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"),
Metric = DashboardMetrics.PublishedFailedCount
......@@ -34,19 +34,19 @@ namespace DotNetCore.CAP.Dashboard
//=======================================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"),
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"),
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"),
Metric = DashboardMetrics.ReceivedFailedCount
......
......@@ -9,6 +9,7 @@ namespace DotNetCore.CAP.Dashboard.Monitoring
{
public MessageType MessageType { get; set; }
public string Group { get; set; }
public string Name { get; set; }
public string Content { get; set; }
......
......@@ -7,7 +7,7 @@
@using DotNetCore.CAP.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.SucceededMessagesPage_Title);
Layout = new LayoutPage(Strings.PublishedMessagesPage_Title);
int from, perPage;
......@@ -40,7 +40,7 @@
@if (succeededMessages.Count == 0)
{
<div class="alert alert-info">
@Strings.PublishedPage_NoMessages
@Strings.MessagesPage_NoMessages
</div>
}
else
......
......@@ -73,7 +73,7 @@ WriteLiteral("\r\n");
#line 9 "..\..\Dashboard\Pages\PublishedPage.cshtml"
Layout = new LayoutPage(Strings.SucceededMessagesPage_Title);
Layout = new LayoutPage(Strings.PublishedMessagesPage_Title);
int from, perPage;
......@@ -130,8 +130,17 @@ WriteLiteral("</h1>\r\n\r\n");
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-info\">\r\n 没有消息\r\n </d" +
"iv>\r\n");
WriteLiteral(" <div class=\"alert alert-info\">\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 @@
@using DotNetCore.CAP.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.SucceededMessagesPage_Title);
Layout = new LayoutPage(Strings.ReceivedMessagesPage_Title);
int from, perPage;
int.TryParse(Query("from"), out from);
int.TryParse(Query("count"), out perPage);
string group = Query("group");
string name = Query("name");
string content = Query("content");
......@@ -21,10 +22,11 @@
var queryDto = new MessageQueryDto
{
MessageType = MessageType.Subscribe,
Group =group,
Name = name,
Content = content,
StatusName = StatusName,
CurrentPage = pager.CurrentPage - 1,
CurrentPage = pager.CurrentPage - 1,
PageSize = pager.RecordsPerPage
};
var succeededMessages = monitor.Messages(queryDto);
......@@ -35,12 +37,12 @@
@Html.JobsSidebar(MessageType.Subscribe)
</div>
<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)
{
<div class="alert alert-info">
@Strings.SucceededJobsPage_NoJobs
@Strings.MessagesPage_NoMessages
</div>
}
else
......@@ -48,14 +50,17 @@
<div class="js-jobs-list">
<div class="btn-toolbar btn-toolbar-top">
<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">
<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>
<div class="col-md-5">
<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">
<button class="btn btn-info">查找</button>
<button class="btn btn-info">@Strings.MessagesPage_Query_Button</button>
</span>
</div>
</div>
......@@ -80,10 +85,11 @@
<th style="width:60px;">
<input type="checkbox" class="js-jobs-list-select-all" />
</th>
<th>名称</th>
<th>内容</th>
<th class="min-width">重试次数</th>
<th class="min-width align-right">过期时间</th>
<th>@Strings.MessagesPage_Table_Code</th>
<th>@Strings.MessagesPage_Table_Group</th>
<th>@Strings.MessagesPage_Table_Name</th>
<th class="min-width">@Strings.MessagesPage_Table_Retries</th>
<th class="align-right">@Strings.MessagesPage_Table_ExpiresAt</th>
</tr>
</thead>
<tbody>
......@@ -91,13 +97,16 @@
{
<tr class="js-jobs-list-row hover">
<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 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>
@message.Content
@message.Name
</td>
<td>
@message.Retries
......@@ -108,6 +117,7 @@
@Html.RelativeTime(message.ExpiresAt.Value)
}
</td>
</tr>
}
</tbody>
......@@ -115,6 +125,27 @@
</div>
@Html.Paginator(pager)
</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>
\ No newline at end of file
......@@ -41,10 +41,22 @@ namespace DotNetCore.CAP.Dashboard
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(
this RouteCollection routes,
string pathTemplate,
Action<DashboardContext, string> command)
Action<DashboardContext, int> command)
{
if (routes == null) throw new ArgumentNullException(nameof(routes));
if (pathTemplate == null) throw new ArgumentNullException(nameof(pathTemplate));
......
......@@ -59,5 +59,21 @@
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
</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>
......@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using DotNetCore.CAP.Models;
using DotNetCore.CAP.Processor.States;
namespace DotNetCore.CAP
{
......@@ -64,8 +65,11 @@ namespace DotNetCore.CAP
/// </summary>
IStorageTransaction CreateTransaction();
//-------------------------------------------
bool ChangePublishedState(int messageId, IState state);
bool ChangeReceivedState(int messageId, IState state);
long GetSetCount(string key);
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