internal WebEventBuffer(BufferedWebEventProvider provider, string bufferMode, WebEventBufferFlushCallback callback)
        {
            this._provider = provider;
            BufferModeSettings settings = RuntimeConfig.GetAppLKGConfig().HealthMonitoring.BufferModes[bufferMode];

            if (settings == null)
            {
                throw new ConfigurationErrorsException(System.Web.SR.GetString("Health_mon_buffer_mode_not_found", new object[] { bufferMode }));
            }
            if (settings.RegularFlushInterval == TimeSpan.MaxValue)
            {
                this._regularFlushIntervalMs = Infinite;
            }
            else
            {
                try
                {
                    this._regularFlushIntervalMs = (long)settings.RegularFlushInterval.TotalMilliseconds;
                }
                catch (OverflowException)
                {
                    this._regularFlushIntervalMs = Infinite;
                }
            }
            if (settings.UrgentFlushInterval == TimeSpan.MaxValue)
            {
                this._urgentFlushIntervalMs = Infinite;
            }
            else
            {
                try
                {
                    this._urgentFlushIntervalMs = (long)settings.UrgentFlushInterval.TotalMilliseconds;
                }
                catch (OverflowException)
                {
                    this._urgentFlushIntervalMs = Infinite;
                }
            }
            this._urgentFlushThreshold = settings.UrgentFlushThreshold;
            this._maxBufferSize        = settings.MaxBufferSize;
            this._maxFlushSize         = settings.MaxFlushSize;
            this._maxBufferThreads     = settings.MaxBufferThreads;
            this._burstWaitTimeMs      = Math.Min(this._burstWaitTimeMs, this._urgentFlushIntervalMs);
            this._flushCallback        = callback;
            this._buffer = new Queue();
            if (this._regularFlushIntervalMs != Infinite)
            {
                this._startTime            = DateTime.UtcNow;
                this._regularTimeoutUsed   = true;
                this._urgentFlushScheduled = false;
                this.SetTimer(this.GetNextRegularFlushDueTimeInMs());
            }
        }
 internal WebEventBuffer(BufferedWebEventProvider provider, string bufferMode, WebEventBufferFlushCallback callback)
 {
     this._provider = provider;
     BufferModeSettings settings = RuntimeConfig.GetAppLKGConfig().HealthMonitoring.BufferModes[bufferMode];
     if (settings == null)
     {
         throw new ConfigurationErrorsException(System.Web.SR.GetString("Health_mon_buffer_mode_not_found", new object[] { bufferMode }));
     }
     if (settings.RegularFlushInterval == TimeSpan.MaxValue)
     {
         this._regularFlushIntervalMs = Infinite;
     }
     else
     {
         try
         {
             this._regularFlushIntervalMs = (long) settings.RegularFlushInterval.TotalMilliseconds;
         }
         catch (OverflowException)
         {
             this._regularFlushIntervalMs = Infinite;
         }
     }
     if (settings.UrgentFlushInterval == TimeSpan.MaxValue)
     {
         this._urgentFlushIntervalMs = Infinite;
     }
     else
     {
         try
         {
             this._urgentFlushIntervalMs = (long) settings.UrgentFlushInterval.TotalMilliseconds;
         }
         catch (OverflowException)
         {
             this._urgentFlushIntervalMs = Infinite;
         }
     }
     this._urgentFlushThreshold = settings.UrgentFlushThreshold;
     this._maxBufferSize = settings.MaxBufferSize;
     this._maxFlushSize = settings.MaxFlushSize;
     this._maxBufferThreads = settings.MaxBufferThreads;
     this._burstWaitTimeMs = Math.Min(this._burstWaitTimeMs, this._urgentFlushIntervalMs);
     this._flushCallback = callback;
     this._buffer = new Queue();
     if (this._regularFlushIntervalMs != Infinite)
     {
         this._startTime = DateTime.UtcNow;
         this._regularTimeoutUsed = true;
         this._urgentFlushScheduled = false;
         this.SetTimer(this.GetNextRegularFlushDueTimeInMs());
     }
 }
        internal WebEventBuffer(BufferedWebEventProvider provider, string bufferMode,
                                WebEventBufferFlushCallback callback)
        {
            Debug.Assert(callback != null, "callback != null");

            _provider = provider;

            HealthMonitoringSection section = RuntimeConfig.GetAppLKGConfig().HealthMonitoring;

            BufferModesCollection bufferModes = section.BufferModes;

            BufferModeSettings bufferModeInfo = bufferModes[bufferMode];

            if (bufferModeInfo == null)
            {
                throw new ConfigurationErrorsException(SR.GetString(SR.Health_mon_buffer_mode_not_found, bufferMode));
            }

            if (bufferModeInfo.RegularFlushInterval == TimeSpan.MaxValue)
            {
                _regularFlushIntervalMs = Infinite;
            }
            else
            {
                try {
                    _regularFlushIntervalMs = (long)bufferModeInfo.RegularFlushInterval.TotalMilliseconds;
                }
                catch (OverflowException) {
                    _regularFlushIntervalMs = Infinite;
                }
            }

            if (bufferModeInfo.UrgentFlushInterval == TimeSpan.MaxValue)
            {
                _urgentFlushIntervalMs = Infinite;
            }
            else
            {
                try {
                    _urgentFlushIntervalMs = (long)bufferModeInfo.UrgentFlushInterval.TotalMilliseconds;
                }
                catch (OverflowException) {
                    _urgentFlushIntervalMs = Infinite;
                }
            }

            _urgentFlushThreshold = bufferModeInfo.UrgentFlushThreshold;
            _maxBufferSize        = bufferModeInfo.MaxBufferSize;
            _maxFlushSize         = bufferModeInfo.MaxFlushSize;
            _maxBufferThreads     = bufferModeInfo.MaxBufferThreads;

            _burstWaitTimeMs = Math.Min(_burstWaitTimeMs, _urgentFlushIntervalMs);

            _flushCallback = callback;

            _buffer = new Queue();

            if (_regularFlushIntervalMs != Infinite)
            {
                _startTime            = DateTime.UtcNow;
                _regularTimeoutUsed   = true;
                _urgentFlushScheduled = false;
                SetTimer(GetNextRegularFlushDueTimeInMs());
            }

            Debug.Trace("WebEventBuffer",
                        "\n_regularFlushIntervalMs=" + _regularFlushIntervalMs +
                        "\n_urgentFlushThreshold=" + _urgentFlushThreshold +
                        "\n_maxBufferSize=" + _maxBufferSize +
                        "\n_maxFlushSize=" + _maxFlushSize +
                        "\n_urgentFlushIntervalMs=" + _urgentFlushIntervalMs);
        }
        internal WebEventBuffer(BufferedWebEventProvider provider, string bufferMode,
                        WebEventBufferFlushCallback callback) {
            Debug.Assert(callback != null, "callback != null");

            _provider = provider;
            
            HealthMonitoringSection section = RuntimeConfig.GetAppLKGConfig().HealthMonitoring;

            BufferModesCollection bufferModes = section.BufferModes;

            BufferModeSettings bufferModeInfo = bufferModes[bufferMode];
            if (bufferModeInfo == null) {
                throw new ConfigurationErrorsException(SR.GetString(SR.Health_mon_buffer_mode_not_found, bufferMode));
            }

            if (bufferModeInfo.RegularFlushInterval == TimeSpan.MaxValue) {
                _regularFlushIntervalMs = Infinite;
            }
            else {
                try {
                    _regularFlushIntervalMs = (long)bufferModeInfo.RegularFlushInterval.TotalMilliseconds;
                }
                catch (OverflowException) {
                    _regularFlushIntervalMs = Infinite;
                }
            }
            
            if (bufferModeInfo.UrgentFlushInterval == TimeSpan.MaxValue) {
                _urgentFlushIntervalMs = Infinite;
            }
            else {
                try {
                    _urgentFlushIntervalMs = (long)bufferModeInfo.UrgentFlushInterval.TotalMilliseconds;
                }
                catch (OverflowException) {
                    _urgentFlushIntervalMs = Infinite;
                }
            }

            _urgentFlushThreshold = bufferModeInfo.UrgentFlushThreshold;
            _maxBufferSize = bufferModeInfo.MaxBufferSize;
            _maxFlushSize = bufferModeInfo.MaxFlushSize;
            _maxBufferThreads = bufferModeInfo.MaxBufferThreads;

            _burstWaitTimeMs = Math.Min(_burstWaitTimeMs, _urgentFlushIntervalMs);
            
            _flushCallback = callback;

            _buffer = new Queue();

            if (_regularFlushIntervalMs != Infinite) {
                _startTime = DateTime.UtcNow;
                _regularTimeoutUsed = true;
                _urgentFlushScheduled = false;
                SetTimer(GetNextRegularFlushDueTimeInMs());
            }

            Debug.Trace("WebEventBuffer",   
                        "\n_regularFlushIntervalMs=" + _regularFlushIntervalMs +
                        "\n_urgentFlushThreshold=" + _urgentFlushThreshold +
                        "\n_maxBufferSize=" + _maxBufferSize +
                        "\n_maxFlushSize=" + _maxFlushSize +
                        "\n_urgentFlushIntervalMs=" + _urgentFlushIntervalMs);
        }