|
1 | 1 | using System.Text.Json; |
2 | 2 | using System.Text.Json.Serialization; |
| 3 | +using Azure; |
3 | 4 | using Microsoft.OneFuzz.Service.OneFuzzLib.Orm; |
4 | 5 |
|
5 | 6 | namespace Microsoft.OneFuzz.Service { |
@@ -41,8 +42,27 @@ public Events(IQueue queue, IWebhookOperations webhook, ILogTracer log, IContain |
41 | 42 | } |
42 | 43 |
|
43 | 44 | public async Async.Task QueueSignalrEvent(EventMessage message) { |
44 | | - var ev = new SignalREvent("events", new List<EventMessage>() { message }); |
45 | | - await _queue.SendMessage("signalr-events", JsonSerializer.Serialize(ev, _options), StorageType.Config); |
| 45 | + var tags = new (string, string)[] { |
| 46 | + ("event_type", message.EventType.ToString()), |
| 47 | + ("event_id", message.EventId.ToString()) |
| 48 | + }; |
| 49 | + try { |
| 50 | + var ev = new SignalREvent("events", new List<EventMessage>() { message }); |
| 51 | + await _queue.SendMessage("signalr-events", JsonSerializer.Serialize(ev, _options), StorageType.Config); |
| 52 | + } catch (RequestFailedException ex) { |
| 53 | + if (ex.Message.Contains("The request body is too large") && message.Event is ITruncatable<BaseEvent> truncatableEvent) { |
| 54 | + _log.WithTags(tags).Warning($"The EventMessage was too large for Azure Queue. Truncating event data and trying again."); |
| 55 | + message = message with { |
| 56 | + Event = truncatableEvent.Truncate(1000) |
| 57 | + }; |
| 58 | + var ev = new SignalREvent("events", new List<EventMessage>() { message }); |
| 59 | + await _queue.SendMessage("signalr-events", JsonSerializer.Serialize(ev, _options), StorageType.Config); |
| 60 | + } else { |
| 61 | + // Not handled |
| 62 | + throw ex; |
| 63 | + } |
| 64 | + } |
| 65 | + |
46 | 66 | } |
47 | 67 |
|
48 | 68 | public async Async.Task SendEvent(BaseEvent anEvent) { |
|
0 commit comments