private void SendRequest(SentryRequest request) { var header = String.Format("Sentry sentry_version={0}" + ", sentry_client={1}" + ", sentry_timestamp={2}" + ", sentry_key={3}" + ", sentry_secret={4}", 5, "CodeHub/1.0", (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds, _sentryClientId, _sentrySecret); var req = new HttpRequestMessage(HttpMethod.Post, new Uri(_sentryUrl)); req.Headers.Add("X-Sentry-Auth", header); var requestData = _jsonSerialization.Serialize(request); req.Content = new StringContent(requestData, Encoding.UTF8, "application/json"); _httpClient.SendAsync(req).ContinueWith(t => { if (t.Status != System.Threading.Tasks.TaskStatus.RanToCompletion) { Debug.WriteLine("Unable to send sentry analytic"); } }); }
public void BuildPacket_CapturesRequestUrlAndUser() { var request = new SentryRequest { Url = "/foo/bar" }; var requestFactory = Substitute.For <ISentryRequestFactory>(); requestFactory.Create().Returns(request); var user = new SentryUser("*****@*****.**"); var userFactory = Substitute.For <ISentryUserFactory>(); userFactory.Create().Returns(user); var client = this.tester.GetTestableRavenClient("", requestFactory, userFactory); var packet = client.BuildPacket(new SentryEvent(new SentryMessage("some message"))); Assert.IsNotNull(packet, "the packet should not be null"); Assert.IsNotNull(packet.Request, "the request should not be null"); Assert.AreEqual("/foo/bar", packet.Request.Url); Assert.IsNotNull(packet.User, "user should not be null"); Assert.AreEqual("*****@*****.**", packet.User.Username); }
public ISentryRequest Create() { var httpRequest = _accessor?.HttpContext?.Request; if (httpRequest == null) { return(new SentryRequest()); } var request = new SentryRequest { Url = $"{httpRequest.Scheme}://{httpRequest.Host}{httpRequest.Path}", Method = httpRequest.Method, QueryString = httpRequest.QueryString.ToString(), Headers = httpRequest.Headers.ToDictionary(h => h.Key, h => h.Value.ToString()), Cookies = httpRequest.Cookies.ToDictionary(c => c.Key, c => c.Value.ToString()) }; try { request.Data = HttpRequestBodyConverter.Convert(_accessor.HttpContext); } catch (Exception) { // } return(request); }
private static void SimulateHttpRequest(Action <SentryRequest> test) { using (var simulator = new HttpSimulator()) { simulator.SetFormVariable("Form1", "Value1"); simulator.SetHeader("UserAgent", "SharpRaven"); simulator.SetCookie("Cookie", "Monster"); using (simulator.SimulateRequest()) { var request = SentryRequest.GetRequest(); test.Invoke(request); } } }
public ISentryRequest Create() { var request = new SentryRequest { Url = HttpContext.Request.Path.ToString(), Method = HttpContext.Request.Method, Environment = new Dictionary <string, string>(), // NOTE: we did not want or need this Headers = Convert(HttpContext.Request.Headers), Cookies = HttpContext.Request.Cookies.ToDictionary(x => x.Key, x => x.Value), Data = BodyConvert(), QueryString = HttpContext.Request.QueryString.ToString(), }; return(request); }
public ISentryRequest Create() { var request = new SentryRequest { Url = SentryHttpContext.RequestPath, Method = SentryHttpContext.RequestMethod, Environment = new Dictionary <string, string>(), Headers = SentryHttpContext.RequestHeaders, Cookies = SentryHttpContext.RequestCookies, Data = SentryHttpContext.GetRequestBody(), QueryString = SentryHttpContext.RequestQueryString }; return(request); }
public async Task <SentryFrequentEvent[]> GetFrequentEvents(SentryRequest request) { var requestString = new StringBuilder("eventsv2/"); requestString.Append($"?query={Uri.EscapeUriString(request.query)}"); requestString.Append($"&statsPeriod={Uri.EscapeUriString(request.statsPeriod)}"); requestString.Append($"&sort={Uri.EscapeUriString(request.sort)}"); foreach (string field in request.fields) { requestString.Append($"&field={Uri.EscapeUriString(field)}"); } var response = await client.GetAsync(requestString.ToString()); response.EnsureSuccessStatusCode(); var result = System.Text.Json.JsonSerializer.Deserialize <SentryFrequentEventsResponse>(await response.Content.ReadAsByteArrayAsync()); return(result.data); }
private void LogException(Exception exception, bool fatal) { Debug.WriteLine(exception.Message + " - " + exception.StackTrace); if (Debugger.IsAttached) { Debugger.Break(); } else { try { var request = new SentryRequest(exception); // Add tags for easier sorting request.Tags.Add("version", _environmentService.OSVersion); request.Tags.Add("bundle_version", _environmentService.ApplicationVersion); request.Tags.Add("fatal", fatal.ToString()); // Add some extras request.Extra.Add("device_name", _environmentService.DeviceName); var handle = AddExtraInformation; if (handle != null) { handle(exception, request.Extra); } if (fatal) { PersistRequest(request); } else { // Send it out the door SendRequest(request); } } catch { Debug.WriteLine("Unable to report exception: " + exception.Message); } } }
public async Task <List <KeyValuePair <DateTime, int> > > GetEventFrequency(SentryRequest request) { var requestString = new StringBuilder("events-stats/"); requestString.Append($"?query={Uri.EscapeUriString(request.query)}"); requestString.Append($"&interval={Uri.EscapeUriString(request.interval)}"); requestString.Append($"&statsPeriod={Uri.EscapeUriString(request.statsPeriod)}"); requestString.Append($"&sort={Uri.EscapeUriString(request.sort)}"); foreach (string field in request.fields) { requestString.Append($"&field={Uri.EscapeUriString(field)}"); } var response = await client.GetAsync(requestString.ToString()); response.EnsureSuccessStatusCode(); var result = System.Text.Json.JsonSerializer.Deserialize <SentryEventFrequencyResponse>(await response.Content.ReadAsByteArrayAsync()); return(result.Records); }
private void LogException(Exception exception, bool fatal) { Debug.WriteLine(exception.Message + " - " + exception.StackTrace); if (Debugger.IsAttached) Debugger.Break(); else { try { var request = new SentryRequest(exception); // Add tags for easier sorting request.Tags.Add("version", _environmentService.OSVersion); request.Tags.Add("bundle_version", _environmentService.ApplicationVersion); request.Tags.Add("fatal", fatal.ToString()); // Add some extras request.Extra.Add("device_name", _environmentService.DeviceName); request.Extra.Add("username", _accountsService.ActiveAccount != null ? _accountsService.ActiveAccount.Username : "******"); if (fatal) { PersistRequest(request); } else { // Send it out the door SendRequest(request); } } catch { Debug.WriteLine("Unable to report exception: " + exception.Message); } } }
public void GetRequest_NoHttpContext_ReturnsNull() { var request = SentryRequest.GetRequest(); Assert.That(request, Is.Null); }
private void SendRequest(SentryRequest request) { var header = String.Format("Sentry sentry_version={0}" + ", sentry_client={1}" + ", sentry_timestamp={2}" + ", sentry_key={3}" + ", sentry_secret={4}", 5, "CodeHub/1.0", (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds, _sentryClientId, _sentrySecret); var req = new HttpRequestMessage(HttpMethod.Post, new Uri(_sentryUrl)); req.Headers.Add("X-Sentry-Auth", header); var requestData = _jsonSerialization.Serialize(request); req.Content = new StringContent(requestData, Encoding.UTF8, "application/json"); _httpClient.SendAsync(req).ContinueWith(t => { if (t.Status != System.Threading.Tasks.TaskStatus.RanToCompletion) Debug.WriteLine("Unable to send sentry analytic"); }); }
public static async Task Main(string[] args) { var reports = new string[] { "Team Output - 10wk, 2wk, and 1wk output per Engineer", "Weekly Points Summary - Broken down by work item type", "Bugs Summary - Overview of regressions, escapes, etc.", "Bugs by Team - Bugs generated per Engineer", "Sentry Events Frequency", "Sentry most frequent events -7d" }; while (true) { var requestedReport = selectReport(reports); var outputPath = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), $"Report-{DateTime.Now.ToString("yyyy-MM-ddTHHmm-ss")}.csv"); switch (requestedReport) { case "Team Output - 10wk, 2wk, and 1wk output per Engineer": { var reporter = new JiraReporter(); var jqlRestRequest = new JqlSearchRequest(File.ReadAllText(Path.Combine(@"Models", @"Jira", @"Queries", "Done previous 10wk.jql"))); var searchResult = await JiraConnector.Instance.GetSearchResults(jqlRestRequest); var engineeringGroup = await JiraConnector.Instance.GetGroup(new JiraGroupRequest("engineers")); var engineers = engineeringGroup.users; reporter.GenerateTeamOutputReport(searchResult, engineers, Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), outputPath)); break; } case "Weekly Points Summary - Broken down by work item type": { var reporter = new JiraReporter(); var jqlRestRequest = new JqlSearchRequest(File.ReadAllText(Path.Combine(@"Models", @"Jira", @"Queries", "Done previous 10wk.jql"))); var searchResult = await JiraConnector.Instance.GetSearchResults(jqlRestRequest); reporter.GenerateWorkSummaryReport(searchResult, 70, 7, Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), outputPath)); break; } case "Bugs Summary - Overview of regressions, escapes, etc.": { var reporter = new JiraReporter(); var jqlBugRestRequest = new JqlSearchRequest(File.ReadAllText(Path.Combine(@"Models", @"Jira", @"Queries", "Bugs created 10wk.jql"))); var jqlRestRequest = new JqlSearchRequest(File.ReadAllText(Path.Combine(@"Models", @"Jira", @"Queries", "Done previous 10wk.jql"))); var jiraQueries = new Task <JiraSearchResponse>[2] { JiraConnector.Instance.GetSearchResults(jqlBugRestRequest), JiraConnector.Instance.GetSearchResults(jqlRestRequest), }; Task.WaitAll(jiraQueries); reporter.GenerateBugReport(jiraQueries[0].Result, jiraQueries[1].Result, 70, 7, Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), outputPath)); break; } case "Bugs by Team - Bugs generated per Engineer": { var reporter = new JiraReporter(); var jqlBugRestRequest = new JqlSearchRequest(File.ReadAllText(Path.Combine(@"Models", @"Jira", @"Queries", "Bugs completed 10wk.jql"))); var searchResult = await JiraConnector.Instance.GetSearchResults(jqlBugRestRequest); break; } case "Sentry Events Frequency": { var reporter = new SentryReporter(); var sentryRequest = new SentryRequest() { interval = "1d", sort = "-timestamp", statsPeriod = "70d", query = "event.type:error", fields = new[] { "count()", "timestamp" } }; var eventFrequencyResult = await SentryConnector.Instance.GetEventFrequency(sentryRequest); reporter.GenerateEventFrequencyReport(eventFrequencyResult, Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), outputPath)); break; } case "Sentry most frequent events -7d": { var reporter = new SentryReporter(); var sentryRequest = new SentryRequest() { sort = "-count", statsPeriod = "7d", query = "event.type:error !is:ignored", fields = new[] { "count()", "title" } }; var frequentEventsResult = await SentryConnector.Instance.GetFrequentEvents(sentryRequest); reporter.GenerateFrequentEventsReport(frequentEventsResult, Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop), outputPath)); break; } default: { throw new Exception("Requested report does not exist"); } } Console.WriteLine($"Report generated: {outputPath}"); } }
private void SendRequest(SentryRequest request) { Console.WriteLine("Would have sent Sentry Dump to {0}:{1}:{2}", _sentryUrl, _sentryClientId, _sentrySecret); Console.WriteLine(_jsonSerialization.Serialize(request)); }