Exemple #1
0
        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);
        }
Exemple #3
0
        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);
                }
            }
        }
Exemple #5
0
        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);
        }
Exemple #8
0
        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");
            });
        }
Exemple #13
0
        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}");
            }
        }
Exemple #14
0
 private void SendRequest(SentryRequest request)
 {
     Console.WriteLine("Would have sent Sentry Dump to {0}:{1}:{2}", _sentryUrl, _sentryClientId, _sentrySecret);
     Console.WriteLine(_jsonSerialization.Serialize(request));
 }