Exemple #1
0
        public void Process(CaseReported @event)
        {
            var caseReport = _caseReports.GetById(@event.Id);

            if (caseReport == null)
            {
                caseReport = new CaseReport
                {
                    Id = @event.Id,
                    DataCollectorId     = @event.DataCollectorId,
                    HealthRiskId        = @event.HealthRiskId,
                    Location            = @event.Location,
                    SubmissionTimestamp = @event.CaseOccured
                };
            }
            else
            {
                caseReport.Id = @event.Id;
                caseReport.DataCollectorId     = @event.DataCollectorId;
                caseReport.HealthRiskId        = @event.HealthRiskId;
                caseReport.Location            = @event.Location;
                caseReport.SubmissionTimestamp = @event.CaseOccured;
            }
            _caseReports.Save(caseReport);

            var disease = _healthRisks.GetById(caseReport.HealthRiskId) ?? new HealthRisk
            {
                Id = @event.HealthRiskId,
                ThresholdTimePeriodInDays = 7,
                ThresholdNumberOfCases    = 3
            };

            var latestReports = _caseReports.GetCaseReportsAfterDate(
                DateTime.UtcNow.Subtract(TimeSpan.FromDays(disease.ThresholdTimePeriodInDays)), caseReport.HealthRiskId);

            if (latestReports.Count > disease.ThresholdNumberOfCases)
            {
                var alert = _alerts.Get(caseReport.HealthRiskId, caseReport.Location);
                if (alert == null)
                {
                    alert = new Alert
                    {
                        Id           = Guid.NewGuid(),
                        HealthRiskId = caseReport.HealthRiskId,
                        Location     = caseReport.Location,
                    };
                }
                alert.CaseReports.Add(caseReport);
                _alerts.Save(alert);


                // Todo: Temporary fix - we're not supposed to do this, awaiting the new Policy building block in doLittle to be ready
                var stream = new UncommittedEventStream(null);
                stream.Append(new AlertRaised(), EventSourceVersion.Zero.NextCommit());
                _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), stream);

                _feedbackService.SendFeedbackToDataCollecorsAndVerifiers(latestReports);
            }
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="eventSourceId"></param>
        /// <param name="@event"></param>
        protected void Apply(EventSourceId eventSourceId, IEvent @event)
        {
            var transactionCorrelationId = TransactionCorrelationId.New();
            var eventSource = GetEventSourceForThisController(eventSourceId);

            eventSource.Apply(@event);
            _uncommittedEventStreamCoordinator.Commit(transactionCorrelationId, eventSource.UncommittedEvents);
        }
Exemple #3
0
        void ApplyEvent(IEvent @event)
        {
            // Todo: Temporary fix - we're not supposed to do this, awaiting the new Policy building block in doLittle to be ready
            var stream = new UncommittedEventStream(null);

            stream.Append(@event, EventSourceVersion.Zero.NextCommit());
            _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), stream);
        }
        /// <inheritdoc/>
        public void Commit()
        {
            var trackedObjects = GetObjectsBeingTracked();

            foreach (var trackedObject in trackedObjects)
            {
                var events = trackedObject.UncommittedEvents;
                if (events.HasEvents)
                {
                    _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId, events);
                    trackedObject.Commit();
                }
            }
        }
Exemple #5
0
        public void Commit()
        {
            var trackedObjects = GetObjectsBeingTracked();

            foreach (var trackedObject in trackedObjects)
            {
                var events = trackedObject.UncommittedEvents;
                if (events.HasEvents)
                {
                    events.MarkEventsWithCommandDetails(Command);
                    events.ExpandExecutionContext(ExecutionContext);
                    _uncommittedEventStreamCoordinator.Commit(events);
                    trackedObject.Commit();
                }
            }
        }
Exemple #6
0
        /// <inheritdoc/>
        public void Commit()
        {
            _logger.Information("Commit transaction");
            var trackedObjects = GetObjectsBeingTracked();

            _logger.Trace($"Total number of objects tracked '{trackedObjects.Count()}");
            foreach (var trackedObject in trackedObjects)
            {
                _logger.Trace($"Committing events from {trackedObject.GetType().AssemblyQualifiedName}");
                var events = trackedObject.UncommittedEvents;
                if (events.HasEvents)
                {
                    _logger.Trace("Events present - send them to uncommitted eventstream coordinator");
                    _uncommittedEventStreamCoordinator.Commit(CorrelationId, events);
                    _logger.Trace("Commit object");
                    trackedObject.Commit();
                }
            }
        }
Exemple #7
0
 public void Replay <T>(
     IEnumerable <T> events,
     Func <T, Guid> getIdCallback,
     Action <IEventSource, T> eventSourceCallback = null) where T : IEvent
 {
     events.ForEach(@event => {
         try
         {
             var eventSource = new ExternalSource(getIdCallback(@event));
             eventSource.Apply(@event);
             if (eventSourceCallback != null)
             {
                 eventSourceCallback(eventSource, @event);
             }
             _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), eventSource.UncommittedEvents);
         } catch (Exception exception)
         {
             _logger.Error(exception, "Problem applying event");
         }
     });
 }
Exemple #8
0
        public async Task Post([FromBody] Event @event)
        {
            var eventType = _typeFinder.All.Where(type => type.Name == @event.Name).SingleOrDefault();

            if (eventType == null)
            {
                throw new ArgumentException("Cannot resolve Event Type from Name - please check the name again");
            }

            var serialized    = JsonConvert.SerializeObject(@event.Content);
            var eventInstance = JsonConvert.DeserializeObject(serialized, eventType) as IEvent;

            var eventSource = new EventsControllerEventSource(@event.EventSourceId);

            eventSource.Apply(eventInstance);
            _uncommittedEventStreamCoordinator.Commit(
                TransactionCorrelationId.New(),
                eventSource.UncommittedEvents);

            await Task.CompletedTask;
        }