public static SillycoreAppBuilder WithAppMetrics(this SillycoreAppBuilder builder)
        {
            IMetricsRoot metrics = App.Metrics.AppMetrics.CreateDefaultBuilder()
                                   .OutputMetrics.AsPrometheusPlainText()
                                   .OutputMetrics.AsPlainText()
                                   .Build();


            builder.Services.AddMetrics();
            builder.BeforeBuild(() =>
            {
                IWebHostBuilder webhostBuilder = builder.DataStore
                                                 .Get <IWebHostBuilder>(Web.Constants.WebHostBuilder)
                                                 .ConfigureMetrics(metrics)
                                                 .UseMetrics(
                    options =>
                {
                    options.EndpointOptions = endpointsOptions =>
                    {
                        endpointsOptions.MetricsTextEndpointOutputFormatter = metrics.OutputMetricsFormatters.GetType <MetricsTextOutputFormatter>();
                        endpointsOptions.MetricsEndpointOutputFormatter     = metrics.OutputMetricsFormatters.GetType <MetricsPrometheusTextOutputFormatter>();
                    };
                });

                builder.DataStore.Set(Web.Constants.WebHostBuilder, webhostBuilder);
            });

            return(builder);
        }
        public SillycoreAppBuilder Then()
        {
            _sillycoreAppBuilder.BeforeBuild(() =>
            {
                IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    _logger.LogDebug($"Configuring bus.");
                    var host = cfg.Host(new Uri(_url), h =>
                    {
                        h.Username(_username);
                        h.Password(_password);
                    });

                    foreach (ConsumerConfiguration consumerConfiguration in _consumerConfigurations)
                    {
                        _sillycoreAppBuilder.Services.AddTransient(consumerConfiguration.Type);
                        cfg.ReceiveEndpoint(host, consumerConfiguration.Queue, consumerConfiguration.ConfigureAction);
                    }

                    cfg.UseExtensionsLogging(_sillycoreAppBuilder.LoggerFactory);
                    _logger.LogDebug($"Bus configured.");
                });

                _sillycoreAppBuilder.Services.AddSingleton(busControl);
                busControl.Start();
                _logger.LogDebug($"Bus started.");
            });

            return(_sillycoreAppBuilder);
        }
Beispiel #3
0
        public void Build()
        {
            RegisterHealthCheckers();

            SillycoreAppBuilder.BeforeBuild(() =>
            {
                IWebHostBuilder webhostBuilder = SillycoreAppBuilder.DataStore.Get <IWebHostBuilder>(Constants.WebHostBuilder)
                                                 .UseStartup(_sillycoreStartup == null ? typeof(SillycoreStartup) : _sillycoreStartup);
                SillycoreAppBuilder.DataStore.Set(Constants.WebHostBuilder, webhostBuilder);
            });

            SillycoreApp app = SillycoreAppBuilder.Build();

            IServiceProvider serviceProvider         = app.DataStore.Get <IServiceProvider>(Sillycore.Constants.ServiceProvider);
            ILogger <SillycoreWebhostBuilder> logger = serviceProvider.GetService <ILogger <SillycoreWebhostBuilder> >();

            logger.LogInformation($"{_applicationName} started.");

            app.DataStore.Get <IWebHostBuilder>(Constants.WebHostBuilder).Build().Run();
        }
Beispiel #4
0
        public void Build()
        {
            SillycoreAppBuilder.DataStore.Set(Sillycore.Constants.UseShutDownDelay, true);
            RegisterHealthCheckers();

            IWebHost webHost = null;

            SillycoreAppBuilder.BeforeBuild(() =>
            {
                IWebHostBuilder webhostBuilder = SillycoreAppBuilder.DataStore.Get <IWebHostBuilder>(Constants.WebHostBuilder)
                                                 .UseStartup(typeof(SillycoreStartup));

                webHost = webhostBuilder
                          .Build();
            });

            SillycoreApp app = SillycoreAppBuilder.Build();
            ILogger <SillycoreWebhostBuilder> logger = app.ServiceProvider.GetService <ILoggerFactory>().CreateLogger <SillycoreWebhostBuilder>();

            logger.LogInformation($"{ApplicationName} started.");

            webHost.Run();
        }
Beispiel #5
0
        public static SillycoreAppBuilder UseSerilog(this SillycoreAppBuilder builder)
        {
            builder.BeforeBuild(() =>
            {
                IConfiguration configuration = builder.DataStore.Get <IConfiguration>(Constants.Configuration);

                string environment     = (configuration["ASPNETCORE_ENVIRONMENT"] ?? "").ToLowerInvariant();
                string applicationName = builder.DataStore.Get <string>("ApplicationName");

                Log.Logger = new LoggerConfiguration()
                             .ReadFrom.Configuration(configuration)
                             .Enrich.FromLogContext()
                             .Enrich.WithProperty("Application", applicationName)
                             .Enrich.WithProperty("Server", Environment.MachineName)
                             .Enrich.WithProperty("Environment", environment)
                             .CreateLogger();

                ILoggerFactory loggerFactory = builder.DataStore.Get <ILoggerFactory>(Constants.LoggerFactory);
                loggerFactory.AddSerilog(dispose: true);
            });

            return(builder);
        }
