public LoadBalancer(Illuminate.Contexts.AgentContext context, string logName) { _dataService = context.NodeDataService; LOGNAME = logName; _sentWarningMessages = new Dictionary<string, List<LoadBalancingWarning.WarningTypeEnum>>(); _systemLoads = new Dictionary<string, Illuminate.Node.Entities.ISystemLoad>(); _nodeAgentManagement = new NodeAgentManagement(_dataService, LOGNAME); _nodeAgentManagement.OnSendWarning += new NodeAgentManagement.OnSendWarningDelegate(QueueWarningEmail); _warningMessages = new List<LoadBalancingWarning>(); _nodeWarningSendTime = new Dictionary<string, DateTime>(); string warningDisplayName = _dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.LoadBalancerDisplayName); if (!string.IsNullOrEmpty(warningDisplayName)) _warningDisplayName = warningDisplayName; Logger.WriteLine("LoadBalancerDisplayName: " + _warningDisplayName, Logger.Severity.Debug, LOGNAME); _warningFromAddress = _dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.LoadBalancerFromAddress); if (string.IsNullOrEmpty(_warningFromAddress)) throw new Illuminate.Exceptions.ErrorException("LoadBalancerFromAddress either not defined or invalid."); Logger.WriteLine("LoadBalancerFromAddress: " + _warningFromAddress, Logger.Severity.Debug, LOGNAME); _warningToAddress = _dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.LoadBalancerWarningDest); if (string.IsNullOrEmpty(_warningToAddress)) throw new Illuminate.Exceptions.ErrorException("LoadBalancerWarningTo either not defined or invalid."); Logger.WriteLine("LoadBalancerWarningTo: " + _warningToAddress, Logger.Severity.Debug, LOGNAME); if (!int.TryParse(_dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.MaxWaitBeforeDead), out _maxWaitBeforeDead)) throw new Illuminate.Exceptions.ErrorException("MaxWaitBeforeDead either not defined or invalid."); Logger.WriteLine("MaxWaitBeforeDead: " + _maxWaitBeforeDead.ToString(), Logger.Severity.Debug, LOGNAME); if (!double.TryParse(_dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.OptimalSystemLoad), out _optimalSystemLoad)) throw new Illuminate.Exceptions.ErrorException("OptimalSystemLoad either not defined or invalid."); Logger.WriteLine("OptimalSystemLoad: " + _optimalSystemLoad.ToString(), Logger.Severity.Debug, LOGNAME); if (!double.TryParse(_dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.OptimalLoadWindowSize), out _optimalLoadWindowSize)) throw new Illuminate.Exceptions.ErrorException("OptimalLoadWindowSize either not defined or invalid."); Logger.WriteLine("OptimalLoadWindowSize: " + _optimalLoadWindowSize.ToString(), Logger.Severity.Debug, LOGNAME); _optimalSystemLoadLowerBound = _optimalSystemLoad - _optimalLoadWindowSize; _optimalSystemLoadUpperBound = _optimalSystemLoad + _optimalLoadWindowSize; string extendedLoadBalancer = _dataService.Monitor.GetSetting(Illuminate.Node.Managers.Settings.ExtendedLoadBalancer); if (!string.IsNullOrEmpty(extendedLoadBalancer)) { Logger.WriteLine("ExtendedLoadBalancer: " + extendedLoadBalancer, Logger.Severity.Information, LOGNAME); try { Invoker inv = new Invoker(); _extendedLoadBalancer = (ILoadBalancer)inv.Invoke(context.AgentPath + extendedLoadBalancer, typeof(ILoadBalancer)); _extendedLoadBalancer.InitializePlugin(_dataService, LOGNAME); } catch (Exception ex) { Logger.WriteLine("Unable to load extended load balancer: " + ex.Message, Logger.Severity.Error, LOGNAME); _extendedLoadBalancer = null; } } //load initial data UpdateSystemLoadCache(); }