public async Task Execute(LandmarkRunTriggerModel command,
            ScheduledRunSettingsModel scheduledRunSettings = null)
        {
            var notification = new LandmarkRunStatusNotification();

            try
            {
                var res = await _landmarkRunService.TriggerRunAsync(command, scheduledRunSettings)
                    .ConfigureAwait(false);

                notification.runId = res.RunId;
                notification.externalRunId = res.ExternalRunId;
                notification.status = res.Status.ToString();
            }
            catch (Exception ex)
            {
                notification.errorMessage = ex.Message;
            }
            finally
            {
                var date = _clock.GetCurrentInstant().ToDateTimeUtc();
                notification.date = date;
                notification.time = date.TimeOfDay;

                _runStatusChangedNotifier.Notify(notification);
            }
        }
Exemple #2
0
        public void TriggerRunWhenCalledWithValidModelThenShouldNotThrowException()
        {
            var scenarioId = Guid.NewGuid();
            var command    = new LandmarkRunTriggerModel
            {
                ScenarioId = scenarioId
            };

            _ = _mockRunRepository.Setup(x => x.FindByScenarioId(scenarioId)).Returns(GetRunWithScenario(scenarioId));

            _landmarkRunService.Awaiting(async x => await x.TriggerRunAsync(command).ConfigureAwait(false)).Should().NotThrow();
        }
Exemple #3
0
        public async Task TriggerRunWhenCalledWithValidModelThenShouldCallLandmarkBookingApi()
        {
            var scenarioId = Guid.NewGuid();
            var command    = new LandmarkRunTriggerModel
            {
                ScenarioId = scenarioId
            };

            _ = _mockRunRepository.Setup(x => x.FindByScenarioId(scenarioId)).Returns(GetRunWithScenario(scenarioId));
            await _landmarkRunService.TriggerRunAsync(command).ConfigureAwait(false);

            _mockLandmarkApi.Verify(x => x.TriggerRunAsync(It.IsAny <LandmarkBookingRequest>(), null), Times.Once);
        }
Exemple #4
0
        /// <inheritdoc />
        public async Task <LandmarkTriggerRunResult> TriggerRunAsync(LandmarkRunTriggerModel command, ScheduledRunSettingsModel scheduledRunSettings = null)
        {
            if (command is null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            RaiseInfo($"Starting Landmark run trigger process for ScenarioId: {command.ScenarioId}");

            var run = command.ScenarioId != Guid.Empty ? _runRepository.FindByScenarioId(command.ScenarioId) : default;

            if (run is null)
            {
                throw new InvalidOperationException($"Run for scenario {command.ScenarioId} was not found");
            }

            var scenario = run.Scenarios.SingleOrDefault(s => s.Id == command.ScenarioId);

            if (scenario is null)
            {
                throw new InvalidOperationException($"Scenario {command.ScenarioId} was not found");
            }

            try
            {
                var request = new LandmarkBookingRequest
                {
                    InputFiles = _landmarkAutoBookPayloadProvider.GetFiles(run.Id, command.ScenarioId).ToList()
                };

                var autoBookTriggerResult = await _landmarkApi.TriggerRunAsync(request, scheduledRunSettings).ConfigureAwait(false);

                scenario.ExternalRunInfo = new ExternalRunInfo
                {
                    ExternalRunId  = autoBookTriggerResult.ProcessingId,
                    ExternalStatus = scheduledRunSettings is null
                        ? ExternalScenarioStatus.Accepted
                        : ExternalScenarioStatus.Scheduled,
                    ExternalStatusModifiedDate = _clock.GetCurrentInstant().ToDateTimeUtc(),

                    QueueName         = scheduledRunSettings?.QueueName,
                    Priority          = scheduledRunSettings?.Priority,
                    ScheduledDateTime = scheduledRunSettings?.DateTime,
                    Comment           = scheduledRunSettings?.Comment,

                    CreatorId       = scheduledRunSettings?.CreatorId,
                    CreatedDateTime = _clock.GetCurrentInstant().ToDateTimeUtc()
                };

                _runRepository.Update(run);
                _runRepository.SaveChanges();

                RaiseInfo($"Landmark run triggered for Run: {run.Id} and Scenario: {command.ScenarioId}. Processing id: {autoBookTriggerResult.ProcessingId}");

                return(new LandmarkTriggerRunResult
                {
                    RunId = run.Id,
                    ExternalRunId = autoBookTriggerResult.ProcessingId,
                    Status = scheduledRunSettings is null
                        ? ExternalScenarioStatus.Accepted
                        : ExternalScenarioStatus.Scheduled
                });
            }