protected override void ConfigureBuilder(IWebHostBuilder builder) {
     builder.UseKestrel(kestrel => {
         kestrel.ThreadCount = 20; // Due to tabs etc..
         using (var s = WindowsApiPortHandlerBase.GetApiStream("server.pfx"))
             kestrel.UseHttps(new X509Certificate2(s.ToBytes(), "localhost"));
     });
     builder.UseStartup<AspStartup>();
 }
        public ServiceFabricWebHostBuilder(string[] args)
        {
            Console.WriteLine("ServiceFabricWebHostBuilder: Constructor");

            var config = new ConfigurationBuilder()
                .AddCommandLine(args)
                .Build();

            _builder = new WebHostBuilder()
                .UseConfiguration(config);

            RunInServiceFabric = string.Equals(_builder.GetSetting("fabric"), "true", StringComparison.OrdinalIgnoreCase);

            Console.WriteLine("RunInServiceFabric: " + RunInServiceFabric);

            if (RunInServiceFabric)
            {
                _fabricRuntime = FabricRuntime.Create();
                Console.WriteLine("FabricRuntime initialized");
            }
        }
Beispiel #3
0
 public AssistantBuilder UseWebHostBuilder(IWebHostBuilder webHostBuilder)
 {
     this.webHostBuilder = webHostBuilder;
     return(this);
 }
Beispiel #4
0
 /// <inheritdoc/>
 protected override void ConfigureWebHost(IWebHostBuilder builder)
 {
     builder.UseContentRoot(".").UseStartup <TestStartup>();
     base.ConfigureWebHost(builder);
 }
Beispiel #5
0
 protected override void ConfigureWebHost(IWebHostBuilder builder)
 {
     ConfigureWebHostCalled.Add("ConfigureWebHost");
     base.ConfigureWebHost(builder);
 }
 public static IWebHostBuilder AddSomeMiddleware(this IWebHostBuilder builder)
 {
     return(builder);
 }
Beispiel #7
0
 /// <summary>
 /// Setup https for Kestrel. The certificate will try to find from Persional,TrustedPublisher,TrustedPeople,Root and CertificateAuthority by Thumbprint.
 /// </summary>
 /// <param name="hostBuilder"></param>
 /// <param name="port">the port of https</param>
 /// <param name="thumbprint">certificate thumbprint</param>
 /// <exception cref="ArgumentNullException">if certificate is not found</exception>
 /// <returns></returns>
 public static IWebHostBuilder UseKestrelHttps(this IWebHostBuilder hostBuilder, int port, string thumbprint)
 => hostBuilder.UseKestrelHttps(port, () => TryGetCertificateFromStore(thumbprint));
Beispiel #8
0
 public static IWebHostBuilder UseKestrelHttps(this IWebHostBuilder hostBuilder, int port, string certificatePath, string password)
 => hostBuilder.UseKestrelHttps(port, () => new X509Certificate2(certificatePath, password));
        public static IWebHostBuilder UsePort(this IWebHostBuilder builder)
        {
            var port = Environment.GetEnvironmentVariable("PORT");

            return(string.IsNullOrEmpty(port) ? builder : builder.UseUrls($"http://+:{port}"));
        }
Beispiel #10
0
 private void CustomWebHostBuilder(IWebHostBuilder builder)
 {
     builder.ConfigureTestServices(ServicesConfiguration);
 }
 public static IWebHostBuilder UseStartup(this IWebHostBuilder builder, IStartup startup)
 => builder
 .ConfigureServices(services => services.AddSingleton(startup))
 .UseSetting(WebHostDefaults.ApplicationKey, startup.GetType().AssemblyQualifiedName);
Beispiel #12
0
 /// <summary>
 /// Configures iis integration. .net core v2.2 integrates more iis options
 /// </summary>
 /// <param name="webHostBuilder"></param>
 private static void ConfigureIIS(ref IWebHostBuilder webHostBuilder)
 {
     webHostBuilder.UseIISIntegration();
 }
Beispiel #13
0
 /// <summary>
 /// Web 主机注入StartupFilter 和 HostStartup
 /// </summary>
 /// <param name="webBuilder">Web主机构建器</param>
 /// <param name="assemblyName">外部程序集名称</param>
 /// <returns>IWebHostBuilder</returns>
 public static IWebHostBuilder Inject(this IWebHostBuilder webBuilder, string assemblyName = nameof(Fur))
 {
     webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, assemblyName);
     return(webBuilder);
 }
