Esempio n. 1
0
        public RabbitMQEventBus(DATConfiguration configuration, EventbusConfiguration options, IMetricsClient client) : base(client)
        {
            _configuration = configuration;

            int port = 5672;

            if (options.Port != null)
            {
                port = options.Port.Value;
            }

            string virtualHost = "/";

            if (options.VirtualHost != null)
            {
                virtualHost = options.VirtualHost;
            }

            _connectionFactory = new ConnectionFactory
            {
                UserName    = options.Username,
                Password    = options.Password,
                VirtualHost = virtualHost,
                HostName    = options.Hostname,
                Port        = port
            };

            _connection = _connectionFactory.CreateConnection();
            _channel    = _connection.CreateModel();
        }
Esempio n. 2
0
        private static void BootstrapLogger(ContainerBuilder builder, DATConfiguration configuration)
        {
            if (configuration.Logging == null)
            {
                return;
            }

            ILoggerFactory factory = new LoggerFactory()
                                     .AddConsole(configuration.Logging.LogLevel)
                                     .AddDebug(configuration.Logging.LogLevel);

            builder.Register((context, parameters) => factory.CreateLogger <DATContext>()).As <ILogger>();
        }
Esempio n. 3
0
        /// <summary>
        /// Initialize a new DAT context. This will try to use the appsettings.json in the local directory. If this file
        /// is not found it will fall back to a default configuration.
        /// </summary>
        /// <typeparam name="T">Type of the configuration file, must inherit from Configuration.Configuration</typeparam>
        public static void Bootstrap <T>(bool debugMode = false) where T : Configuration.Configuration
        {
            DebugMode = debugMode;

            ContainerBuilder containerBuilder = new ContainerBuilder();

            DATConfiguration configuration = BootstrapConfiguration <T>(containerBuilder);

            BootstrapMetrics(containerBuilder, configuration);
            BootstrapLogger(containerBuilder, configuration);
            BootstrapEventbus(containerBuilder, configuration);

            OnPreContainerBuild(containerBuilder);

            Container = containerBuilder.Build();
        }
Esempio n. 4
0
        public void BootstrapDefaultTest()
        {
            bool eventHandlerCalled = false;

            DATContext.PreContainerBuild += (sender, builder) => { eventHandlerCalled = true; };

            DATContext.Bootstrap();

            DATConfiguration datConfiguration = DATContext.Container.Resolve <DATConfiguration>();

            Assert.Equal("test-service", datConfiguration.Name);

            ILogger logger = DATContext.Container.Resolve <ILogger>();

            Assert.NotNull(logger);
            Assert.True(eventHandlerCalled);
        }
Esempio n. 5
0
        private static void BootstrapEventbus(ContainerBuilder builder, DATConfiguration configuration)
        {
            if (configuration.EventBus == null)
            {
                return;
            }

            switch (configuration.EventBus.Type)
            {
            case "rabbitmq":

                builder.Register(c => new RabbitMQEventBus(configuration, configuration.EventBus, c.Resolve <IMetricsClient>()))
                .As <IEventBus>()
                .SingleInstance();
                break;
            }
        }
Esempio n. 6
0
        public void BootstrapDefaultStagingTest()
        {
            Environment.SetEnvironmentVariable("NETCORE_ENVIRONMENT", "Staging");

            bool eventHandlerCalled = false;

            DATContext.PreContainerBuild += (sender, builder) => { eventHandlerCalled = true; };

            DATContext.Bootstrap();

            DATConfiguration datConfiguration = DATContext.Container.Resolve <DATConfiguration>();

            Assert.Equal("test-service-2", datConfiguration.Name);

            ILogger logger = DATContext.Container.Resolve <ILogger>();

            Assert.NotNull(logger);
            Assert.True(eventHandlerCalled);
        }
Esempio n. 7
0
        private static DATConfiguration BootstrapConfiguration <T>(ContainerBuilder containerBuilder) where T : Configuration.Configuration
        {
            // Default location is appsettings.json in the local directory
            IConfigurationBuilder builder = new ConfigurationBuilder()
                                            .AddJsonFile("appsettings.json", true);


            string environment = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT");

            PrintDebug($"environment set to [{environment}]");

            if (environment != null)
            {
                string fileName = $"appsettings.{environment.ToLower()}.json";

                builder.AddJsonFile(fileName, true);

                PrintDebug($"loaded [{fileName}]");
            }

            // Local is last since it is the most specific configuration file
            builder.AddJsonFile("appsettings.local.json", true);

            // Environment variables should always override configuration values. This usefull for example passwords
            builder.AddEnvironmentVariables();

            IConfiguration config = builder.Build();

            // If there are no childeren configuration load failed, so we manually load the default.
            T fullConfig = config.Get <T>();
            DATConfiguration configuration = config.GetSection("DAT").Get <DATConfiguration>() ?? new DATConfiguration();

            containerBuilder.RegisterInstance(configuration).As <DATConfiguration>();
            containerBuilder.RegisterInstance(fullConfig).As <T>();

            PrintDebug("Outputting Effective Config:");
            PrintDebug(JsonConvert.SerializeObject(fullConfig));

            return(configuration);
        }
Esempio n. 8
0
        private static void BootstrapMetrics(ContainerBuilder containerBuilder, DATConfiguration configuration)
        {
            if (configuration.Metrics == null)
            {
                MockMetricsClient client = new MockMetricsClient();
                containerBuilder.RegisterInstance(client).As <IMetricsClient>();
            }
            else
            {
                switch (configuration.Metrics.Type)
                {
                case "statsd":
                    containerBuilder.Register(c => new StatsDMetricsClient(configuration.Metrics))
                    .As <IMetricsClient>()
                    .SingleInstance();
                    break;

                default:
                    throw new Exception($"Invalid metrics type: {configuration.Metrics.Type}");
                }
            }
        }
Esempio n. 9
0
 public RabbitMQEventBus(DATConfiguration configuration, IMetricsClient client)
     : this(configuration, new EventbusConfiguration() { Hostname = "localhost", Username = "******", Password = "******", VirtualHost = "/", Port = 5672 }, client)
 {
 }