//#region Dynamic Config Variables //public List<ConfigVariable> ConfigVariables { get; set; } //#endregion #endregion #region Refreshing state and getting alerts /// <summary> /// Queries the agent to get the latest state. /// </summary> /// <returns>True or False but not both I hope</returns> public MonitorState GetCurrentState(bool disablePollingOverrides = false) { RefreshCount++; CurrentPollAborted = false; if (LastMonitorState == null) { LastMonitorState = new MonitorState() { State = CollectorState.NotAvailable } } ; if (CurrentState == null) { CurrentState = new MonitorState() { State = CollectorState.NotAvailable }; LastStateUpdate = DateTime.Now; } if (LastMonitorState.State != CollectorState.ConfigurationError) { if (!IsEnabledNow()) { LastMonitorState = CurrentState.Clone(); CurrentState.State = CollectorState.Disabled; StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; } //if (!Enabled) //{ // CurrentState.State = CollectorState.Disabled; // StagnantStateFirstRepeat = false; // StagnantStateSecondRepeat = false; // StagnantStateThirdRepeat = false; //} //else if (!ServiceWindows.IsInTimeWindow()) //{ // LastMonitorState = CurrentState.Clone(); // CurrentState.State = CollectorState.Disabled; // StagnantStateFirstRepeat = false; // StagnantStateSecondRepeat = false; // StagnantStateThirdRepeat = false; //} else if (IsFolder) { LastMonitorState = CurrentState.Clone(); CurrentState.State = CollectorState.Folder; StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; } else if (CurrentState.State != CollectorState.NotAvailable && !disablePollingOverrides && EnabledPollingOverride && !EnablePollFrequencySliding && (LastStateUpdate.AddSeconds(OnlyAllowUpdateOncePerXSec) > DateTime.Now)) { //Not time yet for update CurrentPollAborted = true; } else if (CurrentState.State != CollectorState.NotAvailable && !disablePollingOverrides && EnabledPollingOverride && EnablePollFrequencySliding && ( (StagnantStateThirdRepeat && (LastStateUpdate.AddSeconds(PollSlideFrequencyAfterThirdRepeatSec) > DateTime.Now)) || (!StagnantStateThirdRepeat && StagnantStateSecondRepeat && (LastStateUpdate.AddSeconds(PollSlideFrequencyAfterSecondRepeatSec) > DateTime.Now)) || (!StagnantStateThirdRepeat && !StagnantStateSecondRepeat && StagnantStateFirstRepeat && (LastStateUpdate.AddSeconds(PollSlideFrequencyAfterFirstRepeatSec) > DateTime.Now)) || (!StagnantStateFirstRepeat && !StagnantStateThirdRepeat && !StagnantStateSecondRepeat && (LastStateUpdate.AddSeconds(OnlyAllowUpdateOncePerXSec) > DateTime.Now)) ) ) { //Not time yet for update CurrentPollAborted = true; } else { //*********** Call actual collector GetState ********** LastStateCheckAttemptBegin = DateTime.Now; LastMonitorState = CurrentState.Clone(); System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); if (EnableRemoteExecute || (OverrideRemoteAgentHost && !BlockParentOverrideRemoteAgentHostSettings)) { string currentHostAddress = EnableRemoteExecute ? this.RemoteAgentHostAddress : OverrideRemoteAgentHostAddress; int currentHostPort = EnableRemoteExecute ? this.RemoteAgentHostPort : OverrideRemoteAgentHostPort; try { CurrentState = CollectorEntryRelay.GetRemoteAgentState(this, currentHostAddress, currentHostPort); } catch (Exception ex) { CurrentState.Timestamp = DateTime.Now; if (RunLocalOnRemoteHostConnectionFailure && ex.Message.Contains("There was no endpoint listening")) { //attempting to run locally try { CurrentState = Collector.GetState(); } catch (Exception exLocal) { CurrentState.State = CollectorState.Error; CurrentState.RawDetails = exLocal.ToString(); } CurrentState.RawDetails = "Remote excution failed. Attempting to run locally\r\n" + CurrentState.RawDetails; } else { CurrentState.State = CollectorState.Error; CurrentState.RawDetails = ex.ToString(); } CurrentState.ExecutedOnHostComputer = System.Net.Dns.GetHostName(); } } //if (EnableRemoteExecute) //{ // try // { // CurrentState = CollectorEntryRelay.GetRemoteAgentState(this); // } // catch (Exception ex) // { // CurrentState.Timestamp = DateTime.Now; // if (ex.Message.Contains("There was no endpoint listening")) // { // //attempting to run locally // try // { // CurrentState = Collector.GetState(); // } // catch (Exception exLocal) // { // CurrentState.State = CollectorState.Error; // CurrentState.RawDetails = exLocal.ToString(); // } // CurrentState.RawDetails = "Remote excution failed. Attempting to run locally\r\n" + CurrentState.RawDetails; // } // else // { // CurrentState.State = CollectorState.Error; // CurrentState.RawDetails = ex.ToString(); // } // CurrentState.ExecutedOnHostComputer = System.Net.Dns.GetHostName(); // } //} //else if (OverrideRemoteAgentHost && !BlockParentOverrideRemoteAgentHostSettings) //{ // try // { // CurrentState = CollectorEntryRelay.GetRemoteAgentState(this, OverrideRemoteAgentHostAddress, OverrideRemoteAgentHostPort); // } // catch (Exception ex) // { // CurrentState.Timestamp = DateTime.Now; // if (ex.Message.Contains("There was no endpoint listening")) // { // //attempting to run locally // try // { // CurrentState = Collector.GetState(); // } // catch (Exception exLocal) // { // CurrentState.State = CollectorState.Error; // CurrentState.RawDetails = exLocal.ToString(); // } // CurrentState.RawDetails = "Remote excution failed. Attempting to run locally\r\n" + CurrentState.RawDetails; // } // else // { // CurrentState.State = CollectorState.Error; // CurrentState.RawDetails = ex.ToString(); // } // CurrentState.ExecutedOnHostComputer = System.Net.Dns.GetHostName(); // } //} else //Use LOCAL execution { CurrentState = Collector.GetState(); CurrentState.ExecutedOnHostComputer = System.Net.Dns.GetHostName(); } sw.Stop(); if (LastMonitorState.State != CurrentState.State) { StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; } else if (!StagnantStateFirstRepeat) { StagnantStateFirstRepeat = true; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; } else if (!StagnantStateSecondRepeat) { StagnantStateSecondRepeat = true; StagnantStateThirdRepeat = false; } else if (!StagnantStateThirdRepeat) { StagnantStateThirdRepeat = true; } //Updating stats CurrentState.CallDurationMS = (int)sw.ElapsedMilliseconds; LastStateUpdate = DateTime.Now; if (FirstStateUpdate < (new DateTime(2000, 1, 1))) { FirstStateUpdate = DateTime.Now; } PollCount++; if (CurrentState.State == CollectorState.Good) { LastGoodState = CurrentState.Clone(); LastGoodStateTime = DateTime.Now; GoodStateCount++; } else if (CurrentState.State == CollectorState.Warning) { LastWarningState = CurrentState.Clone(); LastWarningStateTime = DateTime.Now; WarningStateCount++; } else if (CurrentState.State == CollectorState.Error) { LastErrorState = CurrentState.Clone(); LastErrorStateTime = DateTime.Now; ErrorStateCount++; } AddStateToHistory(CurrentState.Clone()); //add details for historic details - still missing alert details though....hmmm } } else { CurrentState.State = CollectorState.ConfigurationError; } return(CurrentState); }
public MonitorState RefreshCurrentState(bool forceRefreshNow = false) { MonitorState resultMonitorState = new MonitorState() { State = CollectorState.NotAvailable, RepeatCount = 0 }; if (AlertHeaderText != null && AlertHeaderText.Trim().Length > 0) { resultMonitorState.AlertHeader = AlertHeaderText; } if (AlertFooterText != null && AlertFooterText.Trim().Length > 0) { resultMonitorState.AlertFooter = AlertFooterText; } RefreshCount++; //CurrentPollAborted = false; PollingOverrideActive = false; if (CurrentState.State != CollectorState.ConfigurationError) { if (InServiceWindow) //currently in Service window { if (ServiceWindows.IsInTimeWindow()) //Service window expired { InServiceWindow = false; RaiseEntereringServiceWindow(); } } else if (!ServiceWindows.IsInTimeWindow()) { InServiceWindow = true; RaiseExitingServiceWindow(); } if (!Enabled) { resultMonitorState.State = CollectorState.Disabled; StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; resultMonitorState.RawDetails = "Collector host is disabled."; } else if (InServiceWindow) { resultMonitorState.State = CollectorState.NotInServiceWindow; StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; resultMonitorState.RawDetails = "Disabled due to 'out of service window' event."; } else if (CollectorAgents == null || CollectorAgents.Count == 0) //like old folder type collector { resultMonitorState.State = CollectorState.None; StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; resultMonitorState.RawDetails = "There are no agents."; } else if (CollectorAgents != null && CollectorAgents.Count == CollectorAgents.Count(ca => !ca.Enabled)) { resultMonitorState.State = CollectorState.Disabled; StagnantStateFirstRepeat = false; StagnantStateSecondRepeat = false; StagnantStateThirdRepeat = false; resultMonitorState.RawDetails = "Disabled because all agents are disabled."; } else if (CurrentState.State != CollectorState.NotAvailable && !forceRefreshNow && EnabledPollingOverride && !EnablePollFrequencySliding && (LastStateUpdate.AddSeconds(OnlyAllowUpdateOncePerXSec) > DateTime.Now)) { //Not time yet for update PollingOverrideActive = true; //CurrentPollAborted = true; //repeat same State resultMonitorState = null; resultMonitorState = CurrentState; //resultMonitorState.Timestamp = DateTime.Now; //if (resultMonitorState.RawDetails == null) // resultMonitorState.RawDetails = ""; //if (resultMonitorState.RawDetails.Length > 0) // resultMonitorState.RawDetails += "\r\n"; //resultMonitorState.RawDetails += "Due to polling override (OnlyAllowUpdateOncePerXSec) the previous state is repeated."; //resultMonitorState.State = CurrentState.State; //resultMonitorState.CurrentValue = CurrentState.ReadValues(); //resultMonitorState.RawDetails = "Due to polling override (OnlyAllowUpdateOncePerXSec) the previous state is repeated."; RaiseLoggingPollingOverridesTriggeredEvent(string.Format("Polling override of {0} seconds not reached yet", OnlyAllowUpdateOncePerXSec)); } else if (CurrentState.State != CollectorState.NotAvailable && !forceRefreshNow && EnabledPollingOverride && EnablePollFrequencySliding && !StagnantStateFirstRepeat && !StagnantStateThirdRepeat && !StagnantStateSecondRepeat && LastStateUpdate.AddSeconds(OnlyAllowUpdateOncePerXSec - 1) > DateTime.Now) { PollingOverrideActive = true; resultMonitorState = null; resultMonitorState = CurrentState; StagnantStateFirstRepeat = true; LastStateUpdate = DateTime.Now; } else if (CurrentState.State != CollectorState.NotAvailable && !forceRefreshNow && EnabledPollingOverride && EnablePollFrequencySliding && StagnantStateFirstRepeat && !StagnantStateThirdRepeat && !StagnantStateSecondRepeat && LastStateUpdate.AddSeconds(PollSlideFrequencyAfterFirstRepeatSec - 1) > DateTime.Now) { PollingOverrideActive = true; resultMonitorState = null; resultMonitorState = CurrentState; StagnantStateFirstRepeat = true; StagnantStateSecondRepeat = true; LastStateUpdate = DateTime.Now; } else if (CurrentState.State != CollectorState.NotAvailable && !forceRefreshNow && EnabledPollingOverride && EnablePollFrequencySliding && StagnantStateFirstRepeat && StagnantStateThirdRepeat && !StagnantStateSecondRepeat && LastStateUpdate.AddSeconds(PollSlideFrequencyAfterSecondRepeatSec - 1) > DateTime.Now) { PollingOverrideActive = true; resultMonitorState = null; resultMonitorState = CurrentState; StagnantStateFirstRepeat = true; StagnantStateSecondRepeat = true; StagnantStateThirdRepeat = true; LastStateUpdate = DateTime.Now; } else if (CurrentState.State != CollectorState.NotAvailable && !forceRefreshNow && EnabledPollingOverride && EnablePollFrequencySliding && StagnantStateFirstRepeat && StagnantStateThirdRepeat && StagnantStateSecondRepeat && LastStateUpdate.AddSeconds(PollSlideFrequencyAfterThirdRepeatSec - 1) > DateTime.Now) { PollingOverrideActive = true; resultMonitorState = null; resultMonitorState = CurrentState; StagnantStateFirstRepeat = true; StagnantStateSecondRepeat = true; StagnantStateThirdRepeat = true; if (!stagnantStateMaxReached) { LastStateUpdate = DateTime.Now; stagnantStateMaxReached = true; } } //else if (CurrentState.State != CollectorState.NotAvailable && !forceRefreshNow && EnabledPollingOverride && EnablePollFrequencySliding && // ( // (StagnantStateThirdRepeat && (LastStateUpdate.AddSeconds(PollSlideFrequencyAfterThirdRepeatSec) > DateTime.Now)) || // (!StagnantStateThirdRepeat && StagnantStateSecondRepeat && (LastStateUpdate.AddSeconds(PollSlideFrequencyAfterSecondRepeatSec) > DateTime.Now)) || // (!StagnantStateThirdRepeat && !StagnantStateSecondRepeat && StagnantStateFirstRepeat && (LastStateUpdate.AddSeconds(PollSlideFrequencyAfterFirstRepeatSec) > DateTime.Now)) || // (!StagnantStateFirstRepeat && !StagnantStateThirdRepeat && !StagnantStateSecondRepeat && (LastStateUpdate.AddSeconds(OnlyAllowUpdateOncePerXSec) > DateTime.Now)) // ) // ) //{ // //Not time yet for update // //CurrentPollAborted = true; // //repeat same State // resultMonitorState = null; // resultMonitorState = CurrentState.Clone(); // resultMonitorState.Timestamp = DateTime.Now; // //if (resultMonitorState.RawDetails == null) // // resultMonitorState.RawDetails = ""; // //if (resultMonitorState.RawDetails.Length > 0) // // resultMonitorState.RawDetails += "\r\n"; // //resultMonitorState.State = CurrentState.State; // //resultMonitorState.CurrentValue = CurrentState.ReadValues(); // //if (StagnantStateThirdRepeat) // // resultMonitorState.RawDetails += "Due to polling override (StagnantStateThirdRepeat) the previous state is repeated."; // //else if (StagnantStateSecondRepeat) // // resultMonitorState.RawDetails += "Due to polling override (StagnantStateSecondRepeat) the previous state is repeated."; // //else if (StagnantStateFirstRepeat) // // resultMonitorState.RawDetails += "Due to polling override (StagnantStateFirstRepeat) the previous state is repeated."; // //else // // resultMonitorState.RawDetails += "Due to polling override (EnablePollFrequencySliding) the previous state is repeated."; //} else { stagnantStateMaxReached = false; //*********** Call actual collector GetState ********** LastStateCheckAttemptBegin = DateTime.Now; System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); //Applies config vars to Initial configs of agents (on the run) ApplyConfigVarsNow(); sw.Start(); //first check if remote host exection is required if (EnableRemoteExecute || (OverrideRemoteAgentHost && !BlockParentOverrideRemoteAgentHostSettings)) { resultMonitorState = GetRemoteState(); } else if (!RunAsEnabled || RunAs == null || RunAs.Length == 0 || RunTimeUserNameCacheFile == null || RunTimeUserNameCacheFile.Length == 0 || RunTimeMasterKey == null || RunTimeMasterKey.Length == 0) { resultMonitorState = GetStateFromLocalCurrentUser(); } else { resultMonitorState = GetStateFromLocal(); } sw.Stop(); resultMonitorState.CallDurationMS = (int)sw.ElapsedMilliseconds; RaiseAllAgentsExecutionTime(sw.ElapsedMilliseconds); #region Calculate summarized state if (resultMonitorState.ChildStates != null && resultMonitorState.ChildStates.Count > 0) { int allCount = resultMonitorState.ChildStates.Count; int disabledCount = (from cs in resultMonitorState.ChildStates where cs.State == CollectorState.Disabled select cs).Count(); int goodCount = (from cs in resultMonitorState.ChildStates where cs.State == CollectorState.Good select cs).Count(); int warningCount = (from cs in resultMonitorState.ChildStates where cs.State == CollectorState.Warning select cs).Count(); int errorCount = (from cs in resultMonitorState.ChildStates where cs.State == CollectorState.Error select cs).Count(); if (allCount == disabledCount) { resultMonitorState.State = CollectorState.Disabled; } else if (AgentCheckSequence == QuickMon.AgentCheckSequence.All) { if (allCount - disabledCount == goodCount) { resultMonitorState.State = CollectorState.Good; } else if (allCount - disabledCount == errorCount) { resultMonitorState.State = CollectorState.Error; } else { resultMonitorState.State = CollectorState.Warning; } } else if (AgentCheckSequence == QuickMon.AgentCheckSequence.FirstSuccess) { if (goodCount > 0) { resultMonitorState.State = CollectorState.Good; } else if (warningCount > 0) { resultMonitorState.State = CollectorState.Warning; } else { resultMonitorState.State = CollectorState.Error; } } else { if (errorCount > 0) { resultMonitorState.State = CollectorState.Error; } else if (warningCount > 0) { resultMonitorState.State = CollectorState.Warning; } else { resultMonitorState.State = CollectorState.Good; } } } #endregion } } else { resultMonitorState.State = CollectorState.ConfigurationError; } //Set current CH state plus raise any alerts if required // if (!PollingOverrideActive) SetCurrentState(resultMonitorState); return(resultMonitorState); }