Пример #1
0
        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);
            }
        }
Пример #2
0
 void UploadOrCache(CrashReport report)
 {
     if (!TryUploadReport(report))
     {
         Logger.WriteLine("Did not upload report, caching");
         AddReportToCache(report);
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
		void UploadOrCache (CrashReport report)
		{
			if (!TryUploadReport (report)) {
				Logger.WriteLine ("Did not upload report, caching");
				AddReportToCache (report);
			}
		}
Пример #5
0
		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;
		}
Пример #6
0
		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);
			}
		}