void AddReportToCache(CrashReport report) { try { // Ensure the log directory exists if (!Directory.Exists(CacheDirectory)) { Directory.CreateDirectory(CacheDirectory); } // Make a copy of the crash log in our own cache and update the crash report info var newPath = Path.Combine(CacheDirectory, Path.GetFileName(report.CrashLogPath)); if (report.CrashLogPath != newPath) { File.Copy(report.CrashLogPath, newPath, true); } report.CrashLogPath = newPath; // Update the list of pending crashes which we want to upload var reports = ReadCachedReports(); reports.Add(report); WriteReportsToCache(reports); } catch (Exception ex) { Logger.WriteLine("Exception occurred when appending a crash report to the cache: {0}", ex); } }
void UploadOrCache(CrashReport report) { if (!TryUploadReport(report)) { Logger.WriteLine("Did not upload report, caching"); AddReportToCache(report); } }
bool TryUploadReport(CrashReport report) { try { if (CrashLogOptions.LogOnly) { Logger.WriteLine("CrashReporter is in log only mode. All crashes will be cached"); return(false); } var server = Environment.GetEnvironmentVariable("MONODEVELOP_CRASHREPORT_SERVER"); if (string.IsNullOrEmpty(server)) { server = "software.xamarin.com"; } var url = string.Format("http://{0}/Service/IssueLogging?m={1}&n={2}", server, HttpUtility.UrlEncode(report.Email), HttpUtility.UrlEncode(Path.GetFileName(report.CrashLogPath))); Logger.WriteLine("Trying to connect to: {0}", url); var request = WebRequest.Create(url); request.Method = "POST"; using (var s = File.OpenRead(report.CrashLogPath)) { request.ContentLength = s.Length; // Write the log file to the request stream using (var requestStream = request.GetRequestStream()) s.CopyTo(requestStream); } Logger.WriteLine("CrashReport sent to server, awaiting response..."); // Ensure the server has correctly processed everything. using (var response = request.GetResponse()) { var responseText = new StreamReader(response.GetResponseStream()).ReadToEnd(); if (responseText != "OK") { Logger.WriteLine("Server responded with error: {0}", responseText); return(false); } } } catch (Exception ex) { Logger.WriteLine("Failed to upload report to the server."); Logger.WriteLine(ex); return(false); } Logger.WriteLine("Successfully uploaded"); return(true); }
void UploadOrCache (CrashReport report) { if (!TryUploadReport (report)) { Logger.WriteLine ("Did not upload report, caching"); AddReportToCache (report); } }
bool TryUploadReport (CrashReport report) { try { if (CrashLogOptions.LogOnly) { Logger.WriteLine ("CrashReporter is in log only mode. All crashes will be cached"); return false; } var server = Environment.GetEnvironmentVariable ("MONODEVELOP_CRASHREPORT_SERVER"); if (string.IsNullOrEmpty (server)) server = "software.xamarin.com"; var url = string.Format ("http://{0}/Service/IssueLogging?m={1}&n={2}", server, HttpUtility.UrlEncode (report.Email), HttpUtility.UrlEncode (Path.GetFileName (report.CrashLogPath))); Logger.WriteLine ("Trying to connect to: {0}", url); var request = WebRequest.Create (url); request.Method = "POST"; using (var s = File.OpenRead (report.CrashLogPath)) { request.ContentLength = s.Length; // Write the log file to the request stream using (var requestStream = request.GetRequestStream ()) s.CopyTo (requestStream); } Logger.WriteLine ("CrashReport sent to server, awaiting response..."); // Ensure the server has correctly processed everything. using (var response = request.GetResponse ()) { var responseText = new StreamReader (response.GetResponseStream ()).ReadToEnd (); if (responseText != "OK") { Logger.WriteLine ("Server responded with error: {0}", responseText); return false; } } } catch (Exception ex) { Logger.WriteLine ("Failed to upload report to the server."); Logger.WriteLine (ex); return false; } Logger.WriteLine ("Successfully uploaded"); return true; }
void AddReportToCache (CrashReport report) { try { // Ensure the log directory exists if (!Directory.Exists (CacheDirectory)) Directory.CreateDirectory (CacheDirectory); // Make a copy of the crash log in our own cache and update the crash report info var newPath = Path.Combine (CacheDirectory, Path.GetFileName (report.CrashLogPath)); if (report.CrashLogPath != newPath) File.Copy (report.CrashLogPath, newPath, true); report.CrashLogPath = newPath; // Update the list of pending crashes which we want to upload var reports = ReadCachedReports (); reports.Add (report); WriteReportsToCache (reports); } catch (Exception ex) { Logger.WriteLine ("Exception occurred when appending a crash report to the cache: {0}", ex); } }