private static void Main()
        {
            DeleteMenu(GetSystemMenu(GetConsoleWindow(), false), SC_CLOSE, MF_BYCOMMAND);
            var storageConnection = ConfigurationManager.AppSettings["AzureStorageConnectionString"];
            ServiceBusConnectionStringBuilder builder = new ServiceBusConnectionStringBuilder(ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString.Listen"]);

            EventHubName = ConfigurationManager.AppSettings["EventHubName"];
            var hubProcessor = new EventHubProcessor(builder.ToString(), EventHubName);
            AnalyzerEngineProgram engineProgram = new AnalyzerEngineProgram(Engine, Logger, ErrorLogger, new StatusSnapShotGenerator(ConfigurationManager.AppSettings["jsonPath"], ErrorLogger), hubProcessor);


            var alarmQueueConnS = ConfigurationManager.AppSettings["ServiceBus.Queue.Connectionstring"];
            var alarmQueueName  = ConfigurationManager.AppSettings["ServiceBus.Queue.Name"];

            var alarmQueue  = new ServiceBusConnection <AlarmMessage>(alarmQueueConnS, alarmQueueName);
            var alarmManger = new AlarmMessageManager(alarmQueue);
            var ruleStorage = new DocumentDBRuleStorage(ConfigurationManager.AppSettings["DocDBEndPointUrl"], ConfigurationManager.AppSettings["AuthorizationKey"], ConfigurationManager.AppSettings["RuleDatabaseId"], ConfigurationManager.AppSettings["RuleCollectionId"]);

            var eventStore = new SQLEventStore(Logger, ConfigurationManager.AppSettings["sqleventstoreConnection"]);

            var restartInput = new RestartInput()
            {
                RuleStorage = ruleStorage, AlarmMessageManager = alarmManger, EngineProgram = engineProgram
            };
            var engineRestartTimer = new Timer(RestartLoop, restartInput, 0, 5000);

            Timers.Add(engineRestartTimer);

            var eventProcessorThread = new Thread(() =>
            {
                var recTask = hubProcessor.StartReceiver <EventProcessor>(storageConnection);
                EventProcessor.Init(Engine, Logger, ErrorLogger, eventStore);
                recTask.Wait();
            });

            eventProcessorThread.Name = nameof(eventProcessorThread);

            var gui       = new GuiHandler(engineProgram);
            var guiThread = new Thread(gui.Run);

            guiThread.IsBackground = true;
            guiThread.Start();
            guiThread.Name = nameof(guiThread);
            eventProcessorThread.Priority = ThreadPriority.AboveNormal;
            eventProcessorThread.Start();
        }
        public void AppendToStream_Should_Append_Event_To_Stream()
        {
            // Assert
            var context    = new ModuleDomainServiceContext(_options);
            var eventStore = new SQLEventStore(context);

            // Act
            eventStore.AppendToStream(new EventStream("uniqueId", 0, new List <DomainEvent>
            {
                new ModuleGecreeerd
                {
                    ModuleCode = "IOPR",
                    ModuleNaam = "Object georienteerd programeren",
                    AantalEc   = 3,
                    Cohort     = "2019/2020"
                }
            }));

            // Assert
            Assert.IsTrue(context.Stream.Any(@event => @event.Stream.Id.Equals("uniqueId")));
        }