private static WatsonClientReport CreateClientWatsonReportAndUpdateCache(ClientWatsonReportData reportData, out string[] watsonParameters) { WatsonClientReport watsonClientReport = new WatsonClientReport(reportData.TraceComponent, reportData.FunctionName, reportData.ExceptionMessage, reportData.ExceptionType, reportData.OriginalCallStack, reportData.NormalizedCallStack, reportData.CallStackHash, reportData.PackageName); watsonParameters = watsonClientReport.GetWatsonParameters(); ClientWatsonDatapointHandler.cachedFlavor = watsonParameters[0]; ClientWatsonDatapointHandler.cachedVersion = watsonParameters[1]; return(watsonClientReport); }
public void ReportWatsonEvents(UserContext userContext, IList <ClientLogEvent> watsonEvents, Datapoint contextHeader, Datapoint[] context) { Stopwatch stopwatch = Stopwatch.StartNew(); int num = 0; int num2 = 0; List <ClientWatsonDatapointHandler.ClientWatsonReportLogEvent> list = new List <ClientWatsonDatapointHandler.ClientWatsonReportLogEvent>(watsonEvents.Count); List <WatsonClientReport> list2 = new List <WatsonClientReport>(watsonEvents.Count); foreach (ClientLogEvent clientLogEvent in watsonEvents) { string ctqName; clientLogEvent.TryGetValue <string>("ctq", out ctqName); ClientWatsonReportData reportData; ProcessingResult errorResult = this.TryExtractClientWatsonData(clientLogEvent, out reportData); if (errorResult.Code != ResultCode.Success) { list.Add(new ClientWatsonDatapointHandler.ClientWatsonReportLogEvent(clientLogEvent.Time, userContext, ctqName, reportData.IsUnhandledException, errorResult)); num2++; } else { int hashCode = reportData.OriginalCallStack.GetHashCode(); bool flag = this.parameters.IsErrorOverReportQuota(hashCode); if (flag) { string[] watsonParameters; if (ClientWatsonDatapointHandler.cachedFlavor == null) { ClientWatsonDatapointHandler.CreateClientWatsonReportAndUpdateCache(reportData, out watsonParameters); } else { watsonParameters = WatsonClientReport.BuildWatsonParameters(ClientWatsonDatapointHandler.cachedFlavor, ClientWatsonDatapointHandler.cachedVersion, reportData.TraceComponent, reportData.FunctionName, reportData.ExceptionType, reportData.NormalizedCallStack, reportData.CallStackHash); } list.Add(new ClientWatsonDatapointHandler.ClientWatsonReportLogEvent(clientLogEvent.Time, userContext, ctqName, watsonParameters, reportData.IsUnhandledException, false)); num++; } else { string[] watsonParameters; WatsonClientReport item = ClientWatsonDatapointHandler.CreateClientWatsonReportAndUpdateCache(reportData, out watsonParameters); list2.Add(item); list.Add(new ClientWatsonDatapointHandler.ClientWatsonReportLogEvent(clientLogEvent.Time, userContext, ctqName, watsonParameters, reportData.IsUnhandledException, true)); } } } string extraData = ClientWatsonDatapointHandler.BuildExtraDataString(userContext, contextHeader, context, list); foreach (WatsonClientReport report in list2) { this.parameters.ReportAction(report, extraData); } this.logger.Set(LogDatapointMetadata.WatsonDatapointSkipped, num); this.logger.Set(LogDatapointMetadata.WatsonDatapointFailed, num2); this.logger.Set(LogDatapointMetadata.WatsonReportingElapsed, stopwatch.ElapsedMilliseconds); }