/// <summary> /// Add a StartupFilter that provides BeatPulse features. /// </summary> /// <param name="hostBuilder">The <see cref="IWebHostBuilder"/>.</param> /// <param name="setup">Provided delegate to configure BeatPulse options like timeout, path, detailed errors etc.</param> /// <returns>The <see cref="IWebHostBuilder"/> reference with BeatPulse features.</returns> public static IWebHostBuilder UseBeatPulse(this IWebHostBuilder hostBuilder, Action <BeatPulseOptions> setup = null) { hostBuilder.ConfigureServices(defaultServices => { var options = new BeatPulseOptionsConfiguration(); var configuration = defaultServices.BuildServiceProvider().GetRequiredService <IConfiguration>(); configuration.Bind(BeatPulseKeys.BEATPULSE_OPTIONS_SETTING_KEY, options); setup?.Invoke(options); defaultServices.AddSingleton <IStartupFilter>(new BeatPulseFilter(options)); }); return(hostBuilder); }
/// <summary> /// /// </summary> /// <param name="hostBuilder"></param> /// <returns></returns> public static IWebHostBuilder UseHealthChecks(this IWebHostBuilder hostBuilder) { hostBuilder.ConfigureServices((context, services) => { var optionsConfiguration = new BeatPulseOptionsConfiguration(); services.BuildServiceProvider().GetRequiredService <IConfiguration>().Bind("BeatPulseOptions", optionsConfiguration); optionsConfiguration.ConfigurePath(path: "health") //默认路径 .ConfigureOutputCache(5) //缓存10秒 .ConfigureTimeout(milliseconds: 1500) // 超时时间 .ConfigureDetailedOutput(detailedOutput: true, includeExceptionMessages: true); //default (true,false) services.AddSingleton <IStartupFilter>(new BeatPulseFilter(optionsConfiguration)); }); return(hostBuilder); }
/// <summary> /// Add BeatPulse middleware into the request pipeline. /// </summary> /// <param name="app">The <see cref="IApplicationBuilder"/>.</param> /// <param name="setup">Provide delegate to configure BeatPulse options like timeout, path, detailed errors etc.</param> /// <returns>A reference to the <paramref name="app"/> after the operation has completed.</returns> public static IApplicationBuilder UseBeatPulse(this IApplicationBuilder app, Action <BeatPulseOptions> setup = null) { var options = new BeatPulseOptionsConfiguration(); var configuration = app.ApplicationServices.GetService <IConfiguration>(); configuration.Bind(BeatPulseKeys.BEATPULSE_OPTIONS_SETTING_KEY, options); setup?.Invoke(options); app.MapWhen(context => context.IsBeatPulseRequest(options), appBuilder => { appBuilder.UseMiddleware <BeatPulseMiddleware>(options); }); return(app); }