public async Task Handle(AddStatusEventManualChangeEntity entity) { var time = entity.Timestamp.UtcDateTime; var eventEntity = new EventEntity( entity.EventAffectedComponentPath, time, affectedComponentStatus: (ComponentStatus)entity.EventAffectedComponentStatus, endTime: entity.EventIsActive ? (DateTime?)null : time); var messageEntity = new MessageEntity( eventEntity, time, entity.MessageContents, MessageType.Manual); await _table.InsertAsync(messageEntity); await _table.InsertAsync(eventEntity); }
public async Task CreateMessageAsync(EventEntity eventEntity, DateTime time, MessageType type, IComponent component, ComponentStatus status) { using (_logger.Scope("Creating new message of type {Type} for event {EventRowKey} at {Timestamp} affecting {ComponentPath} with status {ComponentStatus}.", type, eventEntity.RowKey, time, component.Path, status)) { var existingMessage = await _table.RetrieveAsync <MessageEntity>(MessageEntity.GetRowKey(eventEntity, time)); if (existingMessage != null) { _logger.LogInformation("Message already exists, will not recreate."); return; } var contents = _builder.Build(type, component, status); var messageEntity = new MessageEntity(eventEntity, time, contents, type); _logger.LogInformation("Creating message with time {MessageTimestamp} and contents {MessageContents}.", messageEntity.Time, messageEntity.Contents); await _table.InsertAsync(messageEntity); } }
public async Task Handle(AddStatusMessageManualChangeEntity entity) { var time = entity.Timestamp.UtcDateTime; var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); var eventEntity = await _table.RetrieveAsync <EventEntity>(eventRowKey); if (eventEntity == null) { throw new ArgumentException("Cannot create a message for an event that does not exist."); } var messageEntity = new MessageEntity(eventEntity, time, entity.MessageContents, MessageType.Manual); await _table.InsertAsync(messageEntity); if (ManualStatusChangeUtility.UpdateEventIsActive(eventEntity, entity.EventIsActive, time)) { await _table.ReplaceAsync(eventEntity); } }