Ejemplo n.º 1
0
        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}");
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public Task SendFaultReport(DumpMetainfo dumpInfo, FaultReport faultReport)
 {
     Console.WriteLine("FaultReport: " + dumpInfo.ToString() + " " + faultReport.ToString());
     return(Task.CompletedTask);
 }