Ver código fonte

网站性能监控

懒得勤快 5 anos atrás
pai
commit
affe223a51

+ 12 - 17
src/Masuit.MyBlogs.Core/Controllers/SystemController.cs

@@ -11,6 +11,7 @@ using Masuit.Tools.Models;
 using Masuit.Tools.Systems;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Internal;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
@@ -36,20 +37,14 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// <returns></returns>
         public ActionResult GetBaseInfo()
         {
-            List<CpuInfo> cpuInfo = SystemInfo.GetCpuInfo();
-            RamInfo ramInfo = SystemInfo.GetRamInfo();
-            string osVersion = SystemInfo.GetOsVersion();
-            var total = new StringBuilder();
-            var free = new StringBuilder();
-            var usage = new StringBuilder();
-            SystemInfo.DiskTotalSpace().ForEach(kv =>
-            {
-                total.Append(kv.Key + kv.Value + " | ");
-            });
-            SystemInfo.DiskFree().ForEach(kv => free.Append(kv.Key + kv.Value + " | "));
-            SystemInfo.DiskUsage().ForEach(kv => usage.Append(kv.Key + kv.Value.ToString("P") + " | "));
-            IList<string> mac = SystemInfo.GetMacAddress();
-            IList<string> ips = SystemInfo.GetIPAddress();
+            var cpuInfo = SystemInfo.GetCpuInfo();
+            var ramInfo = SystemInfo.GetRamInfo();
+            var osVersion = SystemInfo.GetOsVersion();
+            var mac = SystemInfo.GetMacAddress();
+            var ips = SystemInfo.GetIPAddress();
+            var diskTotal = SystemInfo.DiskTotalSpace().Select(kv => kv.Key + kv.Value).Join(" | ");
+            var diskFree = SystemInfo.DiskFree().Select(kv => kv.Key + kv.Value).Join(" | ");
+            var diskUsage = SystemInfo.DiskUsage().Select(kv => kv.Key + kv.Value.ToString("P")).Join(" | ");
             var span = DateTime.Now - CommonHelper.StartupTime;
             var boot = DateTime.Now - SystemInfo.BootTime();
             return Json(new
@@ -61,9 +56,9 @@ namespace Masuit.MyBlogs.Core.Controllers
                 osVersion,
                 diskInfo = new
                 {
-                    total = total.ToString(),
-                    free = free.ToString(),
-                    usage = usage.ToString()
+                    total = diskTotal,
+                    free = diskFree,
+                    usage = diskUsage
                 },
                 netInfo = new
                 {

+ 2 - 0
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -64,6 +64,8 @@
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.0" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.0" />
     <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="3.1.0" />
+    <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.1.0" />
+    <PackageReference Include="MiniProfiler.EntityFrameworkCore" Version="4.1.0" />
     <PackageReference Include="PanGu.HighLight" Version="1.0.0" />
     <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.0" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.0.20" />

+ 19 - 6
src/Masuit.MyBlogs.Core/Startup.cs

@@ -15,6 +15,7 @@ using Masuit.MyBlogs.Core.Hubs;
 using Masuit.MyBlogs.Core.Infrastructure;
 using Masuit.MyBlogs.Core.Models.DTO;
 using Masuit.MyBlogs.Core.Models.ViewModel;
+using Masuit.Tools;
 using Masuit.Tools.AspNetCore.Mime;
 using Masuit.Tools.Core.AspNetCore;
 using Masuit.Tools.Core.Net;
@@ -31,6 +32,7 @@ using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Net.Http.Headers;
+using StackExchange.Profiling;
 using System;
 using System.IO;
 using System.Linq;
@@ -109,6 +111,17 @@ namespace Masuit.MyBlogs.Core
             services.AddHttpClient("", c => c.Timeout = TimeSpan.FromSeconds(30)); //注入HttpClient
             services.AddTransient<ImagebedClient>();
             services.AddHttpContextAccessor(); //注入静态HttpContext
+            services.AddMiniProfiler(options =>
+            {
+                options.RouteBasePath = "/profiler";
+                options.EnableServerTimingHeader = true;
+                options.ResultsAuthorize = req => req.HttpContext.Session.Get<UserInfoOutputDto>(SessionKey.UserInfo)?.IsAdmin ?? false;
+                options.ResultsListAuthorize = options.ResultsAuthorize;
+                options.IgnoredPaths.AddRange("/Assets/", "/Content/", "/fonts/", "/images/", "/ng-views/", "/Scripts/", "/static/", "/template/", "/cloud10.png", "/favicon.ico");
+                options.PopupRenderPosition = RenderPosition.BottomLeft;
+                options.PopupShowTimeWithChildren = true;
+                options.PopupShowTrivial = true;
+            }).AddEntityFramework();
             services.AddMapper().AddAutofac().AddMyMvc().Configure<ForwardedHeadersOptions>(options => // X-Forwarded-For
             {
                 options.ForwardLimit = null;
@@ -157,7 +170,7 @@ namespace Masuit.MyBlogs.Core
                 app.UseHttpsRedirection().UseRewriter(new RewriteOptions().AddRedirectToNonWww()); // URL重写
             }
 
-            app.UseSession().UseCookiePolicy(); //注入Session
+            app.UseSession().UseCookiePolicy().UseMiniProfiler(); //注入Session
             app.UseRequestIntercept(); //启用网站请求拦截
             app.UseStaticHttpContext(); //注入静态HttpContext对象
             app.UseStaticFiles(new StaticFileOptions //静态资源缓存策略
@@ -181,11 +194,11 @@ namespace Masuit.MyBlogs.Core
             app.UseResponseCaching().UseResponseCompression(); //启动Response缓存
             app.UseRouting(); // 放在 UseStaticFiles 之后
             app.UseEndpoints(endpoints =>
-           {
-               endpoints.MapControllers(); // 属性路由
-               endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); // 默认路由
-               endpoints.MapHub<MyHub>("/hubs");
-           });
+            {
+                endpoints.MapControllers(); // 属性路由
+                endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); // 默认路由
+                endpoints.MapHub<MyHub>("/hubs");
+            });
             HangfireJobInit.Start(); //初始化定时任务
         }
 

+ 1 - 32
src/Masuit.MyBlogs.Core/Views/Dashboard/FileManager.cshtml

@@ -31,41 +31,10 @@
     <script src="~/ng-views/filemanager/js/providers/translations.js" asp-append-version="true"></script>
     <script src="~/ng-views/filemanager/js/controllers/main.js" asp-append-version="true"></script>
     <script src="~/ng-views/filemanager/js/controllers/selector-controller.js" asp-append-version="true"></script>
-    @*@RenderSection("Scripts")*@
 </head>
 
 <body class="ng-cloak" data-ng-app="FileManagerApp">
     <angular-filemanager></angular-filemanager>
-    @*<div id="loading">
-            <div class="loading1 animated fadeIn">
-                <div class="loadEffect">
-                    <div>
-                        <span class="bg-warning"></span>
-                    </div>
-                    <div>
-                        <span class="bg-success"></span>
-                    </div>
-                    <div>
-                        <span class="bg-info"></span>
-                    </div>
-                    <div>
-                        <span class="bg-primary"></span>
-                    </div>
-                    <div>
-                        <span class="bg-default"></span>
-                    </div>
-                    <div>
-                        <span class="bg-warning"></span>
-                    </div>
-                    <div>
-                        <span class="bg-info"></span>
-                    </div>
-                    <div>
-                        <span class="bg-success"></span>
-                    </div>
-                </div>
-            </div>
-        </div>*@
 </body>
 </html>
 <script type="text/javascript">
@@ -84,4 +53,4 @@
             })
         });
     }]);
