public override void Start(MonitorAction monitorAction)
        {
            Logger.Info("ENABLING sound alarm: " + ListFiles(monitorAction.SoundFiles));

            FileInfo file = GetRandomSoundFile(monitorAction.SoundFiles);
            using (var player = new SoundPlayer(file.FullName))
            {
                player.Play();
            }
        }
        public override void Start(MonitorAction monitorAction)
        {
            Logger.Info("ENABLING light alarm");

            lock (StatusLockingObj)
            {
                if (!_isRunning)
                {
                    DateTime stopTime = DateTime.Now + new TimeSpan(0, 0, monitorAction.LightAlarmDurationInSeconds);
                    _alarmThread = new Thread(() => StopAlarmAtGivenTime(stopTime));
                    _alarmThread.Start();
                    _isRunning = true;
                    Exec("on");
                }
            }
        }
        private bool PerformMonitorAction(MonitorAction action)
        {
            bool passed = true;
            string wrongnessMessage = "";
            try
            {
                bool result = action.GetStatus();
                if (!result)
                {
                    wrongnessMessage = string.Format("Somethings Wrong! {0} IS FAILING\n" +
                                                            "Found problem when: {1}\n",
                                                            action.Name, action.GetActionDetails());
                    passed = false;

                }

            }
            catch(WebException ex)
            {
                if(!action.FailAtNetworkException)
                {
                    Logger.Debug("skipping WebException for " + action.Name);
                    passed = true;
                }
                else
                {
                    wrongnessMessage = string.Format("Something's Wrong! {0} IS FAILING\n" +
                                                            "Found problem when: {1}\n" +
                                                            "details: {2}",
                                                            action.Name, action.GetActionDetails(), ex.Message);
                    passed = false;
                }
            }
            catch (Exception ex)
            {
                wrongnessMessage = string.Format("Something's Wrong! {0} IS FAILING\n" +
                                                            "Found problem when: {1}\n" +
                                                            "details: {2}",
                                                            action.Name, action.GetActionDetails(), ex.Message);
                passed = false;
            }

            if (!passed)
            {
                if (!action.MarkedAsFailing) //first fail
                {
                    Logger.Info(action.Name + " started to fail");
                    action.MarkedAsFailing = true;
                    Logger.Info(wrongnessMessage);
                    StartAlerts(action);
                }
                Logger.Info(action.GetActionDetails() + " continue failing");
                return false;
            }

            if(action.MarkedAsFailing)
            {
                Logger.Info(action.Name + " stopped failing");
                action.MarkedAsFailing = false;
            }
            return true;
        }
 public abstract void Start(MonitorAction monitorAction);
 private void StartAlerts(MonitorAction monitorAction)
 {
     foreach(AlertAction action in _alertActions)
     {
         action.Start(monitorAction);
     }
 }