|
1 | 1 | using MsgPack.Serialization; |
2 | 2 | using System; |
3 | 3 | using System.Collections.Generic; |
4 | | -using System.IO; |
| 4 | +using System.Net; |
5 | 5 | using System.Net.Http; |
6 | 6 | using System.Reflection; |
7 | 7 | using System.Runtime.InteropServices; |
@@ -54,32 +54,42 @@ public Api(Uri baseEndpoint, DelegatingHandler delegatingHandler = null) |
54 | 54 | _client.DefaultRequestHeaders.Add("Datadog-Meta-Tracer-Version", Assembly.GetEntryAssembly().GetName().Version.ToString()); |
55 | 55 | } |
56 | 56 |
|
57 | | - public async Task SendTracesAsync(IList<List<Span>> traces) |
| 57 | + private async Task SendAsync<T>(T value, Uri endpoint) |
58 | 58 | { |
59 | | - try |
60 | | - { |
61 | | - var content = new MsgPackContent<IList<List<Span>>>(traces, _serializationContext); |
62 | | - var response = await _client.PostAsync(_tracesEndpoint, content); |
63 | | - response.EnsureSuccessStatusCode(); |
64 | | - } |
65 | | - catch |
| 59 | + const int retries = 2; |
| 60 | + for (int i = 0; i < retries + 1; i++) |
66 | 61 | { |
67 | | - //TODO:bertrand Log exception |
| 62 | + try |
| 63 | + { |
| 64 | + var content = new MsgPackContent<T>(value, _serializationContext); |
| 65 | + var response = await _client.PostAsync(endpoint, content); |
| 66 | + if(response.StatusCode == HttpStatusCode.OK) |
| 67 | + { |
| 68 | + return; |
| 69 | + } |
| 70 | + if((int)response.StatusCode >= 400 && (int)response.StatusCode < 500) |
| 71 | + { |
| 72 | + // TODO:bertrand log |
| 73 | + return; |
| 74 | + } |
| 75 | + throw new HttpRequestException($"The request to {endpoint} failed with status {response.StatusCode}"); |
| 76 | + } |
| 77 | + catch |
| 78 | + { |
| 79 | + // TODO:bertrand Log |
| 80 | + } |
| 81 | + await Task.Delay(TimeSpan.FromSeconds(1)); |
68 | 82 | } |
69 | 83 | } |
70 | 84 |
|
| 85 | + public async Task SendTracesAsync(IList<List<Span>> traces) |
| 86 | + { |
| 87 | + await SendAsync(traces, _tracesEndpoint); |
| 88 | + } |
| 89 | + |
71 | 90 | public async Task SendServiceAsync(ServiceInfo service) |
72 | 91 | { |
73 | | - try |
74 | | - { |
75 | | - var content = new MsgPackContent<ServiceInfo>(service, _serializationContext); |
76 | | - var response = await _client.PostAsync(_servicesEndpoint, content); |
77 | | - response.EnsureSuccessStatusCode(); |
78 | | - } |
79 | | - catch |
80 | | - { |
81 | | - // TODO:bertrand log exception |
82 | | - } |
| 92 | + await SendAsync(service, _servicesEndpoint); |
83 | 93 | } |
84 | 94 | } |
85 | 95 | } |
0 commit comments