Beispiel #14
0
        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            builder
            .UseSolutionRelativeContentRoot("src/CleanArchitecture1.Web")
            .ConfigureServices(services =>
            {
                // Remove the app's ApplicationDbContext registration.
                var descriptor = services.SingleOrDefault(
                    d => d.ServiceType ==
                    typeof(DbContextOptions <AppDbContext>));

                if (descriptor != null)
                {
                    services.Remove(descriptor);
                }

                // Add ApplicationDbContext using an in-memory database for testing.
                services.AddDbContext <AppDbContext>(options =>
                {
                    options.UseInMemoryDatabase("InMemoryDbForTesting");
                });

                //// Create a new service provider.
                //var serviceProvider = new ServiceCollection()
                //    .AddEntityFrameworkInMemoryDatabase()
                //    .BuildServiceProvider();

                //// Add a database context (AppDbContext) using an in-memory
                //// database for testing.
                //services.AddDbContext<AppDbContext>(options =>
                //{
                //    options.UseInMemoryDatabase("InMemoryDbForTesting");
                //    options.UseInternalServiceProvider(serviceProvider);
                //});

                services.AddScoped <IDomainEventDispatcher, NoOpDomainEventDispatcher>();

                // Build the service provider.
                var sp = services.BuildServiceProvider();

                // Create a scope to obtain a reference to the database
                // context (AppDbContext).
                using (var scope = sp.CreateScope())
                {
                    var scopedServices = scope.ServiceProvider;
                    var db             = scopedServices.GetRequiredService <AppDbContext>();

                    var logger = scopedServices
                                 .GetRequiredService <ILogger <CustomWebApplicationFactory <TStartup> > >();

                    // Ensure the database is created.
                    db.Database.EnsureCreated();

                    try
                    {
                        // Seed the database with test data.
                        SeedData.PopulateTestData(db);
                    }
                    catch (Exception ex)
                    {
                        logger.LogError(ex, "An error occurred seeding the " +
                                        $"database with test messages. Error: {ex.Message}");
                    }
                }
            });
        }
Beispiel #15
0
 protected override void ConfigureWebHost(IWebHostBuilder builder)
 {
     builder.UseStartup <TStartup>();
     builder.UseEnvironment("Testing");
 }
Beispiel #16
0
 public static IWebHostBuilder UseSeriLogging(this IWebHostBuilder webHostBuilder, string applicationName = null)
 => webHostBuilder.UseSerilog((context, loggerConfiguration) =>
Beispiel #17
0
 public static IWebHostBuilder UseAlteredHttps(this IWebHostBuilder builder) => builder
 .AlteredConfigure(app => app
                   .UseHsts()
                   .UseHttpsRedirection()
                   );
Beispiel #18
0
        protected override TestServer CreateServer(IWebHostBuilder builder)
        {
            var server = base.CreateServer(builder);

            return(server);
        }
Beispiel #19
0
 public static IWebHostBuilder UseKestrelHttps(this IWebHostBuilder hostBuilder, int port, X509Certificate2 certificate)
 => hostBuilder.UseKestrelHttps(port, () => certificate);
Beispiel #20
0
 void IHostingStartup.Configure(IWebHostBuilder builder)
 {
     builder.ConfigureServices((serviceCollection) => {
         serviceCollection.AddDevExpressBlazor();
     });
 }
 private static void ConfigureWebHostBuilder(IWebHostBuilder builder) =>
     builder.UseStartup<TStartup>();
Beispiel #22
0
 /// <summary>
 /// Specify the startup type to be used by the web host.
 /// </summary>
 /// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
 /// <typeparam name ="TStartup">The type containing the startup methods for the application.</typeparam>
 /// <returns>The <see cref="IWebHostBuilder"/>.</returns>
 public static IWebHostBuilder UseStartup <TStartup>(this IWebHostBuilder hostBuilder) where TStartup : class
 {
     return(hostBuilder.UseStartup(typeof(TStartup)));
 }
        /// <summary>
        /// 注册消息处理实现类
        /// </summary>
        /// <param name="builder"></param>
        /// <returns></returns>
        public static IWebHostBuilder RegisterMessageHandler(this IWebHostBuilder builder)
        {
            string assemblyName = Assembly.GetEntryAssembly().GetName().Name;

            return(builder.RegisterMessageHandler(assemblyName));
        }
Beispiel #24
0
        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            base.ConfigureWebHost(builder);

            builder.UseEnvironment("Production");
        }
