public void ItShouldNotFallOnUnhandledException()
        {
            var steps = new Queue <Action>();
            var timer = new AppMetrTimer(1, () =>
            {
                if (steps.Count == 0)
                {
                    return;
                }
                var step = steps.Dequeue();
                step();
            });

            var waitAllSteps     = new ManualResetEvent(false);
            var execuptionsCount = 0;

            steps.Enqueue(() => execuptionsCount++);
            steps.Enqueue(() => execuptionsCount++);
            steps.Enqueue(() => { throw new InvalidOperationException(); });
            steps.Enqueue(() => execuptionsCount++);
            steps.Enqueue(() => waitAllSteps.Set());

            new Thread(() => timer.Start()).Start();
            waitAllSteps.WaitOne(500);
            timer.Stop();

            Assert.Equal(3, execuptionsCount);
        }
        public MonitoringDataAccess(IMonitoring monitoring, AppMetr appMetr)
        {
            _monitoring = monitoring;
            _appMetr    = appMetr;
            _monitoringCounterService = new MonitoringCounterService(appMetr);

            _flushTimer = new AppMetrTimer(
                MonblankConst.MonitorFlushIntervalMinutes * MillisPerMinute,
                Execute,
                "MonitorFlushJob");
            new Thread(_flushTimer.Start).Start();
        }