public async Task <T> GetResponseAsync <T>(string endpointType) { T typedResponse = default(T); ClientMetrics clientMetrics = new ClientMetrics(); try { clientMetrics.BeginClientMetricsRecord(this.CallState); Dictionary <string, string> clientMetricsHeaders = clientMetrics.GetPreviousRequestRecord(this.CallState); foreach (KeyValuePair <string, string> kvp in clientMetricsHeaders) { this.Client.Headers[kvp.Key] = kvp.Value; } IDictionary <string, string> adalIdHeaders = MsalIdHelper.GetMsalIdParameters(); foreach (KeyValuePair <string, string> kvp in adalIdHeaders) { this.Client.Headers[kvp.Key] = kvp.Value; } IHttpWebResponse response; using (response = await this.Client.GetResponseAsync().ConfigureAwait(false)) { typedResponse = DeserializeResponse <T>(response.ResponseStream); clientMetrics.SetLastError(null); } } catch (HttpRequestWrapperException ex) { PlatformPlugin.Logger.Error(this.CallState, ex); MsalServiceException serviceEx; if (ex.WebResponse != null) { TokenResponse tokenResponse = TokenResponse.CreateFromErrorResponse(ex.WebResponse); string[] errorCodes = tokenResponse.ErrorCodes ?? new[] { ex.WebResponse.StatusCode.ToString() }; serviceEx = new MsalServiceException(tokenResponse.Error, tokenResponse.ErrorDescription, errorCodes, ex); } else { serviceEx = new MsalServiceException(MsalError.Unknown, ex); } clientMetrics.SetLastError(serviceEx.ServiceErrorCodes); PlatformPlugin.Logger.Error(CallState, serviceEx); throw serviceEx; } finally { clientMetrics.EndClientMetricsRecord(endpointType, this.CallState); } return(typedResponse); }
public void EndClientMetricsRecord(string endpoint, CallState callState) { if (callState != null && metricsTimer != null) { metricsTimer.Stop(); lastResponseTime = metricsTimer.ElapsedMilliseconds; lastCorrelationId = callState.CorrelationId; lastEndpoint = endpoint; lock (PendingClientMetricsLock) { if (pendingClientMetrics == null) { pendingClientMetrics = this; } } } }
private static Dictionary <string, string> GetClientMetricsParameters() { var parameters = new Dictionary <string, string>(); lock (PendingClientMetricsLock) { if (pendingClientMetrics != null) { if (pendingClientMetrics.lastError != null) { parameters[ClientMetricsHeaderLastError] = pendingClientMetrics.lastError; } parameters[ClientMetricsHeaderLastRequest] = pendingClientMetrics.lastCorrelationId.ToString(); parameters[ClientMetricsHeaderLastResponseTime] = pendingClientMetrics.lastResponseTime.ToString(CultureInfo.InvariantCulture); parameters[ClientMetricsHeaderLastEndpoint] = pendingClientMetrics.lastEndpoint; pendingClientMetrics = null; } } return(parameters); }
private static Dictionary<string, string> GetClientMetricsParameters() { var parameters = new Dictionary<string, string>(); lock (PendingClientMetricsLock) { if (pendingClientMetrics != null) { if (pendingClientMetrics.lastError != null) { parameters[ClientMetricsHeaderLastError] = pendingClientMetrics.lastError; } parameters[ClientMetricsHeaderLastRequest] = pendingClientMetrics.lastCorrelationId.ToString(); parameters[ClientMetricsHeaderLastResponseTime] = pendingClientMetrics.lastResponseTime.ToString(CultureInfo.InvariantCulture); parameters[ClientMetricsHeaderLastEndpoint] = pendingClientMetrics.lastEndpoint; pendingClientMetrics = null; } } return parameters; }