Beispiel #25
0
 protected override TestServer CreateServer(IWebHostBuilder builder)
 {
     CreateServerCalled = true;
     return(base.CreateServer(builder));
 }
 /// <summary>
 /// The builder has configuration, logging and Amazon API Gateway already configured. The startup class
 /// needs to be configured in this method using the UseStartup<>() method.
 /// </summary>
 /// <param name="builder"></param>
 protected override void Init(IWebHostBuilder builder)
 {
     builder
     .UseStartup <Startup>();
 }
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) =>
            {
                services.AddDbContext <IdentityDbContext>(options =>
                {
                    options.UseSqlServer(context.Configuration.GetConnectionString("IdentityDbContextConnection"));

                    options.UseOpenIddict();
                    //options.UseInMemoryDatabase(Guid.NewGuid().ToString())
                });

                //services.AddDefaultIdentity<AppUser>()
                //    .AddEntityFrameworkStores<IdentityDbContext>();

                services.AddIdentity <AppUser, IdentityRole>()
                .AddEntityFrameworkStores <IdentityDbContext>()
                .AddDefaultTokenProviders()
                .AddDefaultUI();

                services.AddAuthentication()
                .AddJwtBearer(options => {
                    var siningKeys = new List <SigningCredentials>();
                    siningKeys.AddDevelopmentCertificate();
                    options.TokenValidationParameters.IssuerSigningKey = siningKeys.Select(c => c.Key).First();
                    options.TokenValidationParameters.RoleClaimType    = OpenIddictConstants.Claims.Role;
                    options.TokenValidationParameters.NameClaimType    = OpenIddictConstants.Claims.Name;
                    options.TokenValidationParameters.ValidAudience    = "resource_server";
                    options.TokenValidationParameters.ValidIssuer      = "https://localhost:44370/";
                })
                .AddFacebook(facebookOptions =>
                {
                    facebookOptions.AppId     = context.Configuration["Authentication:Facebook:AppId"];
                    facebookOptions.AppSecret = context.Configuration["Authentication:Facebook:AppSecret"];
                }).AddTwitter(twitterOptions =>
                {
                    twitterOptions.ConsumerKey    = context.Configuration["Authentication:Twitter:ConsumerKey"];
                    twitterOptions.ConsumerSecret = context.Configuration["Authentication:Twitter:ConsumerSecret"];
                })
                .AddGoogle(googleOptions =>
                {
                    googleOptions.ClientId     = context.Configuration["Authentication:Google:ClientId"];
                    googleOptions.ClientSecret = context.Configuration["Authentication:Google:ClientSecret"];
                }).AddMicrosoftAccount(microsoftOptions =>
                {
                    microsoftOptions.ClientId     = context.Configuration["Authentication:Microsoft:ApplicationId"];
                    microsoftOptions.ClientSecret = context.Configuration["Authentication:Microsoft:Password"];
                });

                services.Configure <IdentityOptions>(options =>
                {
                    options.Password.RequiredLength = 8;

                    options.Lockout.MaxFailedAccessAttempts = 10;

                    options.Lockout.AllowedForNewUsers = true;

                    options.SignIn.RequireConfirmedEmail = true;

                    options.User.RequireUniqueEmail = true;
                });

                //services.ConfigureApplicationCookie(options => {
                //    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
                //    options.Cookie.HttpOnly = true;
                //    options.ExpireTimeSpan = TimeSpan.FromMinutes(20);

                //    options.LoginPath = "/Identity/Account/Login";
                //    options.LogoutPath = "/Identity/Account/Logout";
                //});

                services.AddSingleton <IEmailSender, LoggerEmailSender>();
                services.AddSingleton <ISmsSender, LoggerSmsSender>();
            });
        }
