public async Task Consume(ConsumeContext <IEventClusterCloseRequested> context)
        {
            try
            {
                _logger.LogDebug($"EventClusterCloseRequestedConsumer: Retrieved close message for event cluster '{context.Message.EventClusterId}'");

                EventClusterCloseModel closeEvent = new EventClusterCloseModel()
                {
                    EventClusterId = context.Message.EventClusterId,
                    ClosureDate    = context.Message.ClosureDate,
                    EndDate        = context.Message.EndDate
                };

                var eventCluster = await _eventClusterRestService.CloseEventCluster(closeEvent);

                if (eventCluster != null && eventCluster.EventClusterId != Guid.Empty)
                {
                    //Push message to Service bus queue
                    _logger.LogDebug($"EventClusterCloseRequestedConsumer: Event closed successfully.");
                    await context.Publish(new EventClusterClosedEvent()
                    {
                        EventCluster = eventCluster
                    });

                    return;
                }
                _logger.LogError("EventClusterCloseRequestedConsumer: The event cluster could not be closed.");
                throw new Exception("The event cluster could not be closed.");
            }
            catch (Exception e)
            {
                _logger.LogError($"EventClusterCloseRequestedConsumer: {e.Message}");
                throw e;
            }
        }
예제 #2
0
        /// <summary>
        /// Close an Event Cluster
        /// </summary>
        /// <param name="eventObj">EventClusterCloseModel</param>
        /// <returns>EventClusterModel</returns>
        public async Task <EventClusterModel> CloseEventCluster(EventClusterCloseModel eventObj)
        {
            EventClusterDAO eventCluster = await _repoEventClusters.GetItemAsync(eventObj.EventClusterId);

            eventCluster.ClosureDate = eventObj.ClosureDate;
            eventCluster.EndDate     = eventObj.EndDate;

            try
            {
                await _repoEventClusters.UpdateItemAsync(eventCluster);
            }
            catch (DocumentClientException e)
            {
                //Update concurrency issue, retrying
                if (e.StatusCode == HttpStatusCode.PreconditionFailed)
                {
                    await CloseEventCluster(eventObj);
                }
                throw e;
            }

            var output = _mapper.Map <EventClusterModel>(eventCluster);

            output.Events = output.Events.Take(3);
            return(output);
        }
        protected EventClusterModel MockEventClusterClose(EventClusterCloseModel model)
        {
            if (model == null)
            {
                return(null);
            }

            if (model.EventClusterId == Guid.Empty)
            {
                return(new EventClusterModel());
            }

            return(new EventClusterModel()
            {
                EventClusterId = model.EventClusterId != Guid.Empty ? model.EventClusterId : Guid.Empty
            });
        }
예제 #4
0
        public async Task <EventClusterModel> CloseEventCluster(EventClusterCloseModel eventObj)
        {
            RestRequest request = await PrepareQuery("EventClusters/Close", Method.PUT);

            request.AddParameter("application/json", JsonConvert.SerializeObject(eventObj), ParameterType.RequestBody);
            var queryResult = await _client.ExecuteTaskAsync <EventClusterModel>(request);

            if (queryResult.IsSuccessful)
            {
                return(queryResult.Data);
            }
            else
            {
                _logger.LogError($"CloseEventCluster: Error while closing an event cluster: {queryResult.StatusCode}");
            }
            return(null);
        }
예제 #5
0
        public async Task <IActionResult> CloseEventCluster([FromBody] EventClusterCloseModel eventObj)
        {
            var result = await _eventDataManager.CloseEventCluster(eventObj);

            return(Ok(result));
        }