-</script>
+</script>

+ 2 - 1
src/Masuit.MyBlogs.Core/Views/Dashboard/Index.cshtml

@@ -88,4 +88,5 @@
     </section>
     <div data-ng-include="'/ng-views/template/loading.html'"></div>
 </body>
-</html>
+</html>
+<mini-profiler max-traces="5"/>

+ 104 - 103
src/Masuit.MyBlogs.Core/Views/Shared/_Layout.cshtml

@@ -96,156 +96,156 @@
                 @{
                     if (user.IsAdmin)
                     {
-                        <li>
-                            <a asp-action="Index" asp-controller="Dashboard" target="_blank">控制面板</a>
-                        </li>
+                    <li>
+                        <a asp-action="Index" asp-controller="Dashboard" target="_blank">控制面板</a>
+                    </li>
                     }
                     var parent = menus.Where(m => m.ParentId == 0);
                     foreach (var m in parent)
                     {
                         if (m.MenuType == MenuType.SubMenu)
                         {
-                            <li class="has-children">
-                                <a href="#">@m.Name</a>
-                                <ul class="cd-secondary-nav is-hidden">
-                                    <li class="go-back"><a href="#">上级菜单</a></li>
-                                    <li class="see-all"><a asp-controller="Post" asp-action="All">所有 @m.Name</a></li>
-                                    @foreach (MenuOutputDto m2 in menus.Where(s => s.ParentId == m.Id).OrderBy(c => c.Sort))
+                    <li class="has-children">
+                        <a href="#">@m.Name</a>
+                        <ul class="cd-secondary-nav is-hidden">
+                            <li class="go-back"><a href="#">上级菜单</a></li>
+                            <li class="see-all"><a asp-controller="Post" asp-action="All">所有 @m.Name</a></li>
+                            @foreach (MenuOutputDto m2 in menus.Where(s => s.ParentId == m.Id).OrderBy(c => c.Sort))
                                     {
                                         if (menus.Any(mm => mm.ParentId == m2.Id))
                                         {
-                                            <li class="has-children">
-                                                <a href="#">@m2.Name</a>
-                                                <ul class="is-hidden">
-                                                    <li class="go-back"><a href="#">上级菜单</a></li>
-                                                    @foreach (MenuOutputDto m3 in menus.Where(s => s.ParentId == m2.Id).OrderBy(c => c.Sort))
+                            <li class="has-children">
+                                <a href="#">@m2.Name</a>
+                                <ul class="is-hidden">
+                                    <li class="go-back"><a href="#">上级菜单</a></li>
+                                    @foreach (MenuOutputDto m3 in menus.Where(s => s.ParentId == m2.Id).OrderBy(c => c.Sort))
                                                     {
                                                         if (menus.Any(mmm => mmm.ParentId == m3.Id))
                                                         {
-                                                            <li class="has-children">
-                                                                <a href="#">@m3.Name</a>
-                                                                <ul class="is-hidden">
-                                                                    <li class="go-back"><a href="#">上级菜单</a></li>
-                                                                    @foreach (MenuOutputDto m4 in menus.Where(s => s.ParentId == m3.Id).OrderBy(c => c.Sort))
+                                    <li class="has-children">
+                                        <a href="#">@m3.Name</a>
+                                        <ul class="is-hidden">
+                                            <li class="go-back"><a href="#">上级菜单</a></li>
+                                            @foreach (MenuOutputDto m4 in menus.Where(s => s.ParentId == m3.Id).OrderBy(c => c.Sort))
                                                                     {
                                                                         if (m4.NewTab)
                                                                         {
-                                                                            <li><a href="@m4.Url" target="_blank">@m4.Name</a></li>
+                                            <li><a href="@m4.Url" target="_blank">@m4.Name</a></li>
                                                                         }
                                                                         else
                                                                         {
-                                                                            <li><a href="@m4.Url">@m4.Name</a></li>
+                                            <li><a href="@m4.Url">@m4.Name</a></li>
                                                                         }
                                                                     }
-                                                                </ul>
-                                                            </li>
+                                        </ul>
+                                    </li>
                                                         }
                                                         else
                                                         {
                                                             if (m3.NewTab)
                                                             {
-                                                                <li><a href="@m3.Url" target="_blank">@m3.Name</a></li>
+                                    <li><a href="@m3.Url" target="_blank">@m3.Name</a></li>
                                                             }
                                                             else
                                                             {
-                                                                <li><a href="@m3.Url">@m3.Name</a></li>
+                                    <li><a href="@m3.Url">@m3.Name</a></li>
                                                             }
                                                         }
                                                     }
-                                                </ul>
-                                            </li>
+                                </ul>
+                            </li>
                                         }
                                         else
                                         {
                                             if (m2.NewTab)
                                             {
-                                                <li><a href="@m2.Url" target="_blank">@m2.Name</a></li>
+                            <li><a href="@m2.Url" target="_blank">@m2.Name</a></li>
                                             }
                                             else
                                             {
-                                                <li><a href="@m2.Url">@m2.Name</a></li>
+                            <li><a href="@m2.Url">@m2.Name</a></li>
                                             }
                                         }
                                     }
 
-                                </ul>
-                            </li>
+                        </ul>
+                    </li>
                         }
                         else if (m.MenuType == MenuType.GalleryMenu)
                         {
-                            <li class="has-children">
-                                <a href="#">@m.Name</a>
-                                <ul class="cd-nav-gallery is-hidden">
-                                    <li class="go-back"><a href="#">返回主菜单</a></li>
-                                    <li class="see-all"><a asp-controller="Post" asp-action="All">所有 @m.Name</a></li>
-                                    @{
+                    <li class="has-children">
+                        <a href="#">@m.Name</a>
+                        <ul class="cd-nav-gallery is-hidden">
+                            <li class="go-back"><a href="#">返回主菜单</a></li>
+                            <li class="see-all"><a asp-controller="Post" asp-action="All">所有 @m.Name</a></li>
+                            @{
                                         var ms = menus.Where(s => s.ParentId == m.Id);
                                         foreach (var mm in ms)
                                         {
                                             if (mm.NewTab)
                                             {
-                                                <li>
-                                                    <a class="cd-nav-item" href="@mm.Url" target="_blank">
-                                                        <img src="@mm.Icon" alt="@mm.Name">
-                                                        <h3>@mm.Name</h3>
-                                                    </a>
-                                                </li>
+                                <li>
+                                    <a class="cd-nav-item" href="@mm.Url" target="_blank">
+                                        <img src="@mm.Icon" alt="@mm.Name">
+                                        <h3>@mm.Name</h3>
+                                    </a>
+                                </li>
                                             }
                                             else
                                             {
-                                                <li>
-                                                    <a class="cd-nav-item" href="@mm.Url">
-                                                        <img src="@mm.Icon" alt="@mm.Name">
-                                                        <h3>@mm.Name</h3>
-                                                    </a>
-                                                </li>
+                                <li>
+                                    <a class="cd-nav-item" href="@mm.Url">
+                                        <img src="@mm.Icon" alt="@mm.Name">
+                                        <h3>@mm.Name</h3>
+                                    </a>
+                                </li>
                                             }
                                         }
-                                    }
-                                </ul>
-                            </li>
+                            }
+                        </ul>
+                    </li>
                         }
                         else if (m.MenuType == MenuType.IconMenu)
                         {
-                            <li class="has-children">
-                                <a href="#">@m.Name</a>
-                                <ul class="cd-nav-icons is-hidden">
-                                    <li class="go-back"><a href="#">返回主菜单</a></li>
-                                    @{
+                    <li class="has-children">
+                        <a href="#">@m.Name</a>
+                        <ul class="cd-nav-icons is-hidden">
+                            <li class="go-back"><a href="#">返回主菜单</a></li>
+                            @{
                                         var ms = menus.Where(s => s.ParentId == m.Id);
                                         var step = 1;
                                         foreach (var mm in ms)
                                         {
                                             if (mm.NewTab)
                                             {
-                                                <li>
-                                                    <a class="cd-nav-item item-@(step++%8)" href="@mm.Url" target="_blank">
-                                                        <p>@mm.Name</p>
-                                                    </a>
-                                                </li>
+                                <li>
+                                    <a class="cd-nav-item item-@(step++%8)" href="@mm.Url" target="_blank">
+                                        <p>@mm.Name</p>
+                                    </a>
+                                </li>
                                             }
                                             else
                                             {
-                                                <li>
-                                                    <a class="cd-nav-item item-@(step++%8)" href="@mm.Url">
-                                                        <p>@mm.Name</p>
-                                                    </a>
-                                                </li>
+                                <li>
+                                    <a class="cd-nav-item item-@(step++%8)" href="@mm.Url">
+                                        <p>@mm.Name</p>
+                                    </a>
+                                </li>
                                             }
                                         }
-                                    }
-                                </ul>
-                            </li>
+                            }
+                        </ul>
+                    </li>
                         }
                         else
                         {
                             if (m.NewTab)
                             {
-                                <li><a href="@m.Url" target="_blank">@m.Name</a></li>
+                    <li><a href="@m.Url" target="_blank">@m.Name</a></li>
                             }
                             else
                             {
-                                <li><a href="@m.Url">@m.Name</a></li>
+                    <li><a href="@m.Url">@m.Name</a></li>
                             }
                         }
                     }
@@ -269,15 +269,15 @@
                         @{
                             if (user.IsAdmin)
                             {
-                                <a asp-controller="Dashboard" asp-action="FileManager" target="_blank">资源管理器</a>
-                                <span> | </span>
-                                <a href="/taskcenter" target="_blank">任务管理器</a>
-                                <span> | </span>
+                            <a asp-controller="Dashboard" asp-action="FileManager" target="_blank">资源管理器</a>
+                            <span> | </span>
+                            <a href="/taskcenter" target="_blank">任务管理器</a>
+                            <span> | </span>
                             }
                             foreach (LinksOutputDto link in footer.Links)
                             {
-                                <a href="@link.Url" target="_blank">@link.Name</a>
-                                <span> | </span>
+                            <a href="@link.Url" target="_blank">@link.Name</a>
+                            <span> | </span>
                             }
                         }
                         <a asp-controller="Links" asp-action="Index">更多链接>></a>
@@ -298,9 +298,9 @@
                     var num = new Random().StrictNext();
                     for (int i = 0; i < 7; i++)
                     {
-                        <div>
-                            <span class="bg-@colors[(num+i) % 5]"></span>
-                        </div>
+                    <div>
+                        <span class="bg-@colors[(num+i) % 5]"></span>
+                    </div>
                     }
                 }
             </div>
