Commit a82790c1 authored by yangxiaodong's avatar yangxiaodong

add SubscriberPage

parent 9166f2b8
......@@ -18,12 +18,16 @@ namespace DotNetCore.CAP.Dashboard
}
public IStorage Storage { get; }
public DashboardOptions Options { get; }
public Match UriMatch { get; set; }
public DashboardRequest Request { get; protected set; }
public DashboardResponse Response { get; protected set; }
public IServiceProvider RequestServices { get; protected set; }
}
public sealed class CapDashboardContext : DashboardContext
......@@ -39,6 +43,7 @@ namespace DotNetCore.CAP.Dashboard
HttpContext = httpContext;
Request = new CapDashboardRequest(httpContext);
Response = new CapDashboardResponse(httpContext);
RequestServices = httpContext.RequestServices;
}
public HttpContext HttpContext { get; }
......
......@@ -25,7 +25,7 @@ namespace DotNetCore.CAP.Dashboard
public CapDashboardRequest(HttpContext context)
{
if (context == null) throw new ArgumentNullException(nameof(context));
_context = context;
_context = context;
}
public override string Method => _context.Request.Method;
......@@ -34,7 +34,6 @@ namespace DotNetCore.CAP.Dashboard
public override string LocalIpAddress => _context.Connection.LocalIpAddress.ToString();
public override string RemoteIpAddress => _context.Connection.RemoteIpAddress.ToString();
public override string GetQuery(string key) => _context.Request.Query[key];
public override async Task<IList<string>> GetFormValuesAsync(string key)
{
var form = await _context.Request.ReadFormAsync();
......
......@@ -133,7 +133,7 @@ namespace DotNetCore.CAP.Dashboard
Routes.AddRazorPage(
"/received/(?<StatusName>.+)",
x => new ReceivedPage(x.Groups["StatusName"].Value));
Routes.AddRazorPage("/subscribers", x => new SubscriberPage());
//Routes.AddRazorPage("/jobs/failed", x => new FailedJobsPage());
//Routes.AddClientBatchCommand(
......
......@@ -218,6 +218,73 @@ namespace DotNetCore.CAP.Dashboard
$"<span class=\"labe label-defult text-uppercase\" title=\"{serverId}\">{shortenedId}</span>");
}
public NonEscapedString MethodEscaped(MethodInfo method)
{
var outputString = string.Empty;
var @public = "<span style=\"color:blue\">public </span>";
var key = Hignlight(method.ReturnType);
var name = method.Name;
string paramType = null;
string paramName = null;
string paramString = string.Empty;
var @params = method.GetParameters();
if (@params.Length == 1)
{
var firstParam = @params[0];
var firstParamType = firstParam.ParameterType;
paramType = Hignlight(firstParamType);
paramName = firstParam.Name;
}
if (paramType == null)
{
paramString = "(){ }";
}
else
{
paramString = $"({paramType} {paramName}){{ }}";
}
outputString = @public + key + name + paramString;
return new NonEscapedString(outputString);
}
public string Hignlight(Type type)
{
if(type.Name == "Void")
{
return HighligthKey(type.Name.ToLower());
}
if (Helper.IsComplexType(type))
{
return HighligthClass(type.Name);
}
if (type.IsPrimitive || type.Equals(typeof(string)) || type.Equals(typeof(decimal)))
{
return HighligthKey(type.Name.ToLower());
}
else
{
return HighligthClass(type.Name);
}
}
private string HighligthClass(string key)
{
return $"<span style=\"color:#07c1be\">{key} </span>";
}
private string HighligthKey(string key)
{
return $"<span style=\"color:blue\">{key} </span>";
}
//private static readonly StackTraceHtmlFragments StackTraceHtmlFragments = new StackTraceHtmlFragments
//{
// BeforeFrame = "<span class='st-frame'>" , AfterFrame = "</span>",
......
......@@ -7,6 +7,6 @@ namespace DotNetCore.CAP.Dashboard
{
public interface IDashboardDispatcher
{
Task Dispatch( DashboardContext context);
Task Dispatch(DashboardContext context);
}
}
......@@ -6,8 +6,6 @@ namespace DotNetCore.CAP.Dashboard
{
public interface IMonitoringApi
{
IList<SubscriberDto> Subscribers();
StatisticsDto GetStatistics();
IList<MessageDto> Messages(MessageQueryDto queryDto);
......
@* Generator: Template TypeVisibility: Internal GeneratePrettyNames: True *@
@using System
@using System.Linq
@using DotNetCore.CAP.Internal
@using DotNetCore.CAP.Dashboard
@using DotNetCore.CAP.Dashboard.Pages
@using DotNetCore.CAP.Dashboard.Resources
@inherits RazorPage
@{
Layout = new LayoutPage(Strings.ServersPage_Title);
Layout = new LayoutPage(Strings.SubscribersPage_Title);
var monitor = Storage.GetMonitoringApi();
var subscribers = monitor.Subscribers();
var cache = RequestServices.GetService(typeof(MethodMatcherCache)) as MethodMatcherCache;
var subscribers = cache.GetCandidatesMethodsOfGroupNameGrouped();
}
<div class="row">
......@@ -28,16 +27,30 @@
<table class="table">
<thead>
<tr>
<th>名称</th>
<th>方法</th>
<th width="20%">分组</th>
<th>
<table class="table subscribe-table margin-bottom-zero"><tr><td width="40%">名称</td><td>方法</td></tr></table>
</th>
</tr>
</thead>
<tbody>
@foreach (var subscriber in subscribers)
{
<tr>
<td>@subscriber.Name</td>
<td>@subscriber.Method</td>
<td style="vertical-align:middle;font-weight:bold;">@subscriber.Key</td>
<td>
<table class="table subscribe-table table-condensed margin-bottom-zero">
@foreach (var column in subscriber.Value)
{
<tr>
<td width="40%">@column.Attribute.Name</td>
<td><span style="color:#00bcd4">@column.ImplTypeInfo.Name</span>:
@Html.MethodEscaped(column.MethodInfo)
</td>
</tr>
}
</table>
</td>
</tr>
}
</tbody>
......
#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;
using System.Linq;
using System.Text;
#line 3 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
using DotNetCore.CAP.Dashboard;
#line default
#line hidden
#line 4 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
using DotNetCore.CAP.Dashboard.Pages;
#line default
#line hidden
#line 5 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
using DotNetCore.CAP.Dashboard.Resources;
#line default
#line hidden
#line 2 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
using DotNetCore.CAP.Internal;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
internal partial class SubscriberPage : RazorPage
{
#line hidden
public override void Execute()
{
WriteLiteral("\r\n");
#line 7 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
Layout = new LayoutPage(Strings.SubscribersPage_Title);
var cache = RequestServices.GetService(typeof(MethodMatcherCache)) as MethodMatcherCache;
var subscribers = cache.GetCandidatesMethodsOfGroupNameGrouped();
#line default
#line hidden
WriteLiteral("\r\n<div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h1 class=\"page-header\"" +
">订阅列表</h1>\r\n\r\n");
#line 18 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
if (subscribers.Count == 0)
{
#line default
#line hidden
WriteLiteral(" <div class=\"alert alert-warning\">\r\n ");
#line 21 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
Write(Strings.ServersPage_NoServers);
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n");
#line 23 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
}
else
{
#line default
#line hidden
WriteLiteral(@" <div class=""table-responsive"">
<table class=""table"">
<thead>
<tr>
<th width=""20%"">分组</th>
<th>
<table class=""table subscribe-table margin-bottom-zero""><tr><td width=""40%"">名称</td><td>方法</td></tr></table>
</th>
</tr>
</thead>
<tbody>
");
#line 37 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
foreach (var subscriber in subscribers)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n <td style=\"vert" +
"ical-align:middle;font-weight:bold;\">");
#line 40 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
Write(subscriber.Key);
#line default
#line hidden
WriteLiteral("</td>\r\n <td>\r\n " +
"<table class=\"table subscribe-table table-condensed margin-bottom-zero\">\r\n");
#line 43 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
foreach (var column in subscriber.Value)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n " +
" <td width=\"40%\">");
#line 46 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
Write(column.Attribute.Name);
#line default
#line hidden
WriteLiteral("</td>\r\n <td><span style=\"color:#00" +
"bcd4\">");
#line 47 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
Write(column.ImplTypeInfo.Name);
#line default
#line hidden
WriteLiteral("</span>: \r\n ");
#line 48 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
Write(Html.MethodEscaped(column.MethodInfo));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n " +
" </tr>\r\n");
#line 51 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </table>\r\n </t" +
"d>\r\n </tr>\r\n");
#line 55 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n");
#line 59 "..\..\Dashboard\Pages\SubscriberPage.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n</div>");
}
}
}
#pragma warning restore 1591
......@@ -41,6 +41,8 @@ namespace DotNetCore.CAP.Dashboard
internal DashboardRequest Request { private get; set; }
internal DashboardResponse Response { private get; set; }
internal IServiceProvider RequestServices { get; private set; }
public string RequestPath => Request.Path;
/// <exclude />
......@@ -65,6 +67,7 @@ namespace DotNetCore.CAP.Dashboard
AppPath = parentPage.AppPath;
StatsPollingInterval = parentPage.StatsPollingInterval;
Url = parentPage.Url;
RequestServices = parentPage.RequestServices;
GenerationTime = parentPage.GenerationTime;
_statisticsLazy = parentPage._statisticsLazy;
......@@ -74,6 +77,7 @@ namespace DotNetCore.CAP.Dashboard
{
Request = context.Request;
Response = context.Response;
RequestServices = context.RequestServices;
Storage = context.Storage;
AppPath = context.Options.AppPath;
......
......@@ -123,6 +123,9 @@
<Compile Update="Dashboard\Pages\HomePage.cs">
<DependentUpon>HomePage.cshtml</DependentUpon>
</Compile>
<Compile Update="Dashboard\Pages\SubscriberPage.generated.cs">
<DependentUpon>SubscriberPage.cshtml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Dashboard\Content\resx\Strings.resx">
......
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