private static string GetChangeIdsForLog(DelegationChangeEventList delegationChangeEventList) { return(string.Join( ',', delegationChangeEventList.DelegationChangeEvents.Select(delegationChangeEvent => delegationChangeEvent.DelegationChange.DelegationChangeId))); }
/// <summary> /// Converts the delegation change to a delegation change event and pushes it to the event queue. /// Throws exception if something fails /// </summary> /// <param name="delegationChange">The delegation change stored in postgresql</param> public async Task <SendReceipt> Push(DelegationChange delegationChange) { DelegationChangeEventList dceList = _eventMapperService.MapToDelegationChangeEventList(new List <DelegationChange> { delegationChange }); QueueClient queueClient = await GetQueueClient(); return(await queueClient.SendMessageAsync(JsonSerializer.Serialize(dceList))); }
public static void AssertEqual(DelegationChangeEventList expected, DelegationChangeEventList actual) { if (expected == null) { Assert.Null(actual); return; } Assert.Equal(expected.DelegationChangeEvents.Count, actual.DelegationChangeEvents.Count); for (int i = 0; i < expected.DelegationChangeEvents.Count; i++) { AssertEqual(expected.DelegationChangeEvents[i], actual.DelegationChangeEvents[i]); } }
/// <inheritdoc /> public List <PlatformDelegationEvent> MapToPlatformEventList(DelegationChangeEventList delegationChangeEventList) { return(delegationChangeEventList.DelegationChangeEvents.Select(delegationChangeEvent => new PlatformDelegationEvent() { EventType = delegationChangeEvent.EventType, PolicyChangeId = delegationChangeEvent.DelegationChange.DelegationChangeId, Created = delegationChangeEvent.DelegationChange.Created, AltinnAppId = delegationChangeEvent.DelegationChange.AltinnAppId, OfferedByPartyId = delegationChangeEvent.DelegationChange.OfferedByPartyId, CoveredByPartyId = delegationChangeEvent.DelegationChange.CoveredByPartyId ?? 0, CoveredByUserId = delegationChangeEvent.DelegationChange.CoveredByUserId ?? 0, PerformedByUserId = delegationChangeEvent.DelegationChange.PerformedByUserId }) .ToList()); }
public void MapToDelegationChangeEventList() { // Arrange EventMapperService mapper = new EventMapperService(); DateTime now = DateTime.Now; DelegationChangeEventList expected = new DelegationChangeEventList { DelegationChangeEvents = new List <DelegationChangeEvent> { new DelegationChangeEvent { EventType = DelegationChangeEventType.Grant, DelegationChange = new SimpleDelegationChange { DelegationChangeId = 1, AltinnAppId = "ttd/testapp", OfferedByPartyId = 123, CoveredByPartyId = 234, PerformedByUserId = 567, Created = now } } } }; List <DelegationChange> input = new List <DelegationChange>() { new DelegationChange() { DelegationChangeId = 1, DelegationChangeType = DelegationChangeType.Grant, AltinnAppId = "ttd/testapp", OfferedByPartyId = 123, CoveredByPartyId = 234, PerformedByUserId = 567, BlobStoragePolicyPath = "ttd/testapp/123/p234/delegationpolicy.xml", BlobStorageVersionId = now.ToString(), Created = now } }; // Act DelegationChangeEventList actual = mapper.MapToDelegationChangeEventList(input); // Assert AssertionUtil.AssertEqual(expected, actual); }
/// <summary> /// Pushes the events to bridge. /// </summary> /// <param name="delegationChangeEventList">The delegation change events.</param> /// <exception cref="BridgeRequestFailedException">Thrown if something fails, or if Bridge returns a non-successful response to ensure retry.</exception> public async Task PushEvents(DelegationChangeEventList delegationChangeEventList) { try { if (delegationChangeEventList == null) { _logger.LogError("Received null instead of delegation change events. Failed to deserialize model?"); throw new BridgeRequestFailedException(); } delegationChangeEventList.DelegationChangeEvents ??= new List <DelegationChangeEvent>(); if (delegationChangeEventList.DelegationChangeEvents.Count == 0) { _logger.LogError("Received empty list of delegation change events. Failed to deserialize model?"); return; } if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug( "Posting delegationChangeEventList numEventsSent={numEventsSent} changeIds={changeIds}", delegationChangeEventList.DelegationChangeEvents.Count, GetChangeIdsForLog(delegationChangeEventList)); } HttpResponseMessage response = await _bridgeClient.PostDelegationEventsAsync(_eventMapperService.MapToPlatformEventList(delegationChangeEventList)); if (!response.IsSuccessStatusCode) { _logger.LogWarning( "Bridge returned non-success. resultCode={resultCode} reasonPhrase={reasonPhrase} resultBody={resultBody} numEventsSent={numEventsSent} changeIds={changeIds}", response.StatusCode, response.ReasonPhrase, await response.Content.ReadAsStringAsync(), delegationChangeEventList.DelegationChangeEvents.Count, GetChangeIdsForLog(delegationChangeEventList)); // Throw exception to ensure requeue of the event list throw new BridgeRequestFailedException(); } if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug( "Successfully posted delegationChangeEventList numEventsSent={numEventsSent} changeIds={changeIds}", delegationChangeEventList.DelegationChangeEvents.Count, GetChangeIdsForLog(delegationChangeEventList)); } } catch (BridgeRequestFailedException) { throw; } catch (Exception ex) { _logger.LogError( "Exception thrown while attempting to post delegation events to Bridge. exception={exception} message={message} numEventsSent={numEventsSent} changeIds={changeIds}", ex.GetType().Name, ex.Message, delegationChangeEventList?.DelegationChangeEvents?.Count, GetChangeIdsForLog(delegationChangeEventList)); throw new BridgeRequestFailedException(); } }
public async Task RunAsync([QueueTrigger("delegationevents", Connection = "QueueStorage")] string queueItem) { DelegationChangeEventList delegationChangeEventList = System.Text.Json.JsonSerializer.Deserialize <DelegationChangeEventList>(queueItem); await _eventPusherService.PushEvents(delegationChangeEventList); }