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)); }
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); }
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" } } }); }
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); }