Пример #1
0
 internal static void ExecuteAndLog(string funcName, bool missionCritical, LatencyTracker latencyTracker, ExEventLog eventLog, ExEventLog.EventTuple eventTuple, Trace tracer, ExWatson.IsExceptionInteresting isExceptionInteresting, Action <Exception> onError, Action action)
 {
     Diagnostics.ExecuteAndLog <bool>(funcName, missionCritical, latencyTracker, eventLog, eventTuple, tracer, isExceptionInteresting, onError, true, delegate()
     {
         action();
         return(true);
     });
 }
        internal static void EndInternalTracking(Guid cmdletUniqueId, string groupName, string funcName)
        {
            LatencyTracker latencyTracker = CmdletLatencyTracker.GetLatencyTracker(cmdletUniqueId);

            if (latencyTracker == null)
            {
                return;
            }
            latencyTracker.EndInternalTracking(groupName, funcName);
        }
        internal static long StopLatencyTracker(Guid cmdletUniqueId)
        {
            LatencyTracker latencyTracker = CmdletStaticDataWithUniqueId <LatencyTracker> .Get(cmdletUniqueId);

            if (latencyTracker == null)
            {
                return(-1L);
            }
            return(latencyTracker.Stop());
        }
        internal static void StartLatencyTracker(Guid cmdletUniqueId)
        {
            LatencyTracker latencyTracker = CmdletStaticDataWithUniqueId <LatencyTracker> .Get(cmdletUniqueId);

            if (latencyTracker != null)
            {
                CmdletLogger.SafeAppendGenericError(cmdletUniqueId, "StartLatencyTracker", string.Format("Latency tracker with this cmdlet {0} already exists. Override it anyway.", cmdletUniqueId), false);
            }
            latencyTracker = new LatencyTracker(cmdletUniqueId.ToString(), new Func <IActivityScope>(ActivityContext.GetCurrentActivityScope));
            latencyTracker.Start();
            CmdletStaticDataWithUniqueId <LatencyTracker> .Set(cmdletUniqueId, latencyTracker);
        }
        internal static void PushLatencyDetailsToLog(Guid cmdletUniqueId, Dictionary <string, Enum> knownFuncNameToLogMetadataDic, Action <Enum, double> updateLatencyToLogger, Action <string, string> defaultLatencyLogger)
        {
            LatencyTracker latencyTracker = CmdletLatencyTracker.GetLatencyTracker(cmdletUniqueId);

            if (latencyTracker != null)
            {
                latencyTracker.PushLatencyDetailsToLog(knownFuncNameToLogMetadataDic, updateLatencyToLogger, defaultLatencyLogger);
                return;
            }
            if (defaultLatencyLogger != null)
            {
                defaultLatencyLogger("LatencyMissed", "latencyTracker is null");
                return;
            }
            if (updateLatencyToLogger != null)
            {
                updateLatencyToLogger(RpsCommonMetadata.GenericLatency, 0.0);
            }
        }
Пример #6
0
        internal static T ExecuteAndLog <T>(string funcName, bool missionCritical, LatencyTracker latencyTracker, ExEventLog eventLog, ExEventLog.EventTuple eventTuple, Trace tracer, ExWatson.IsExceptionInteresting isExceptionInteresting, Action <Exception> onError, T defaultReturnValue, Func <T> func)
        {
            bool flag = false;
            T    result;

            try
            {
                tracer.TraceDebug <Func <T> >(0L, "[{0}] Enter.", func);
                if (latencyTracker != null)
                {
                    flag = latencyTracker.StartInternalTracking(funcName);
                }
                result = func();
            }
            catch (Exception ex)
            {
                if (onError != null)
                {
                    onError(ex);
                }
                Diagnostics.ReportException(ex, eventLog, eventTuple, isExceptionInteresting, null, tracer, string.Format("Func {0} throws Exception {{0}}.", funcName));
                if (missionCritical)
                {
                    throw;
                }
                result = defaultReturnValue;
            }
            finally
            {
                if (flag)
                {
                    latencyTracker.EndInternalTracking(funcName);
                }
                tracer.TraceDebug <Func <T> >(0L, "[{0}] Exit.", func);
            }
            return(result);
        }
Пример #7
0
 public LatencyMonitor(LatencyTracker latencyTracker)
 {
     this.latencyTracker = latencyTracker;
 }
        internal static bool StartInternalTracking(Guid cmdletUniqueId, string groupName, string funcName, bool logDetailsAlways)
        {
            LatencyTracker latencyTracker = CmdletLatencyTracker.GetLatencyTracker(cmdletUniqueId);

            return(latencyTracker != null && latencyTracker.StartInternalTracking(groupName, funcName, logDetailsAlways));
        }