public void CollectResponseTelemetry(IHttpRequestInformation requestInformation,
                                             IHttpResponseInformation responseInformation,
                                             IHttpRequestTelemetry requestTelemetry)
        {
            long totalRequests;
            long totalData;
            long minResponseSizeEncountered;
            long maxResponseSizeEncountered;

            // Capture and update the neweste metrics based on this request
            lock (_syncObj)
            {
                ++_totalRequests;
                totalRequests = _totalRequests;

                _totalData += responseInformation.ResponseBodySizeInBytes;
                totalData   = _totalData;

                _maxResponseSizeEncountered = Math.Max(_maxResponseSizeEncountered,
                                                       responseInformation.ResponseBodySizeInBytes);
                maxResponseSizeEncountered = _maxResponseSizeEncountered;

                _minResponseSizeEncountered = Math.Min(_minResponseSizeEncountered,
                                                       responseInformation.ResponseBodySizeInBytes);
                minResponseSizeEncountered = _minResponseSizeEncountered;
            }

            AddTotalRequestsTelemetry(totalRequests, requestTelemetry);
            AddCurrentRequestResponseSizeTelemetry(responseInformation.ResponseBodySizeInBytes, requestTelemetry);
            AddMaxEncounteredTelemetry(maxResponseSizeEncountered, requestTelemetry);
            AddMinEncounteredTelemetry(minResponseSizeEncountered, requestTelemetry);
            AddAverageResponseSizeTelemetry(totalData, totalRequests, requestTelemetry);
        }
        public void CollectResponseTelemetry(IHttpRequestInformation requestInformation,
                                             IHttpResponseInformation responseInformation,
                                             IHttpRequestTelemetry requestTelemetry)
        {
            var dataPoint = new HttpRequestTelemetryDataPoint
            {
                MetricName  = "Total Processing Time",
                Description = "Total time server spent processing the http request, in milliseconds",
                Unit        = "ms",
                Value       = (DateTime.Now - requestInformation.RequestStartTime).Milliseconds.ToString()
            };

            requestTelemetry.AddDataPoint(dataPoint);
        }
        public void CollectResponseTelemetry(IHttpRequestInformation requestInformation,
                                             IHttpResponseInformation responseInformation,
                                             IHttpRequestTelemetry requestTelemetry)
        {
            var dataPoint = new HttpRequestTelemetryDataPoint
            {
                MetricName  = "Telemetry Processing Overhead Time",
                Description = "Total time the agent spent processing telemetry, in milliseconds",
                Unit        = "ms",
                Value       =
                    requestInformation.TelemetryProcessingOverheadTime.TotalMilliseconds.ToString(CultureInfo
                                                                                                  .InvariantCulture)
            };

            requestTelemetry.AddDataPoint(dataPoint);
        }
        public void ExecuteCollectors(IHttpRequestInformation requestInformation,
                                      IHttpResponseInformation responseInformation,
                                      IHttpRequestTelemetry telemetry)
        {
            if (_telemetryCollectorsExecuted)
            {
                return;
            }

            foreach (var collector in _collectors)
            {
                collector.CollectResponseTelemetry(requestInformation, responseInformation, telemetry);
            }

            _telemetryCollectorsExecuted = true;
        }