コード例 #1
0
        public bool RaiseAlert()
        {
            bool raiseAlert = false;

            if (IsFolder || !Enabled ||               //don't bother raising events for folders, disabled, N/A or collectors
                CurrentState == MonitorStates.Good || //No alerts for Good state
                CurrentState == MonitorStates.NotAvailable ||
                CurrentState == MonitorStates.Disabled)
            {
                raiseAlert      = false;
                LastStateChange = DateTime.Now;
                waitAlertTimeErrWarnInMinFlagged = false;
            }
            else
            {
                bool stateChanged = (LastMonitorState != CurrentState);

                if (stateChanged)
                {
                    if (DelayErrWarnAlertForXSec > 0) // alert should be delayed
                    {
                        delayErrWarnAlertTime            = DateTime.Now.AddSeconds(DelayErrWarnAlertForXSec);
                        waitAlertTimeErrWarnInMinFlagged = true;
                    }
                    else
                    {
                        raiseAlert = true;
                    }
                }
                else
                {
                    if (waitAlertTimeErrWarnInMinFlagged) //waiting for delayed alert
                    {
                        if (DateTime.Now > delayErrWarnAlertTime)
                        {
                            raiseAlert = true;
                            waitAlertTimeErrWarnInMinFlagged = false;
                            //handle further alerts as if it changed now again
                            LastStateChange = DateTime.Now;
                        }
                        else
                        {
                            raiseAlert = false;
                        }
                    }
                    else
                    {
                        if (RepeatAlertInXMin > 0)
                        {
                            if (LastStateChange.AddMinutes(RepeatAlertInXMin) < DateTime.Now)
                            {
                                raiseAlert = true;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else
                            {
                                raiseAlert = false;
                            }
                        }
                        else
                        {
                            raiseAlert = false;
                        }
                    }
                }
                if (raiseAlert)
                {
                    //only allow repeat alert after specified minutes
                    if (AlertOnceInXMin > 0 && LastAlertTime.AddMinutes(AlertOnceInXMin) > DateTime.Now)
                    {
                        raiseAlert = false; //cancel alert
                    }
                }
                if (raiseAlert)
                {
                    LastAlertTime = DateTime.Now; //reset alert time
                }
            }
            return(raiseAlert);
        }
コード例 #2
0
        public void SetCurrentState(MonitorState newState)
        {
            bool raiseAlertNow = false;

            if (!PollingOverrideActive)
            {
                if (currentState != null)
                {
                    LastStateUpdate = DateTime.Now;
                    if (FirstStateUpdate < (new DateTime(2000, 1, 1)))
                    {
                        FirstStateUpdate = DateTime.Now;
                    }

                    bool stateChanged = currentState.State != newState.State;

                    #region Polling overide stuff
                    if (stateChanged)
                    {
                        LastStateChange           = DateTime.Now;
                        StagnantStateFirstRepeat  = false;
                        StagnantStateSecondRepeat = false;
                        StagnantStateThirdRepeat  = false;
                        if (EnabledPollingOverride && EnablePollFrequencySliding && CurrentState.State != CollectorState.NotAvailable)
                        {
                            RaiseLoggingPollingOverridesTriggeredEvent("Frequency sliding cancelled due to collector state value changed");
                        }
                    }
                    else if (EnabledPollingOverride && EnablePollFrequencySliding && CurrentState.State != CollectorState.NotAvailable)
                    {
                        if (!StagnantStateFirstRepeat)
                        {
                            newState.RepeatCount      = 1;
                            StagnantStateFirstRepeat  = true;
                            StagnantStateSecondRepeat = false;
                            StagnantStateThirdRepeat  = false;
                            RaiseLoggingPollingOverridesTriggeredEvent("Frequency sliding reached 1st stagnant stage");
                        }
                        else if (!StagnantStateSecondRepeat)
                        {
                            newState.RepeatCount      = 2;
                            StagnantStateSecondRepeat = true;
                            StagnantStateThirdRepeat  = false;
                            RaiseLoggingPollingOverridesTriggeredEvent("Frequency sliding reached 2nd stagnant stage");
                        }
                        else if (!StagnantStateThirdRepeat)
                        {
                            newState.RepeatCount     = 3;
                            StagnantStateThirdRepeat = true;
                            RaiseLoggingPollingOverridesTriggeredEvent("Frequency sliding reached 3rd stagnant stage");
                        }
                    }
                    #endregion

                    #region Check if alert should be raised now
                    if (stateChanged)
                    {
                        if (newState.State == CollectorState.Good)
                        {
                            numberOfPollingsInErrWarn = 0;
                        }
                        if (DelayErrWarnAlertForXSec > 0 || DelayErrWarnAlertForXPolls > 0) // alert should be delayed
                        {
                            delayErrWarnAlertTime            = DateTime.Now.AddSeconds(DelayErrWarnAlertForXSec);
                            numberOfPollingsInErrWarn        = 0;
                            waitAlertTimeErrWarnInMinFlagged = true;
                        }
                        else
                        {
                            raiseAlertNow = true;
                        }
                    }
                    else
                    {
                        if (waitAlertTimeErrWarnInMinFlagged) //waiting for delayed alert
                        {
                            if (DelayErrWarnAlertForXSec > 0 && DateTime.Now > delayErrWarnAlertTime)
                            {
                                raiseAlertNow = true;
                                waitAlertTimeErrWarnInMinFlagged = false;
                                numberOfPollingsInErrWarn        = 0;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else if (DelayErrWarnAlertForXPolls > 0 && DelayErrWarnAlertForXPolls <= numberOfPollingsInErrWarn)
                            {
                                raiseAlertNow = true;
                                waitAlertTimeErrWarnInMinFlagged = false;
                                numberOfPollingsInErrWarn        = 0;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else
                            {
                                raiseAlertNow = false;
                            }
                        }
                        else
                        {
                            if (
                                (RepeatAlertInXMin > 0 && (LastStateChange.AddMinutes(RepeatAlertInXMin) < DateTime.Now)) ||
                                (RepeatAlertInXPolls > 0 && RepeatAlertInXPolls <= numberOfPollingsInErrWarn)
                                )
                            {
                                raiseAlertNow             = true;
                                numberOfPollingsInErrWarn = 0;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else
                            {
                                raiseAlertNow = false;
                            }
                        }
                    }
                    if (raiseAlertNow)
                    {
                        //only allow repeat alert after specified minutes
                        if (AlertOnceInXMin > 0 && LastAlertTime.AddMinutes(AlertOnceInXMin) > DateTime.Now)
                        {
                            raiseAlertNow = false; //cancel alert
                        }
                    }
                    else
                    {
                        if (newState.State == CollectorState.Warning || newState.State == CollectorState.Error)
                        {
                            numberOfPollingsInErrWarn++;
                        }
                        else
                        {
                            numberOfPollingsInErrWarn = 0;
                        }
                    }
                    #endregion

                    AddStateToHistory(currentState);

                    #region Corrective scripts
                    try
                    {
                        if (!CorrectiveScriptDisabled && (ParentMonitorPack == null || ParentMonitorPack.CorrectiveScriptsEnabled))
                        {
                            if (newState.State == CollectorState.Good && (currentState.State == CollectorState.Error || currentState.State == CollectorState.Warning))
                            {
                                foreach (string scriptName in RunRestorationScripts(stateChanged))
                                {
                                    newState.ScriptsRan.Add("Restoration script: " + scriptName);
                                }
                            }
                            else // if (stateChanged || !CorrectiveScriptsOnlyOnStateChange)
                            {
                                if (newState.State == CollectorState.Error)
                                {
                                    foreach (string scriptName in RunErrorCorrectiveScripts(stateChanged))
                                    {
                                        newState.ScriptsRan.Add("Error corrective script: " + scriptName);
                                    }
                                }
                                else if (newState.State == CollectorState.Warning)
                                {
                                    foreach (string scriptName in RunWarningCorrectiveScripts(stateChanged))
                                    {
                                        newState.ScriptsRan.Add("Warning corrective script: " + scriptName);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception corrEx)
                    {
                        CorrectiveScriptExecutionFailed?.Invoke(this, "Error executing corrective scripts", corrEx.Message);
                    }
                    #endregion
                }

                currentState = newState;

                #region Set Alert texts
                if (AlertHeaderText != null && AlertHeaderText.Trim().Length > 0)
                {
                    currentState.AlertHeader = AlertHeaderText;
                }
                if (AlertFooterText != null && AlertFooterText.Trim().Length > 0)
                {
                    currentState.AlertFooter = AlertFooterText;
                }
                if (currentState.State == CollectorState.Good && GoodAlertText != null && GoodAlertText.Trim().Length > 0)
                {
                    currentState.AdditionalAlertText = GoodAlertText;
                }
                else if (currentState.State == CollectorState.Warning && WarningAlertText != null && WarningAlertText.Trim().Length > 0)
                {
                    currentState.AdditionalAlertText = WarningAlertText;
                }
                else if (currentState.State == CollectorState.Error && ErrorAlertText != null && ErrorAlertText.Trim().Length > 0)
                {
                    currentState.AdditionalAlertText = ErrorAlertText;
                }
                #endregion
            }

            RaiseStateUpdated();

            #region Raise event for Alert to be handled by Monitorpack
            if (raiseAlertNow)
            {
                LastAlertTime = DateTime.Now; //reset alert time
                switch (newState.State)
                {
                case CollectorState.Good:
                    LastGoodState = newState;
                    GoodStateCount++;
                    RaiseAlertGoodState();
                    break;

                case CollectorState.Warning:
                    LastWarningState = newState;
                    WarningStateCount++;
                    RaiseAlertWarningState();
                    break;

                case CollectorState.Error:
                case CollectorState.ConfigurationError:
                    LastErrorState = newState;
                    ErrorStateCount++;
                    RaiseAlertErrorState();
                    break;

                default:
                    RaiseNoStateChanged();
                    break;
                }
            }
            else
            {
                RaiseNoStateChanged();
            }
            #endregion
        }
コード例 #3
0
        /// <summary>
        /// Check if an Alert must be raised or not.
        /// </summary>
        /// <returns>True or False, you decide</returns>
        public bool RaiseAlert()
        {
            bool raiseAlert = false;

            if (IsFolder || !Enabled || //don't bother raising events for folders, disabled, N/A or collectors
                //CurrentState.State == CollectorState.Good || //No alerts for Good state
                CurrentState.State == CollectorState.NotAvailable ||
                CurrentState.State == CollectorState.Disabled)
            {
                raiseAlert      = false;
                LastStateChange = DateTime.Now;
                waitAlertTimeErrWarnInMinFlagged = false;
            }
            else
            {
                if (CurrentPollAborted)
                {
                    raiseAlert = false;
                }
                else
                {
                    bool stateChanged = (LastMonitorState.State != CurrentState.State);

                    if (stateChanged)
                    {
                        if (LastMonitorState.State == CollectorState.Good)
                        {
                            numberOfPollingsInErrWarn = 0;
                        }

                        if (DelayErrWarnAlertForXSec > 0 || DelayErrWarnAlertForXPolls > 0) // alert should be delayed
                        {
                            delayErrWarnAlertTime            = DateTime.Now.AddSeconds(DelayErrWarnAlertForXSec);
                            numberOfPollingsInErrWarn        = 0;
                            waitAlertTimeErrWarnInMinFlagged = true;
                        }
                        else
                        {
                            raiseAlert = true;
                        }
                    }
                    else
                    {
                        if (waitAlertTimeErrWarnInMinFlagged) //waiting for delayed alert
                        {
                            if (DelayErrWarnAlertForXSec > 0 && DateTime.Now > delayErrWarnAlertTime)
                            {
                                raiseAlert = true;
                                waitAlertTimeErrWarnInMinFlagged = false;
                                numberOfPollingsInErrWarn        = 0;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else if (DelayErrWarnAlertForXPolls > 0 && DelayErrWarnAlertForXPolls <= numberOfPollingsInErrWarn)
                            {
                                raiseAlert = true;
                                waitAlertTimeErrWarnInMinFlagged = false;
                                numberOfPollingsInErrWarn        = 0;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else
                            {
                                raiseAlert = false;
                            }
                        }
                        else
                        {
                            if (
                                (RepeatAlertInXMin > 0 && (LastStateChange.AddMinutes(RepeatAlertInXMin) < DateTime.Now)) ||
                                (RepeatAlertInXPolls > 0 && RepeatAlertInXPolls <= numberOfPollingsInErrWarn)
                                )
                            {
                                raiseAlert = true;
                                numberOfPollingsInErrWarn = 0;
                                //handle further alerts as if it changed now again
                                LastStateChange = DateTime.Now;
                            }
                            else
                            {
                                raiseAlert = false;
                            }
                        }
                    }
                }
                if (raiseAlert)
                {
                    //only allow repeat alert after specified minutes
                    if (AlertOnceInXMin > 0 && LastAlertTime.AddMinutes(AlertOnceInXMin) > DateTime.Now)
                    {
                        raiseAlert = false; //cancel alert
                    }
                }
                else
                {
                    if ( //(LastMonitorState.State == CollectorState.Warning || LastMonitorState.State == CollectorState.Error) &&
                        (CurrentState.State == CollectorState.Warning || CurrentState.State == CollectorState.Error))
                    {
                        numberOfPollingsInErrWarn++;
                    }
                    else
                    {
                        numberOfPollingsInErrWarn = 0;
                    }
                }
                if (raiseAlert)
                {
                    LastAlertTime = DateTime.Now; //reset alert time
                    if (CurrentState.State == CollectorState.Warning)
                    {
                        LastWarningAlertTime = DateTime.Now;
                    }
                    if (CurrentState.State == CollectorState.Error)
                    {
                        LastErrorAlertTime = DateTime.Now;
                    }
                }
            }
            return(raiseAlert);
        }