public async Task SendFaultReport(DumpMetainfo dumpInfo, FaultReport faultReport) { var faultReportJson = JsonConvert.SerializeObject(faultReport, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), }); logger.LogInformation($"Sending to {queueUrl}: \n{faultReportJson}"); var messageRequest = new SendMessageRequest(queueUrl, faultReportJson); try { await amazonSqsClientService.SqsClient.SendMessageAsync(messageRequest); } catch (Exception e) { logger.LogWarning($"Could not send message to queue {queueUrl}. Error: {e}"); } }
public static FaultReport CreateFaultReport(SDResult result, int maxFrames = 80) { var faultReport = new FaultReport(); // modules & stackframes var faultingThread = result.GetErrorOrLastExecutingThread(); if (faultingThread != null) { faultReport.FaultingFrames = new List <string>(); if (faultingThread.StackTrace.Count <= maxFrames) { foreach (var frame in faultingThread.StackTrace) { faultReport.FaultingFrames.Add(frame.ToString()); } } else { // makes ure extra long stacktraces (stack overflows) are serialized in a human readable way // add only the first X, then "...", then the last X foreach (var frame in faultingThread.StackTrace.Take(maxFrames / 2)) { faultReport.FaultingFrames.Add(frame.ToString()); } faultReport.FaultingFrames.Add("..."); foreach (var frame in faultingThread.StackTrace.TakeLast(maxFrames / 2)) { faultReport.FaultingFrames.Add(frame.ToString()); } } } var faultReasonSb = new StringBuilder(); // lastevent if (result.LastEvent != null) { if (result.LastEvent.Description.StartsWith("Break instruction exception")) { // "break instruction" as a lastevent is so generic, it's practically useless. treat it as if there was no information at all. } else { if (!string.IsNullOrEmpty(result.LastEvent.Type)) { faultReasonSb.Append(result.LastEvent.Type); } if (!string.IsNullOrEmpty(result.LastEvent.Description)) { if (faultReasonSb.Length > 0) { faultReasonSb.Append(", "); } faultReasonSb.Append(result.LastEvent.Description); } } } // exception var exception = result.GetErrorOrLastExecutingThread()?.LastException; if (exception != null) { if (!string.IsNullOrEmpty(exception.Type)) { if (faultReasonSb.Length > 0) { faultReasonSb.Append(", "); } faultReasonSb.Append(exception.Type); } if (!string.IsNullOrEmpty(exception.Message)) { if (faultReasonSb.Length > 0) { faultReasonSb.Append(", "); } faultReasonSb.Append(exception.Message); } } faultReport.FaultReason = faultReasonSb.ToString(); return(faultReport); }
public Task SendFaultReport(DumpMetainfo dumpInfo, FaultReport faultReport) { Console.WriteLine("FaultReport: " + dumpInfo.ToString() + " " + faultReport.ToString()); return(Task.CompletedTask); }