Beispiel #28
0
        public static void Main(string[] args)
        {
            ProcessEnvironmentVariables();

            ProcessCommandArgs(args);

            ValidateParameters();

            Smoker = new Smoker.Test(Config.FileList, Config.Host);

            // run one test iteration
            if (!Config.RunLoop && !Config.RunWeb)
            {
                if (!Smoker.Run().Result)
                {
                    Environment.Exit(-1);
                }

                return;
            }

            IWebHost host = null;

            // configure web server
            if (Config.RunWeb)
            {
                // use the default web host builder + startup
                IWebHostBuilder builder = WebHost.CreateDefaultBuilder(args)
                                          .UseKestrel()
                                          .UseStartup <Startup>()
                                          .UseUrls("http://*:4122/");

                // build the host
                host = builder.Build();
            }

            using (CancellationTokenSource ctCancel = new CancellationTokenSource())
            {
                // setup ctl c handler
                Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e)
                {
                    e.Cancel = true;
                    ctCancel.Cancel();

                    Console.WriteLine("Ctl-C Pressed - Starting shutdown ...");

                    // give threads a chance to shutdown
                    Thread.Sleep(500);

                    // end the app
                    Environment.Exit(0);
                };

                // run tests in config.RunLoop
                if (Config.RunLoop)
                {
                    TaskRunner tr;

                    for (int i = 0; i < Config.Threads; i++)
                    {
                        tr = new TaskRunner {
                            TokenSource = ctCancel
                        };

                        tr.Task = Smoker.RunLoop(i, App.Config, tr.TokenSource.Token);

                        TaskRunners.Add(tr);
                    }
                }

                // run the web server
                if (Config.RunWeb)
                {
                    try
                    {
                        Console.WriteLine($"Version: {Helium.Version.AssemblyVersion}");

                        host.Run();
                        Console.WriteLine("Web server shutdown");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Web Server Exception\n{ex}");
                    }

                    return;
                }

                // run the task loop
                if (Config.RunLoop && TaskRunners.Count > 0)
                {
                    // Wait for all tasks to complete
                    List <Task> tasks = new List <Task>();

                    foreach (var trun in TaskRunners)
                    {
                        tasks.Add(trun.Task);
                    }

                    // wait for ctrl c
                    Task.WaitAll(tasks.ToArray());
                }
            }
        }
 public void Configure(IWebHostBuilder builder)
 {
     builder.ConfigureServices((context, services) => {
     });
 }
        /// <summary>
        /// Configures the port and base path the server should listen on when running behind AspNetCoreModule.
        /// The app will also be configured to capture startup errors.
        /// </summary>
        /// <param name="hostBuilder"></param>
        /// <returns></returns>
        public static IWebHostBuilder UseIISIntegration(this IWebHostBuilder hostBuilder)
        {
            if (hostBuilder == null)
            {
                throw new ArgumentNullException(nameof(hostBuilder));
            }

            // Check if `UseIISIntegration` was called already
            if (hostBuilder.GetSetting(nameof(UseIISIntegration)) != null)
            {
                return(hostBuilder);
            }

            var port                = hostBuilder.GetSetting(ServerPort) ?? Environment.GetEnvironmentVariable($"ASPNETCORE_{ServerPort}");
            var path                = hostBuilder.GetSetting(ServerPath) ?? Environment.GetEnvironmentVariable($"ASPNETCORE_{ServerPath}");
            var pairingToken        = hostBuilder.GetSetting(PairingToken) ?? Environment.GetEnvironmentVariable($"ASPNETCORE_{PairingToken}");
            var iisAuth             = hostBuilder.GetSetting(IISAuth) ?? Environment.GetEnvironmentVariable($"ASPNETCORE_{IISAuth}");
            var websocketsSupported = hostBuilder.GetSetting(IISWebSockets) ?? Environment.GetEnvironmentVariable($"ASPNETCORE_{IISWebSockets}");

            bool isWebSocketsSupported;

            if (!bool.TryParse(websocketsSupported, out isWebSocketsSupported))
            {
                // If the websocket support variable is not set, we will always fallback to assuming websockets are enabled.
                isWebSocketsSupported = (Environment.OSVersion.Version >= new Version(6, 2));
            }

            if (!string.IsNullOrEmpty(port) && !string.IsNullOrEmpty(path) && !string.IsNullOrEmpty(pairingToken))
            {
                // Set flag to prevent double service configuration
                hostBuilder.UseSetting(nameof(UseIISIntegration), true.ToString());

                var enableAuth = false;
                if (string.IsNullOrEmpty(iisAuth))
                {
                    // back compat with older ANCM versions
                    enableAuth = true;
                }
                else
                {
                    // Lightup a new ANCM variable that tells us if auth is enabled.
                    foreach (var authType in iisAuth.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        if (!string.Equals(authType, "anonymous", StringComparison.OrdinalIgnoreCase))
                        {
                            enableAuth = true;
                            break;
                        }
                    }
                }

                var address = "http://127.0.0.1:" + port;
                hostBuilder.CaptureStartupErrors(true);

                hostBuilder.ConfigureServices(services =>
                {
                    // Delay register the url so users don't accidentally overwrite it.
                    hostBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, address);
                    hostBuilder.PreferHostingUrls(true);
                    services.AddSingleton <IServerIntegratedAuth>(_ => new ServerIntegratedAuth()
                    {
                        IsEnabled            = enableAuth,
                        AuthenticationScheme = IISDefaults.AuthenticationScheme
                    });
                    services.AddSingleton <IStartupFilter>(new IISSetupFilter(pairingToken, new PathString(path), isWebSocketsSupported));
                    services.Configure <ForwardedHeadersOptions>(options =>
                    {
                        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
                    });
                    services.Configure <IISOptions>(options =>
                    {
                        options.ForwardWindowsAuthentication = enableAuth;
                    });
                    services.AddAuthenticationCore();
                });
            }

            return(hostBuilder);
        }
