Example #1
0
        public override async Task <ResponseMessage> SendAsync(
            RequestMessage request,
            CancellationToken cancellationToken)
        {
            ResponseMessage responseMessage = await base.SendAsync(request, cancellationToken);

            // Record the diagnostics on the response to get the CPU of when the request was executing
            SystemUsageHistory systemUsageHistory = DiagnosticsHandlerHelper.Instance.GetDiagnosticsSystemHistory();

            if (systemUsageHistory != null)
            {
                request.Trace.AddDatum(
                    "System Info",
                    new CpuHistoryTraceDatum(systemUsageHistory));
            }

            return(responseMessage);
        }
        /// <summary>
        /// Record System Usage and update passed system Info collection. Right now, it collects following metrics
        /// 1) CPU Usage
        /// 2) Memory Remaining
        /// 3) Available Threads
        ///
        /// </summary>
        /// <param name="systemUsageHistory"></param>
        /// <param name="systemInfoCollection"></param>
        /// <param name="isDirectConnectionMode"></param>
        internal static void RecordSystemUsage(
            SystemUsageHistory systemUsageHistory,
            List <SystemInfo> systemInfoCollection,
            bool isDirectConnectionMode)
        {
            if (systemUsageHistory.Values == null)
            {
                return;
            }

            DefaultTrace.TraceInformation("System Usage recorded by telemetry is : {0}", systemUsageHistory);

            systemInfoCollection.Add(TelemetrySystemUsage.GetCpuInfo(systemUsageHistory.Values));
            systemInfoCollection.Add(TelemetrySystemUsage.GetMemoryRemainingInfo(systemUsageHistory.Values));
            systemInfoCollection.Add(TelemetrySystemUsage.GetAvailableThreadsInfo(systemUsageHistory.Values));
            systemInfoCollection.Add(TelemetrySystemUsage.GetThreadWaitIntervalInMs(systemUsageHistory.Values));
            systemInfoCollection.Add(TelemetrySystemUsage.GetThreadStarvationSignalCount(systemUsageHistory.Values));

            if (isDirectConnectionMode)
            {
                systemInfoCollection.Add(TelemetrySystemUsage.GetTcpConnectionCount(systemUsageHistory.Values));
            }
        }