示例#1
0
        public async Task <string> SendAsync(SentryEvent sentryEvent)
        {
            if (Dsn == null)
            {
                return("");
            }

            if (sentryEvent == null)
            {
                throw new ArgumentNullException(nameof(sentryEvent));
            }

            if (_sampleRate < 1 && Convert.ToDecimal(new Random().NextDouble()) > _sampleRate)
            {
                return("");
            }

            return(await SerializeAndSendAsync(sentryEvent));
        }
示例#2
0
        private HttpRequestMessage PrepareRequest(SentryEvent sentryEvent)
        {
            var request = new HttpRequestMessage(HttpMethod.Post, Dsn.ReportApiUri)
            {
                Content = Serialize(sentryEvent)
            };

            request.Headers.UserAgent.Add(new ProductInfoHeaderValue(sentryEvent.Sdk.Name, sentryEvent.Sdk.Version));

            var unixTimeSeconds = ((DateTimeOffset)sentryEvent.Timestamp).ToUnixTimeSeconds();

            var client = $"{sentryEvent.Sdk.Name}/{sentryEvent.Sdk.Version}";

            request.Headers.Add(
                "X-Sentry-Auth",
                $"Sentry sentry_version=7,sentry_timestamp={unixTimeSeconds},sentry_key={Dsn.PublicKey},sentry_secret={Dsn.PrivateKey},sentry_client={client}");

            return(request);
        }
示例#3
0
        private StreamContent Serialize(SentryEvent sentryEvent)
        {
            var payload = JsonConvert.SerializeObject(sentryEvent, CreateSerializerSettings());

            var payloadBytes = Encoding.UTF8.GetBytes(payload);

            var ms = new MemoryStream();

            using (var gzip = new GZipStream(ms, CompressionMode.Compress, true))
            {
                gzip.Write(payloadBytes, 0, payloadBytes.Length);
            }

            ms.Position = 0;

            return(new StreamContent(ms)
            {
                Headers = { ContentType = new MediaTypeHeaderValue("application/json"), ContentEncoding = { "gzip" } }
            });
        }
示例#4
0
        private async Task <string> SerializeAndSendAsync(SentryEvent sentryEvent)
        {
            var request = PrepareRequest(sentryEvent);

            var response = await _sendHttpRequestFunc(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                var errorInfo = response.Headers.Contains("X-Sentry-Error")
                    ? string.Join("\n", response.Headers.GetValues("X-Sentry-Error"))
                    : "";

                if (_onError == null)
                {
                    throw new SentryClientException(HttpStatusCode.BadRequest, errorInfo);
                }

                _onError("Error while communicating with sentry API. " + errorInfo);
            }

            var responseMessage = JsonConvert.DeserializeObject <SentrySuccessResponse>(await response.Content.ReadAsStringAsync());

            return(responseMessage.Id);
        }