@@ -318,27 +318,27 @@
 @{
     if (Context.Request.Headers["User-Agent"].ToString().Contains(new[] { "IE", "InternetExplorer" }))
     {
-        <script type="text/javascript">
-            var b = localStorage.getItem("browser");
-            if (!b) {
-                layer.open({
-                    title: '浏览器版本提示',
-                    area: '400px;',
-                    closeBtn: false,
-                    content: '亲爱的访客,我们检测到您正在使用IE浏览器,本网站的某些功能或特性可能不会完美地支持IE浏览器,但您可以继续浏览,不过为了更好的体验效果,建议您使用Chrome、Firefox等相同或类似的更高级浏览器访问本网站。珍惜生命,远离IE!',
-                    btn: ['知道了', '哦'],
-                    btn1: function (layero) {
-                        layer.closeAll();
-                        layer.msg('为消灭IE做一点贡献,就是为世界上所有广大的互联网开发者们少加一点儿班做善事!<br/>IE:只要不升级,我还会回来的,我就是这么倔强!', {
-                            icon: 5
-                        });
-                        window.localStorage.setItem("browser", true);
-                    },
-                    btn2: function (index) {
-                    }
-                });
-            }
-        </script>
+    <script type="text/javascript">
+        var b = localStorage.getItem("browser");
+        if (!b) {
+            layer.open({
+                title: '浏览器版本提示',
+                area: '400px;',
+                closeBtn: false,
+                content: '亲爱的访客,我们检测到您正在使用IE浏览器,本网站的某些功能或特性可能不会完美地支持IE浏览器,但您可以继续浏览,不过为了更好的体验效果,建议您使用Chrome、Firefox等相同或类似的更高级浏览器访问本网站。珍惜生命,远离IE!',
+                btn: ['知道了', '哦'],
+                btn1: function (layero) {
+                    layer.closeAll();
+                    layer.msg('为消灭IE做一点贡献,就是为世界上所有广大的互联网开发者们少加一点儿班做善事!<br/>IE:只要不升级,我还会回来的,我就是这么倔强!', {
+                        icon: 5
+                    });
+                    window.localStorage.setItem("browser", true);
+                },
+                btn2: function (index) {
+                }
+            });
+        }
+    </script>
     }
 }
 <script>
@@ -372,4 +372,5 @@
         "hash": "213ad798bc472dc365da3a9d4a9ff115"
     });
     tpwidget("show");
-</script>
+</script>
+<mini-profiler max-traces="5"/>

+ 1 - 0
src/Masuit.MyBlogs.Core/Views/_ViewImports.cshtml

@@ -1 +1,2 @@
 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, MiniProfiler.AspNetCore.Mvc