Files
Api/DouyinApi.Extensions/ServiceExtensions/MiniProfilerSetup.cs
2025-11-04 21:09:16 +08:00

88 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using DouyinApi.Common;
using Microsoft.Extensions.DependencyInjection;
using System;
using DouyinApi.Common.Https;
using DouyinApi.Common.Option;
using DouyinApi.Common.Swagger;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Caching.Memory;
using StackExchange.Profiling;
using StackExchange.Profiling.SqlFormatters;
using StackExchange.Profiling.Storage;
using StackExchange.Redis;
namespace DouyinApi.Extensions
{
/// <summary>
/// MiniProfiler 启动服务
/// </summary>
public static class MiniProfilerSetup
{
public static void AddMiniProfilerSetup(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
if (!AppSettings.app("Startup", "MiniProfiler", "Enabled").ObjToBool()) return;
//使用MiniProfiler
services.AddMiniProfiler(options =>
{
//访问地址路由根目录;默认为:/mini-profiler-resources
//options.RouteBasePath = "/profiler";
//数据缓存时间
//获取redis配置
var redisOptions = App.GetOptions<RedisOptions>();
if (redisOptions.Enable)
options.Storage =
new RedisStorage((ConnectionMultiplexer)App.GetService<IConnectionMultiplexer>());
else
options.Storage = new MemoryCacheStorage(App.GetService<IMemoryCache>(), TimeSpan.FromMinutes(60));
//sql格式化设置
options.SqlFormatter = new InlineFormatter();
//跟踪连接打开关闭
options.TrackConnectionOpenClose = true;
//界面主题颜色方案;默认浅色
options.ColorScheme = ColorScheme.Dark;
//.net core 3.0以上对MVC过滤器进行分析
options.EnableMvcFilterProfiling = true;
//对视图进行分析
options.EnableMvcViewProfiling = true;
//控制访问页面授权,默认所有人都能访问
//options.ResultsAuthorize;
//要控制分析哪些请求,默认说有请求都分析
//options.ShouldProfile
//内部异常处理
//options.OnInternalError = e => MyExceptionLogger(e);
//options.RouteBasePath = "/profiler";
//(options.Storage as MemoryCacheStorage).CacheDuration = TimeSpan.FromMinutes(10);
options.PopupRenderPosition = RenderPosition.Left;
options.PopupShowTimeWithChildren = true;
//只监控api 接口
options.ShouldProfile = ShouldProfile;
// 可以增加权限
// options.ResultsAuthorize = request =>
// {
// if (request.IsLocal()) return true;
//
// var path = request.HttpContext.Request.Path.Value;
// if (path == null || !path.StartsWith(options.RouteBasePath)) return true;
//
// var flag = request.HttpContext.IsSuccessSwagger();
// if (!flag) request.HttpContext.RedirectSwaggerLogin();
// return flag;
// };
}
);
}
private static bool ShouldProfile(HttpRequest request)
{
return request.Path.StartsWithSegments("/api");
}
}
}