public static DecodeCountAndDuration ( long countAndDuration ) : long>.Tuple |
||
countAndDuration | long | |
리턴 | long>.Tuple |
public QuickPulseDataSample(QuickPulseDataAccumulator accumulator, IDictionary <string, Tuple <PerformanceCounterData, double> > perfData) { if (accumulator == null) { throw new ArgumentNullException(nameof(accumulator)); } if (perfData == null) { throw new ArgumentNullException(nameof(perfData)); } if (accumulator.StartTimestamp == null) { throw new ArgumentNullException(nameof(accumulator.StartTimestamp)); } if (accumulator.EndTimestamp == null) { throw new ArgumentNullException(nameof(accumulator.EndTimestamp)); } this.StartTimestamp = accumulator.StartTimestamp.Value; this.EndTimestamp = accumulator.EndTimestamp.Value; if ((this.EndTimestamp - this.StartTimestamp) < TimeSpan.Zero) { throw new InvalidOperationException("StartTimestamp must be less than EndTimestamp."); } TimeSpan sampleDuration = this.EndTimestamp - this.StartTimestamp; Tuple <long, long> requestCountAndDuration = QuickPulseDataAccumulator.DecodeCountAndDuration(accumulator.AIRequestCountAndDurationInTicks); long requestCount = requestCountAndDuration.Item1; long requestDurationInTicks = requestCountAndDuration.Item2; this.AIRequests = (int)requestCount; this.AIRequestsPerSecond = sampleDuration.TotalSeconds > 0 ? requestCount / sampleDuration.TotalSeconds : 0; this.AIRequestDurationAveInMs = requestCount > 0 ? (double)requestDurationInTicks / TimeSpan.TicksPerMillisecond / requestCount : 0; this.AIRequestsFailedPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIRequestFailureCount / sampleDuration.TotalSeconds : 0; this.AIRequestsSucceededPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIRequestSuccessCount / sampleDuration.TotalSeconds : 0; Tuple <long, long> dependencyCountAndDuration = QuickPulseDataAccumulator.DecodeCountAndDuration(accumulator.AIDependencyCallCountAndDurationInTicks); long dependencyCount = dependencyCountAndDuration.Item1; long dependencyDurationInTicks = dependencyCountAndDuration.Item2; this.AIDependencyCalls = (int)dependencyCount; this.AIDependencyCallsPerSecond = sampleDuration.TotalSeconds > 0 ? dependencyCount / sampleDuration.TotalSeconds : 0; this.AIDependencyCallDurationAveInMs = dependencyCount > 0 ? (double)dependencyDurationInTicks / TimeSpan.TicksPerMillisecond / dependencyCount : 0; this.AIDependencyCallsFailedPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIDependencyCallFailureCount / sampleDuration.TotalSeconds : 0; this.AIDependencyCallsSucceededPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIDependencyCallSuccessCount / sampleDuration.TotalSeconds : 0; this.AIExceptionsPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIExceptionCount / sampleDuration.TotalSeconds : 0; this.PerfCountersLookup = perfData.ToDictionary( p => (QuickPulseDefaults.CounterOriginalStringMapping.ContainsKey(p.Value.Item1.OriginalString) ? QuickPulseDefaults.CounterOriginalStringMapping[p.Value.Item1.OriginalString] : p.Value.Item1.OriginalString), p => p.Value.Item2); this.TelemetryDocuments = accumulator.TelemetryDocuments.ToArray(); }
public QuickPulseDataSample(QuickPulseDataAccumulator accumulator, IDictionary <string, Tuple <PerformanceCounterData, double> > perfData, IEnumerable <Tuple <string, int> > topCpuData, bool topCpuDataAccessDenied) { // NOTE: it is crucial not to keep any heap references on input parameters, new objects with separate roots must be created! // CollectionConfiguration is an exception to this rule as it may be still processed, and the sender will check the reference count before sending it out if (accumulator == null) { throw new ArgumentNullException(nameof(accumulator)); } if (perfData == null) { throw new ArgumentNullException(nameof(perfData)); } if (accumulator.StartTimestamp == null) { throw new ArgumentNullException(nameof(accumulator.StartTimestamp)); } if (accumulator.EndTimestamp == null) { throw new ArgumentNullException(nameof(accumulator.EndTimestamp)); } this.StartTimestamp = accumulator.StartTimestamp.Value; this.EndTimestamp = accumulator.EndTimestamp.Value; if ((this.EndTimestamp - this.StartTimestamp) < TimeSpan.Zero) { throw new InvalidOperationException("StartTimestamp must be less than EndTimestamp."); } TimeSpan sampleDuration = this.EndTimestamp - this.StartTimestamp; Tuple <long, long> requestCountAndDuration = QuickPulseDataAccumulator.DecodeCountAndDuration(accumulator.AIRequestCountAndDurationInTicks); long requestCount = requestCountAndDuration.Item1; long requestDurationInTicks = requestCountAndDuration.Item2; this.AIRequests = (int)requestCount; this.AIRequestsPerSecond = sampleDuration.TotalSeconds > 0 ? requestCount / sampleDuration.TotalSeconds : 0; this.AIRequestDurationAveInMs = requestCount > 0 ? (double)requestDurationInTicks / TimeSpan.TicksPerMillisecond / requestCount : 0; this.AIRequestsFailedPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIRequestFailureCount / sampleDuration.TotalSeconds : 0; this.AIRequestsSucceededPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIRequestSuccessCount / sampleDuration.TotalSeconds : 0; Tuple <long, long> dependencyCountAndDuration = QuickPulseDataAccumulator.DecodeCountAndDuration(accumulator.AIDependencyCallCountAndDurationInTicks); long dependencyCount = dependencyCountAndDuration.Item1; long dependencyDurationInTicks = dependencyCountAndDuration.Item2; this.AIDependencyCalls = (int)dependencyCount; this.AIDependencyCallsPerSecond = sampleDuration.TotalSeconds > 0 ? dependencyCount / sampleDuration.TotalSeconds : 0; this.AIDependencyCallDurationAveInMs = dependencyCount > 0 ? (double)dependencyDurationInTicks / TimeSpan.TicksPerMillisecond / dependencyCount : 0; this.AIDependencyCallsFailedPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIDependencyCallFailureCount / sampleDuration.TotalSeconds : 0; this.AIDependencyCallsSucceededPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIDependencyCallSuccessCount / sampleDuration.TotalSeconds : 0; this.AIExceptionsPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIExceptionCount / sampleDuration.TotalSeconds : 0; this.GlobalDocumentQuotaReached = accumulator.GlobalDocumentQuotaReached; try { this.PerfCountersLookup = perfData.ToDictionary( p => (QuickPulseDefaults.DefaultCounterOriginalStringMapping.ContainsKey(p.Value.Item1.ReportAs) ? QuickPulseDefaults.DefaultCounterOriginalStringMapping[p.Value.Item1.ReportAs] : p.Value.Item1.ReportAs), p => p.Value.Item2); } catch (Exception e) { // something went wrong with counter names, log an error QuickPulseEventSource.Log.UnknownErrorEvent(e.ToString()); } this.TopCpuData = topCpuData.ToArray(); this.TelemetryDocuments = accumulator.TelemetryDocuments.ToArray(); this.TopCpuDataAccessDenied = topCpuDataAccessDenied; this.CollectionConfigurationAccumulator = accumulator.CollectionConfigurationAccumulator; }
public QuickPulseDataSample(QuickPulseDataAccumulator accumulator, IDictionary <string, Tuple <PerformanceCounterData, float> > perfData) { if (accumulator == null) { throw new ArgumentNullException(nameof(accumulator)); } if (perfData == null) { throw new ArgumentNullException(nameof(perfData)); } if (accumulator.StartTimestamp == null) { throw new ArgumentNullException(nameof(accumulator.StartTimestamp)); } if (accumulator.EndTimestamp == null) { throw new ArgumentNullException(nameof(accumulator.EndTimestamp)); } this.StartTimestamp = accumulator.StartTimestamp.Value; this.EndTimestamp = accumulator.EndTimestamp.Value; if ((this.EndTimestamp - this.StartTimestamp) < TimeSpan.Zero) { throw new InvalidOperationException("StartTimestamp must be lesser than EndTimestamp."); } TimeSpan sampleDuration = this.EndTimestamp - this.StartTimestamp; Tuple <long, long> requestCountAndDuration = QuickPulseDataAccumulator.DecodeCountAndDuration(accumulator.AIRequestCountAndDurationInTicks); long requestCount = requestCountAndDuration.Item1; long requestDurationInTicks = requestCountAndDuration.Item2; this.AIRequests = (int)requestCount; this.AIRequestsPerSecond = sampleDuration.TotalSeconds > 0 ? requestCount / sampleDuration.TotalSeconds : 0; this.AIRequestDurationAveInMs = requestCount > 0 ? (double)requestDurationInTicks / TimeSpan.TicksPerMillisecond / requestCount : 0; this.AIRequestsFailedPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIRequestFailureCount / sampleDuration.TotalSeconds : 0; this.AIRequestsSucceededPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIRequestSuccessCount / sampleDuration.TotalSeconds : 0; Tuple <long, long> dependencyCountAndDuration = QuickPulseDataAccumulator.DecodeCountAndDuration(accumulator.AIDependencyCallCountAndDurationInTicks); long dependencyCount = dependencyCountAndDuration.Item1; long dependencyDurationInTicks = dependencyCountAndDuration.Item2; this.AIDependencyCalls = (int)dependencyCount; this.AIDependencyCallsPerSecond = sampleDuration.TotalSeconds > 0 ? dependencyCount / sampleDuration.TotalSeconds : 0; this.AIDependencyCallDurationAveInMs = dependencyCount > 0 ? (double)dependencyDurationInTicks / TimeSpan.TicksPerMillisecond / dependencyCount : 0; this.AIDependencyCallsFailedPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIDependencyCallFailureCount / sampleDuration.TotalSeconds : 0; this.AIDependencyCallsSucceededPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIDependencyCallSuccessCount / sampleDuration.TotalSeconds : 0; this.AIExceptionsPerSecond = sampleDuration.TotalSeconds > 0 ? accumulator.AIExceptionCount / sampleDuration.TotalSeconds : 0; // avoiding reflection (Enum.GetNames()) to speed things up Tuple <PerformanceCounterData, float> value; if (perfData.TryGetValue(QuickPulsePerfCounters.PerfIisQueueSize.ToString(), out value)) { this.PerfIisQueueSize = value.Item2; } if (perfData.TryGetValue(QuickPulsePerfCounters.PerfCpuUtilization.ToString(), out value)) { this.PerfCpuUtilization = value.Item2; } if (perfData.TryGetValue(QuickPulsePerfCounters.PerfMemoryInBytes.ToString(), out value)) { this.PerfMemoryInBytes = value.Item2; } this.PerfCountersLookup = perfData.ToDictionary(p => p.Value.Item1.OriginalString, p => p.Value.Item2); }