internal static HealthMonitoringManager Manager()
 {
     if (s_initing)
     {
         return null;
     }
     if (!s_inited)
     {
         lock (s_lockObject)
         {
             if (s_inited)
             {
                 return s_manager;
             }
             try
             {
                 s_initing = true;
                 s_manager = new HealthMonitoringManager();
             }
             finally
             {
                 s_initing = false;
                 s_inited = true;
             }
         }
     }
     return s_manager;
 }
示例#2
0
 private static void RaiseSystemEventInternal(string message, object source, int eventCode, int eventDetailCode, Exception exception, string nameToAuthenticate)
 {
     if (HealthMonitoringManager.Enabled)
     {
         SystemEventTypeInfo info;
         SystemEventType     type;
         int num;
         int num2;
         WebEventCodes.GetEventArrayIndexsFromEventCode(eventCode, out num, out num2);
         GetSystemEventTypeInfo(eventCode, num, num2, out info, out type);
         if (info != null)
         {
             ArrayList firingRuleInfos = HealthMonitoringManager.Manager()._sectionHelper.FindFiringRuleInfos(info._type, eventCode);
             if (firingRuleInfos.Count == 0)
             {
                 info._dummyEvent.IncrementPerfCounters();
                 info._dummyEvent.IncrementTotalCounters(num, num2);
             }
             else
             {
                 RaiseInternal(NewEventFromSystemEventType(false, type, message, source, eventCode, eventDetailCode, exception, nameToAuthenticate), firingRuleInfos, num, num2);
             }
         }
     }
 }
示例#3
0
 internal static HealthMonitoringManager Manager()
 {
     if (s_initing)
     {
         return(null);
     }
     if (!s_inited)
     {
         lock (s_lockObject)
         {
             if (s_inited)
             {
                 return(s_manager);
             }
             try
             {
                 s_initing = true;
                 s_manager = new HealthMonitoringManager();
             }
             finally
             {
                 s_initing = false;
                 s_inited  = true;
             }
         }
     }
     return(s_manager);
 }
示例#4
0
        internal static void StartHealthMonitoringHeartbeat()
        {
            HealthMonitoringManager manager = Manager();

            if ((manager != null) && manager._enabled)
            {
                manager.StartHeartbeatTimer();
            }
        }
        internal bool CheckAndUpdate(WebBaseEvent eventRaised)
        {
            DateTime now = DateTime.Now;
            HealthMonitoringManager manager = HealthMonitoringManager.Manager();
            int num = Interlocked.Increment(ref this._timesRaised);

            if (manager == null)
            {
                return(false);
            }
            if (this._ruleInfo._customEvaluatorType != null)
            {
                IWebEventCustomEvaluator evaluator = (IWebEventCustomEvaluator)manager._sectionHelper._customEvaluatorInstances[this._ruleInfo._customEvaluatorType];
                try
                {
                    eventRaised.PreProcessEventInit();
                    if (!evaluator.CanFire(eventRaised, this))
                    {
                        return(false);
                    }
                }
                catch
                {
                    return(false);
                }
            }
            if (num < this._ruleInfo._minInstances)
            {
                return(false);
            }
            if (num > this._ruleInfo._maxLimit)
            {
                return(false);
            }
            if (this._ruleInfo._minInterval == TimeSpan.Zero)
            {
                this.UpdateLastFired(now, false);
                return(true);
            }
            if ((now - this._lastFired) <= this._ruleInfo._minInterval)
            {
                return(false);
            }
            lock (this)
            {
                if ((now - this._lastFired) <= this._ruleInfo._minInterval)
                {
                    return(false);
                }
                this.UpdateLastFired(now, true);
                return(true);
            }
        }
