public async Task <ActionResult> About() { try { var random = new Random(); if (random.Next(0, 10) < 5) { System.IO.File.ReadAllBytes("path to not existing file"); } } catch (FileNotFoundException exception) { string hostUrl = ConfigurationManager.AppSettings["hostUrl"]; string token = ConfigurationManager.AppSettings["token"]; var backtraceCredentials = new BacktraceCredentials( backtraceHostUrl: hostUrl, accessToken: token); BacktraceClient backtraceClient = new BacktraceClient(backtraceCredentials); var backtraceResult = await backtraceClient.SendAsync(exception); Debug.WriteLine($"Backtrace Server result: {backtraceResult.Status}"); } ViewBag.Message = "Your application description page."; return(View()); }
public async Task TestClientRateLimiting(int numberOfCycles, int rateLimit) { //we send reports by using Send method and SendAsync method - 8 per c int totalSendReport = numberOfCycles * 8; int expectedNumberOfReports = rateLimit > totalSendReport ? totalSendReport : rateLimit; int totalNumberOfReports = 0; bool eventTrigger = false; _backtraceClient.OnClientReportLimitReached = (BacktraceReport report) => { eventTrigger = true; }; _backtraceClient.AfterSend = (BacktraceResult res) => { if (res.Status == BacktraceResultStatus.Ok) { totalNumberOfReports++; } }; _backtraceClient.SetClientReportLimit((uint)rateLimit); for (int i = 0; i < numberOfCycles; i++) { //test sync submission _backtraceClient.Send("client message"); _backtraceClient.Send(new Exception("test exception")); _backtraceClient.Send(new BacktraceReport("report message")); _backtraceClient.Send(new BacktraceReport(new Exception("test exception"))); //test async submission await _backtraceClient.SendAsync("client message"); await _backtraceClient.SendAsync(new Exception("test exception")); await _backtraceClient.SendAsync(new BacktraceReport("report message")); await _backtraceClient.SendAsync(new BacktraceReport(new Exception("test exception"))); } Assert.IsTrue(eventTrigger); Assert.AreEqual(expectedNumberOfReports, totalNumberOfReports); }
public async Task TestApplicationFlowWithoutClientRateLimitingAndWithoutWriteFails(int totalReports) { //set client rate limit to unlimited _backtraceClient.BacktraceApi.SetClientRateLimit(0); //ignore generating minidump files _backtraceClient.MiniDumpType = MiniDumpType.None; for (int i = 0; i < totalReports; i++) { try { DivideByZeroMethod(); } catch (DivideByZeroException e) { var report = e.ToBacktraceReport(); var result = await _backtraceClient.SendAsync(report); Assert.AreEqual(result.Status, BacktraceResultStatus.Ok); } try { OutOfRangeMethod(); } catch (IndexOutOfRangeException e) { var report = e.ToBacktraceReport(); var result = await _backtraceClient.SendAsync(report); Assert.AreEqual(result.Status, BacktraceResultStatus.Ok); } } }
private async Task ThreadTest(int threadIndex) { await _backtraceClient.SendAsync($"Custom client message"); try { DivideByZeroMethod(); } catch (DivideByZeroException divideException) { await _backtraceClient.SendAsync(divideException); } try { OutOfRangeMethod(); } catch (IndexOutOfRangeException outOfRangeException) { await _backtraceClient.SendAsync(outOfRangeException); } await _backtraceClient.SendAsync($"End test case for thread {threadIndex}"); }
public async Task TestValidSubmissionEvents() { bool responseEventTrigger = false; int totalResponses = 0; _backtraceClient.OnServerResponse = (BacktraceResult res) => { totalResponses++; responseEventTrigger = true; Assert.AreEqual(res.Object, "aaa"); }; await _backtraceClient.SendAsync("custom message"); await _backtraceClient.SendAsync(new Exception("Backtrace API tests")); await _backtraceClient.SendAsync(new BacktraceReport("backtrace report message")); await _backtraceClient.SendAsync(new BacktraceReport(new Exception("Backtrace report exception"))); Assert.IsTrue(responseEventTrigger); Assert.AreEqual(totalResponses, 4); }
public async Task TestInvalidSubmissionEvents() { bool responseEventTrigger = false; int totalResponses = 0; _clientWithInvalidParameters.OnServerError = (Exception e) => { totalResponses++; responseEventTrigger = true; }; await _clientWithInvalidParameters.SendAsync("custom message"); await _clientWithInvalidParameters.SendAsync(new Exception("Backtrace API tests")); await _clientWithInvalidParameters.SendAsync(new BacktraceReport("backtrace report message")); await _clientWithInvalidParameters.SendAsync(new BacktraceReport(new Exception("Backtrace report exception"))); Assert.IsTrue(responseEventTrigger); Assert.AreEqual(totalResponses, 4); }
/// <summary> /// Sample method that generate exception /// </summary> /// <param name="index">index parameter</param> private static async Task CalculateDifference(int index = 0) { if (index % 2 == 0) { throw new ArgumentException($"{nameof(index)} has invalid value"); } try { await CalculateDifference(++index); } catch (Exception e) { //use Backtrace Extensions to get BacktraceReport from exception var report = e.ToBacktraceReport(); await backtraceClient.SendAsync(report); // use Backtrace client to send exception await backtraceClient.SendAsync(e); //send your custom message to API! await backtraceClient.SendAsync("Received"); } }
public async Task TestRetrievingReporsLockedInSendMethod() { // BacktraceClient triggers BeforeSend event after retrieving entry from database // in this case entry should be locked // BacktraceDatabase shouldn't try to send report from timer event because, all entries all in use (1) _backtraceClient.BeforeSend = (BacktraceData data) => { var dbEntries = _backtraceDatabase.BacktraceDatabaseContext.FirstOrDefault(); Assert.IsNull(dbEntries); return(data); }; await _backtraceClient.SendAsync(new BacktraceReport("test message")); }
private async Task GenerateRandomStrings() { Random random = new Random(); int totalStrings = random.Next(20, 25); //+3 because we want to add two duplicats string[] randomStrings = new string[totalStrings + 3]; for (int i = 0; i < totalStrings; i++) { int stringLength = random.Next(0, 8); randomStrings[i] = GetRandomString(stringLength); } for (int i = 0; i < 3; i++) { int copyIndex = random.Next(0, totalStrings); randomStrings[totalStrings + i] = randomStrings[copyIndex]; } tree = new Tree(); for (int i = 0; i < totalStrings + 3; i++) { try { tree.Add(randomStrings[i]); } catch (Exception exception) { await backtraceClient.SendAsync(exception); //we catch exception inside three add method continue; } } var response = await backtraceClient.SendAsync($"{DateTime.Now}: Tree generated"); Console.WriteLine($"Tree generated! Backtrace object id for last message: {response.Object}"); }
protected override void OnCreate(Bundle savedInstanceState) { //setup database // we get external storage directory and special directory created for databse - Backtrace directory string directoryPath = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "Backtrace"); var database = new BacktraceDatabase(new BacktraceDatabaseSettings(directoryPath)); //setup client configuration var credentials = new BacktraceCredentials(ApplicationSettings.Host, ApplicationSettings.Token); var clientConfiguration = new BacktraceClientConfiguration(credentials); // Initialize new BacktraceClient BacktraceClient client = new BacktraceClient(clientConfiguration, database); // Send async report to a server with custom client message var result = client.SendAsync("Hello from Xamarin").Result; base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); }