internal void EndInternalTracking(string groupName, string funcName) { string key = LatencyTracker.LatencyInfo.GetKey(groupName, funcName); if (!this.internalTrackingDic.ContainsKey(key)) { return; } LatencyTracker.LatencyInfo latencyInfo = this.internalTrackingDic[key]; this.internalTrackingDic.Remove(key); LatencyTracker.LatencyInfo latencyInfo2 = this.GetCurrentLatencyInfo() - latencyInfo; long elapsedTime = latencyInfo2.ElapsedTime; if (this.latencyBreakDowns.ContainsKey(groupName)) { long value = 2L; string key2 = groupName + ".C"; if (this.latencyBreakDowns.ContainsKey(key2)) { value = this.latencyBreakDowns[key2] + 1L; } this.latencyBreakDowns[key2] = value; } long num = elapsedTime; string strA; if (this.groupTrackingDic.TryGetValue(groupName, out strA) && string.Compare(strA, funcName, true) == 0) { if (this.latencyBreakDowns.ContainsKey(groupName)) { num = this.latencyBreakDowns[groupName] + num; } this.latencyBreakDowns[groupName] = num; this.groupTrackingDic.Remove(groupName); } string funcNameForDetailedLatencyLogging = this.GetFuncNameForDetailedLatencyLogging(funcName, latencyInfo); if (latencyInfo.LogDetailsAlways || elapsedTime >= (long)LoggerSettings.ThresholdToLogActivityLatency) { if (!string.Equals(funcNameForDetailedLatencyLogging, groupName)) { this.latencyBreakDowns[funcNameForDetailedLatencyLogging] = elapsedTime; } if (latencyInfo2.ADLatency.Count > 0L) { this.latencyBreakDowns.Add(funcNameForDetailedLatencyLogging + ".ADC", latencyInfo2.ADLatency.Count); this.latencyBreakDowns.Add(funcNameForDetailedLatencyLogging + ".AD", (long)latencyInfo2.ADLatency.TotalMilliseconds); } if (latencyInfo2.RpcLatency.Count > 0L) { this.latencyBreakDowns.Add(funcNameForDetailedLatencyLogging + ".RpcC", latencyInfo2.RpcLatency.Count); this.latencyBreakDowns.Add(funcNameForDetailedLatencyLogging + ".Rpc", (long)latencyInfo2.RpcLatency.TotalMilliseconds); } if (latencyInfo2.ADObjToExchObjLatency.Count > 0L) { this.latencyBreakDowns.Add(funcNameForDetailedLatencyLogging + ".ATEC", latencyInfo2.ADObjToExchObjLatency.Count); this.latencyBreakDowns.Add(funcNameForDetailedLatencyLogging + ".ATE", (long)latencyInfo2.ADObjToExchObjLatency.TotalMilliseconds); } } }
private string GetFuncNameForDetailedLatencyLogging(string funcName, LatencyTracker.LatencyInfo latencyInfoAtStart) { string text = funcName; if (latencyInfoAtStart.GroupName != null && !string.Equals(funcName, latencyInfoAtStart.GroupName)) { text = latencyInfoAtStart.GroupName + "." + text; } int num; if (this.funcNameTrackingDic.TryGetValue(text, out num)) { num++; } else { num = 1; } this.funcNameTrackingDic[text] = num; if (num > 1) { text = text + "$" + num; } if (!string.Equals(text, funcName) && this.latencyBreakDowns.ContainsKey(text)) { text = Guid.NewGuid().ToString(); } return(text); }
internal bool StartInternalTracking(string groupName, string funcName, bool logDetailsAlways) { LatencyTracker.LatencyInfo currentLatencyInfo = this.GetCurrentLatencyInfo(); currentLatencyInfo.LogDetailsAlways = logDetailsAlways; currentLatencyInfo.FuncName = funcName; currentLatencyInfo.GroupName = groupName; string key = LatencyTracker.LatencyInfo.GetKey(groupName, funcName); if (this.internalTrackingDic.ContainsKey(key)) { return(false); } if (!this.groupTrackingDic.ContainsKey(groupName)) { this.groupTrackingDic.Add(groupName, funcName); } this.internalTrackingDic.Add(key, currentLatencyInfo); return(true); }