Beispiel #31
0
 protected abstract void ConfigureBuilder(IWebHostBuilder builder);
Beispiel #32
0
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) =>
            {
                services.AddDbContext <TroydonFitnessIdentityContext>(options =>
                                                                      options.UseSqlServer(
                                                                          context.Configuration.GetConnectionString("TroydonFitnessIdentityContextConnection")));

                services.AddIdentity <TroydonFitnessWebsiteUser, IdentityRole>(options =>
                {
                    options.SignIn.RequireConfirmedAccount = true;
                    options.SignIn.RequireConfirmedEmail   = true;
                })
                // .AddRoles<ApplicationRole>()
                .AddEntityFrameworkStores <TroydonFitnessIdentityContext>()
                .AddClaimsPrincipalFactory <AdditionalUserClaimsPrincipalFactory>() // trial
                //.AddEntityFrameworkStores<ProductContext>() TODO: see if we need to connect to product db to interact with it using
                .AddDefaultTokenProviders();

                // config email verification
                services.AddScoped <IUserClaimsPrincipalFactory <TroydonFitnessWebsiteUser>,
                                    AdditionalUserClaimsPrincipalFactory>();

                // add authorization
                services.AddAuthorization(config =>
                {
                    // this policy will apply to users that try to make an order without filling up their profile page with enough data
                    config.AddPolicy("OrderSuppsAndEquip", policyBuilder =>
                    {
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.GivenName);
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.FamilyName);
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.BirthDate);
                        policyBuilder.RequireCustomClaim("AddressLine2");
                        policyBuilder.RequireCustomClaim("City");
                        policyBuilder.RequireCustomClaim("State");
                        policyBuilder.RequireCustomClaim("Zip");
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.EmailVerified);
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.PhoneNumber);
                    });
                    // this policy will apply to users that try to make an order without filling up their profile page with enough data
                    config.AddPolicy("OrderPT", policyBuilder =>
                    {
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.GivenName);
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.FamilyName);
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.BirthDate);
                        policyBuilder.RequireCustomClaim("AddressLine2");
                        policyBuilder.RequireCustomClaim("City");
                        policyBuilder.RequireCustomClaim("State");
                        policyBuilder.RequireCustomClaim("Zip");
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.EmailVerified);
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.PhoneNumber);
                        policyBuilder.RequireCustomClaim("Bodyfat");
                        policyBuilder.RequireCustomClaim(JwtClaimTypes.Gender);
                        policyBuilder.RequireCustomClaim("Height");
                        policyBuilder.RequireCustomClaim("Weight");
                        policyBuilder.RequireCustomClaim("ActivityType");
                    });

                    // TODO: Test if this will allow both admin and master admin access to somefeatures
                    config.AddPolicy("ElevatedRights", policyBuilder =>
                    {
                        policyBuilder.RequireClaim(JwtClaimTypes.Role, "Master Admin", JwtClaimTypes.Role, "Admin");
                    });
                    // master admin policy allows admins access to full CRUD functionality
                    config.AddPolicy("RequireMasterAdministratorRole", policyBuilder =>
                    {
                        policyBuilder.RequireClaim(JwtClaimTypes.Role, "Master Admin");
                    });
                });

                services.AddScoped <IAuthorizationHandler, CustomRequireClaimHandler>();

                services.Configure <IdentityOptions>(options =>
                {
                    // Default SignIn settings.
                    options.SignIn.RequireConfirmedEmail       = false;
                    options.SignIn.RequireConfirmedPhoneNumber = false;

                    // Password settings.
                    options.Password.RequireDigit           = false;
                    options.Password.RequireLowercase       = true;
                    options.Password.RequireNonAlphanumeric = false;
                    options.Password.RequireUppercase       = false;
                    options.Password.RequiredLength         = 6;
                    options.Password.RequiredUniqueChars    = 1;

                    // Lockout settings.
                    options.Lockout.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(60);
                    options.Lockout.MaxFailedAccessAttempts = 5;
                    options.Lockout.AllowedForNewUsers      = true;

                    // User settings.
                    options.User.AllowedUserNameCharacters =
                        "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
                    options.User.RequireUniqueEmail = true;
                });

                services.ConfigureApplicationCookie(options =>
                {
                    // Cookie settings
                    options.Cookie.HttpOnly    = true;
                    options.ExpireTimeSpan     = TimeSpan.FromDays(5);
                    options.Cookie.Name        = "TroydonFitnessCookies";
                    options.LoginPath          = "/Identity/Account/Login";
                    options.LogoutPath         = $"/Identity/Account/Logout";
                    options.AccessDeniedPath   = "/Identity/Account/AccessDenied";
                    options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
                    options.SlidingExpiration  = true;
                });

                services.Configure <PasswordHasherOptions>(option =>
                {
                    option.IterationCount = 12000;
                });
                services.Configure <DataProtectionTokenProviderOptions>(options =>
                                                                        options.TokenLifespan = TimeSpan.FromHours(3));
            });
        }
 public virtual IWebHostBuilder ConfigureHost(IWebHostBuilder host, string[] urlBases)
 {
     return host.UseKestrel()
         .UseContentRoot(System.IO.Directory.GetCurrentDirectory())
         .UseWebRoot(System.IO.Directory.GetCurrentDirectory())
         .UseStartup<Startup>()
         .UseUrls(urlBases);
 }