示例#6
0
        internal static void RaiseInternal(WebBaseEvent eventRaised, ArrayList firingRuleInfos, int index0, int index1)
        {
            bool flag  = false;
            bool flag2 = false;
            ProcessImpersonationContext context = null;
            HttpContext current = HttpContext.Current;
            object      data    = CallContext.GetData("_WEvtRIP");

            if ((data == null) || !((bool)data))
            {
                eventRaised.IncrementPerfCounters();
                eventRaised.IncrementTotalCounters(index0, index1);
                if (firingRuleInfos == null)
                {
                    firingRuleInfos = HealthMonitoringManager.Manager()._sectionHelper.FindFiringRuleInfos(eventRaised.GetType(), eventRaised.EventCode);
                }
                if (firingRuleInfos.Count != 0)
                {
                    try
                    {
                        bool[] flagArray = null;
                        if (EtwTrace.IsTraceEnabled(5, 1) && (current != null))
                        {
                            EtwTrace.Trace(EtwTraceType.ETW_TYPE_WEB_EVENT_RAISE_START, current.WorkerRequest, eventRaised.GetType().FullName, eventRaised.EventCode.ToString(CultureInfo.InstalledUICulture), eventRaised.EventDetailCode.ToString(CultureInfo.InstalledUICulture), null);
                        }
                        try
                        {
                            foreach (HealthMonitoringSectionHelper.FiringRuleInfo info in firingRuleInfos)
                            {
                                HealthMonitoringSectionHelper.RuleInfo info2 = info._ruleInfo;
                                if (info2._ruleFiringRecord.CheckAndUpdate(eventRaised) && (info2._referencedProvider != null))
                                {
                                    if (!flag)
                                    {
                                        eventRaised.PreProcessEventInit();
                                        flag = true;
                                    }
                                    if (info._indexOfFirstRuleInfoWithSameProvider != -1)
                                    {
                                        if (flagArray == null)
                                        {
                                            flagArray = new bool[firingRuleInfos.Count];
                                        }
                                        if (flagArray[info._indexOfFirstRuleInfoWithSameProvider])
                                        {
                                            continue;
                                        }
                                        flagArray[info._indexOfFirstRuleInfoWithSameProvider] = true;
                                    }
                                    if (EtwTrace.IsTraceEnabled(5, 1) && (current != null))
                                    {
                                        EtwTrace.Trace(EtwTraceType.ETW_TYPE_WEB_EVENT_DELIVER_START, current.WorkerRequest, info2._ruleSettings.Provider, info2._ruleSettings.Name, info2._ruleSettings.EventName, null);
                                    }
                                    try
                                    {
                                        if (context == null)
                                        {
                                            context = new ProcessImpersonationContext();
                                        }
                                        if (!flag2)
                                        {
                                            CallContext.SetData("_WEvtRIP", true);
                                            flag2 = true;
                                        }
                                        info2._referencedProvider.ProcessEvent(eventRaised);
                                    }
                                    catch (Exception exception)
                                    {
                                        try
                                        {
                                            info2._referencedProvider.LogException(exception);
                                        }
                                        catch
                                        {
                                        }
                                    }
                                    finally
                                    {
                                        if (EtwTrace.IsTraceEnabled(5, 1) && (current != null))
                                        {
                                            EtwTrace.Trace(EtwTraceType.ETW_TYPE_WEB_EVENT_DELIVER_END, current.WorkerRequest);
                                        }
                                    }
                                }
                            }
                        }
                        finally
                        {
                            if (context != null)
                            {
                                context.Undo();
                            }
                            if (flag2)
                            {
                                CallContext.FreeNamedDataSlot("_WEvtRIP");
                            }
                            if (EtwTrace.IsTraceEnabled(5, 1) && (current != null))
                            {
                                EtwTrace.Trace(EtwTraceType.ETW_TYPE_WEB_EVENT_RAISE_END, current.WorkerRequest);
                            }
                        }
                    }
                    catch
                    {
                        throw;
                    }
                }
            }
        }
示例#7
0
        // If this method returns null, it means we failed during configuration.
        internal static HealthMonitoringManager Manager() {

            if (s_initing) {
                Debug.Assert(!s_inited);
                // If this is true, that means we are calling WebEventBase.Raise while
                // we are initializing.  That means Init() has caused a config exception.
                return null;
            }

            if (s_inited) {
                return s_manager;
            }

            lock (s_lockObject) {
                if (s_inited) {
                    return s_manager;
                }

                try {
                    Debug.Assert(s_manager == null);
                    s_initing = true;
                    s_manager = new HealthMonitoringManager();;
                }
                finally {
                    s_initing = false;
                    s_inited = true;
                }
            }

            return s_manager;
        }