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 static SillycoreDaemonBuilder UseDaemon <TService>(this SillycoreAppBuilder builder, string serviceName)
            where TService : class, ISillyDaemon
        {
            builder.Services.AddSingleton <ISillyDaemon, TService>();

            return(new SillycoreDaemonBuilder(builder, serviceName));
        }
 public SillycoreRabbitMqBuilder(SillycoreAppBuilder sillycoreAppBuilder, string url, string username, string password)
 {
     _sillycoreAppBuilder = sillycoreAppBuilder;
     _url      = url;
     _username = username;
     _password = password;
     _logger   = _sillycoreAppBuilder.LoggerFactory.CreateLogger <SillycoreRabbitMqBuilder>();
 }
Example #4
0
        public SillycoreWebhostBuilder(SillycoreAppBuilder sillycoreAppBuilder, string applicationName, string[] args)
        {
            _sillycoreAppBuilder = sillycoreAppBuilder;
            _applicationName     = applicationName;
            _args = args;

            _sillycoreAppBuilder.DataStore.Set(Constants.IsShuttingDown, false);
            _sillycoreAppBuilder.DataStore.Set(Constants.UseSwagger, false);
            _sillycoreAppBuilder.DataStore.Set(Constants.RequiresAuthentication, false);
            _sillycoreAppBuilder.DataStore.Set(Constants.OnStartActions, new List <Action>());
            _sillycoreAppBuilder.DataStore.Set(Constants.OnStopActions, new List <Action>());
        }
        public SillycoreWebhostBuilder(SillycoreAppBuilder sillycoreAppBuilder, string applicationName, string[] args)
        {
            SillycoreAppBuilder = sillycoreAppBuilder;
            _applicationName    = applicationName;
            _args = args;
            IWebHostBuilder webhostBuilder = CreateDefaultBuilder(_args);

            SillycoreAppBuilder.DataStore.Set(Constants.ApplicationName, _applicationName);
            SillycoreAppBuilder.DataStore.Set(Constants.WebHostBuilder, webhostBuilder);
            SillycoreAppBuilder.DataStore.Set(Constants.IsShuttingDown, false);
            SillycoreAppBuilder.DataStore.Set(Constants.UseSwagger, false);
            SillycoreAppBuilder.DataStore.Set(Constants.RequiresAuthentication, false);
        }
Example #6
0
        public SillycoreWebhostBuilder(SillycoreAppBuilder sillycoreAppBuilder, string applicationName, string[] args)
        {
            TelemetryConfiguration.Active.DisableTelemetry = true;
            SillycoreAppBuilder = sillycoreAppBuilder;
            ApplicationName     = applicationName;
            _args = args;
            IWebHostBuilder webhostBuilder = CreateDefaultBuilder(_args);

            SillycoreAppBuilder.DataStore.Set(Constants.ApplicationName, ApplicationName);
            SillycoreAppBuilder.DataStore.Set(Constants.WebHostBuilder, webhostBuilder);
            SillycoreAppBuilder.DataStore.Set(Constants.IsShuttingDown, false);
            SillycoreAppBuilder.DataStore.Set(Constants.UseSwagger, false);
            SillycoreAppBuilder.DataStore.Set(Constants.RequiresAuthentication, false);
        }
        public static SillycoreAppBuilder UseDataContext <TContext>(this SillycoreAppBuilder builder, string connectionStringKey)
            where TContext : DataContextBase
        {
            string connectionString = builder.Configuration[connectionStringKey];

            builder.Services
            .AddEntityFrameworkSqlServer()
            .AddDbContext <TContext>((ob) =>
            {
                ob.UseSqlServer(connectionString);
            });

            return(builder);
        }
Example #8
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);
        }
Example #9
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 SillycoreWebhostBuilder UseWebApi(this SillycoreAppBuilder builder, string applicationName, string[] args = null)
 {
     return(new SillycoreWebhostBuilder(builder, applicationName, args));
 }
Example #11
0
 public SillycoreDaemonBuilder(SillycoreAppBuilder sillycoreAppBuilder, string serviceName)
 {
     _serviceName         = serviceName;
     _sillycoreAppBuilder = sillycoreAppBuilder;
 }
        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);
        }
 public static SillycoreRabbitMqBuilder UseRabbitMq(this SillycoreAppBuilder builder, string urlConfigKey, string usernameConfigKey, string passwordConfigKey)
 {
     return(new SillycoreRabbitMqBuilder(builder, builder.Configuration[urlConfigKey], builder.Configuration[usernameConfigKey], builder.Configuration[passwordConfigKey]));
 }