Beispiel #6
0
        public static SillycoreAppBuilder UseNLog(this SillycoreAppBuilder builder)
        {
            builder.BeforeBuild(() =>
            {
                IConfiguration configuration = builder.DataStore.Get <IConfiguration>(Constants.Configuration);

                if (!String.IsNullOrWhiteSpace(configuration["NLogConfig"]))
                {
                    File.WriteAllText("nlog.config", configuration["NLogConfig"], Encoding.UTF8);
                }

                string environment = (configuration["ASPNETCORE_ENVIRONMENT"] ?? "").ToLowerInvariant();

                if (!String.IsNullOrWhiteSpace(environment))
                {
                    if (environment != "development")
                    {
                        string environmentFileName = $"nlog.{environment}.config";

                        if (File.Exists(environmentFileName))
                        {
                            if (File.Exists("nlog.config"))
                            {
                                File.Delete("nlog.config");
                            }

                            File.Move(environmentFileName, "nlog.config");
                        }
                    }
                }

                ILoggerFactory loggerFactory = builder.DataStore.Get <ILoggerFactory>(Constants.LoggerFactory);
                loggerFactory.AddNLog();
            });

            return(builder);
        }
        public static SillycoreAppBuilder UseRabbitMq(this SillycoreAppBuilder builder, string configKey = "RabbitMq")
        {
            RabbitMqConfiguration rabbitMqConfiguration = builder.Configuration.GetSection(configKey).Get <RabbitMqConfiguration>();

            if (rabbitMqConfiguration == null)
            {
                throw new ConfigurationException($"No rabbit mq configuration found at section:{configKey}.");
            }

            List <ConsumerConfiguration> consumerConfigurations = new List <ConsumerConfiguration>();

            foreach (TypeInfo typeInfo in Assembly.GetEntryAssembly().DefinedTypes)
            {
                ConsumerAttribute consumerAttribute = typeInfo.GetCustomAttribute <ConsumerAttribute>();

                if (consumerAttribute != null && (String.IsNullOrWhiteSpace(consumerAttribute.RabbitMq) || consumerAttribute.RabbitMq.Equals(configKey)))
                {
                    ConsumerConfiguration consumerConfiguration = CreateConsumerConfigurationForType(typeInfo.AsType(), consumerAttribute);
                    consumerConfigurations.Add(consumerConfiguration);
                }
            }

            builder.Services.AddSingleton <IBusControlProvider>(BusControlProvider);
            builder.Services.TryAddSingleton(sp =>
            {
                if (BusControlProvider.GetBusControls().Count > 1)
                {
                    throw new ConfigurationException($"You cannot resolve IBusControl when there are multiple RabbitMq instances registered to services collection. Instead try to resolve IBusControlProvider and use GetBusControl method with config name you set for your desired RabbitMq instance.");
                }

                return(BusControlProvider.GetBusControls().First());
            });

            builder.BeforeBuild(() =>
            {
                IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    var host = cfg.Host(new Uri(rabbitMqConfiguration.Url), h =>
                    {
                        h.Username(rabbitMqConfiguration.Username);
                        h.Password(rabbitMqConfiguration.Password);

                        if (rabbitMqConfiguration.Nodes.HasElements())
                        {
                            h.UseCluster(cc => cc.ClusterMembers = rabbitMqConfiguration.Nodes);
                        }
                    });

                    foreach (ConsumerConfiguration consumerConfiguration in consumerConfigurations)
                    {
                        builder.Services.AddTransient(consumerConfiguration.Type);
                        cfg.ReceiveEndpoint(host, consumerConfiguration.Queue, consumerConfiguration.ConfigureAction);
                    }

                    cfg.UseExtensionsLogging(builder.LoggerFactory);

                    if (rabbitMqConfiguration.Retry != null)
                    {
                        if (rabbitMqConfiguration.Retry.Incremental != null)
                        {
                            cfg.UseRetry(rp => { rp.Incremental(rabbitMqConfiguration.Retry.Incremental.RetryLimit, rabbitMqConfiguration.Retry.Incremental.InitialInterval, rabbitMqConfiguration.Retry.Incremental.IntervalIncrement); });
                        }
                    }

                    if (rabbitMqConfiguration.UseDelayedExchangeMessageScheduler)
                    {
                        cfg.UseDelayedExchangeMessageScheduler();
                    }

                    if (rabbitMqConfiguration.ConcurrencyLimit > 0)
                    {
                        cfg.UseConcurrencyLimit(rabbitMqConfiguration.ConcurrencyLimit);
                    }
                });

                BusControlProvider.AddBusControl(configKey, busControl);
                builder.WhenStart(() => busControl.Start());
                builder.WhenStopped(() => busControl.Stop());
            });

            return(builder);
        }