Beispiel #34
0
        public static IWebHostBuilder UseAppMetrics(this IWebHostBuilder webHostBuilder)
        {
            if (_initialized)
            {
                return(webHostBuilder);
            }

            return(webHostBuilder
                   .ConfigureMetricsWithDefaults((context, builder) =>
            {
                var metricsOptions = context.Configuration.GetOptions <MetricsOptions>("metrics");
                if (!metricsOptions.Enabled)
                {
                    return;
                }

                _initialized = true;
                builder.Configuration.Configure(cfg =>
                {
                    var tags = metricsOptions.Tags;
                    if (tags == null)
                    {
                        return;
                    }

                    tags.TryGetValue("app", out var app);
                    tags.TryGetValue("env", out var env);
                    tags.TryGetValue("server", out var server);
                    cfg.AddAppTag(string.IsNullOrWhiteSpace(app) ? null : app);
                    cfg.AddEnvTag(string.IsNullOrWhiteSpace(env) ? null : env);
                    cfg.AddServerTag(string.IsNullOrWhiteSpace(server) ? null : server);
                    foreach (var tag in tags)
                    {
                        if (!cfg.GlobalTags.ContainsKey(tag.Key))
                        {
                            cfg.GlobalTags.Add(tag.Key, tag.Value);
                        }
                    }
                }
                                                );

                if (metricsOptions.InfluxEnabled)
                {
                    builder.Report.ToInfluxDb(o =>
                    {
                        o.InfluxDb.Database = metricsOptions.Database;
                        o.InfluxDb.BaseUri = new Uri(metricsOptions.InfluxUrl);
                        o.InfluxDb.CreateDataBaseIfNotExists = true;
                        o.FlushInterval = TimeSpan.FromSeconds(metricsOptions.Interval);
                    });
                }
            })
                   .UseHealth()
                   .UseHealthEndpoints()
                   .UseMetricsWebTracking()
                   .UseMetrics((context, options) =>
            {
                var metricsOptions = context.Configuration.GetOptions <MetricsOptions>("metrics");
                if (!metricsOptions.Enabled)
                {
                    return;
                }

                if (!metricsOptions.PrometheusEnabled)
                {
                    return;
                }

                options.EndpointOptions = endpointOptions =>
                {
                    switch (metricsOptions.PrometheusFormatter?.ToLowerInvariant() ?? string.Empty)
                    {
                    case "protobuf":
                        endpointOptions.MetricsEndpointOutputFormatter =
                            new MetricsPrometheusProtobufOutputFormatter();
                        break;

                    default:
                        endpointOptions.MetricsEndpointOutputFormatter =
                            new MetricsPrometheusTextOutputFormatter();
                        break;
                    }
                };
            }));
        }