using System.Text;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using StackExchange.Profiling;
using StackExchange.Profiling.Storage;
namespace KH.WMS.Core.Monitoring.MiniProfiler;
///
/// MiniProfiler 配置
///
public static class MiniProfilerSetup
{
///
/// 添加 MiniProfiler 服务
///
public static IServiceCollection AddMiniProfilerCustom(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment)
{
var miniProfilerSettings = configuration.GetSection("MiniProfiler").Get();
miniProfilerSettings ??= new MiniProfilerSettings();
// 调用官方 MiniProfiler 的扩展方法
services.AddMiniProfiler(options =>
{
options.RouteBasePath = miniProfilerSettings.RouteBasePath;
options.PopupRenderPosition = RenderPosition.BottomLeft;
options.PopupShowTimeWithChildren = true;
// 生产环境配置
if (!miniProfilerSettings.EnableInProduction && !environment.IsDevelopment())
{
options.ShouldProfile = _ => false;
}
else
{
// 开发环境或配置为启用时,分析所有请求
options.ShouldProfile = _ => true;
}
// 数据库优化
options.TrackConnectionOpenClose = miniProfilerSettings.TrackConnectionOpenClose;
});
return services;
}
///
/// 使用 MiniProfiler 中间件
///
public static IApplicationBuilder UseMiniProfilerCustom(this IApplicationBuilder app)
{
app.UseMiniProfiler();
return app;
}
}
///
/// MiniProfiler 配置选项
///
public class MiniProfilerSettings
{
///
/// 路由基础路径
///
public string RouteBasePath { get; set; } = "/profiler";
///
/// 是否在生产环境启用
///
public bool EnableInProduction { get; set; } = false;
///
/// 是否跟踪数据库连接
///
public bool TrackConnectionOpenClose { get; set; } = true;
///
/// 堆栈跟踪长度
///
public int StackTraceLength { get; set; } = 5;
}