Exemple #1
0
        /// <summary>
        /// Create an Event Cluster
        /// </summary>
        /// <param name="eventObj">EventClusterCreationModel</param>
        /// <returns>EventClusterModel</returns>
        public async Task <EventClusterModel> CreateEventCluster(EventClusterCreationModel eventObj)
        {
            //If device doesn't exist, throw exception
            DeviceDAO deviceEntity = await _repoDevices.GetItemAsync(eventObj.DeviceId);

            if (deviceEntity == null)
            {
                throw new Exception($"No device found that matches DeviceId: {eventObj.DeviceId}");
            }

            EventClusterDAO eventCluster = new EventClusterDAO()
            {
                Id         = eventObj.EventClusterId.ToString(),
                Device     = _mapper.Map <EventClusterDeviceDAOObject>(deviceEntity),
                EventType  = eventObj.EventType.ToLower(),
                EventCount = 1,
                Events     = new EventDAOObject[] { _mapper.Map <EventDAOObject>(eventObj) },
                StartDate  = eventObj.Date
            };

            eventCluster.Id = await _repoEventClusters.CreateItemAsync(eventCluster);

            if (_repoEventClusters.IsDocumentKeyNull(eventCluster))
            {
                throw new Exception($"An error occured when creating a new cluster id for DeviceId: {eventObj.DeviceId}");
            }

            return(_mapper.Map <EventClusterModel>(eventCluster));
        }
Exemple #2
0
        /// <summary>
        /// Create or Update an Event Cluster
        /// </summary>
        /// <param name="eventObj">EventClusterCreationModel</param>
        /// <returns>EventClusterModel</returns>
        public async Task <EventClusterModel> CreateOrUpdateEventCluster(EventClusterCreationModel eventObj)
        {
            //Look for existing cluster that matches DeviceId + EventType and hasn't ended yet.
            EventClusterDAO eventCluster = await _repoEventClusters.GetItemAsync(eventObj.EventClusterId);

            //Create
            if (eventCluster == null)
            {
                return(await CreateEventCluster(eventObj));
            }

            eventCluster.Events = eventCluster.Events.Append(_mapper.Map <EventDAOObject>(eventObj)).OrderByDescending(p => p.Date).ToArray();
            eventCluster.EventCount++;
            try
            {
                await _repoEventClusters.UpdateItemAsync(eventCluster);
            }
            catch (DocumentClientException e)
            {
                //Update concurrency issue, retrying
                if (e.StatusCode == HttpStatusCode.PreconditionFailed)
                {
                    return(await CreateOrUpdateEventCluster(eventObj));
                }
                throw e;
            }

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

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

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

            return(new EventClusterModel()
            {
                EventClusterId = model.EventClusterId != Guid.Empty ? model.EventClusterId : Guid.Empty
            });
        }
Exemple #4
0
        public async Task <EventClusterModel> CreateOrUpdateEventCluster(EventClusterCreationModel eventObj)
        {
            RestRequest request = await PrepareQuery("EventClusters", Method.POST);

            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($"CreateOrUpdateEventClusterFromIoTDevice: Error while adding an event: {queryResult.StatusCode}");
            }
            return(null);
        }
        public async Task Consume(ConsumeContext <IEventClusterCreateOrUpdateRequested> context)
        {
            try
            {
                _logger.LogDebug($"EventClusterCreateRequestedConsumer: Retrieved message from source '{context.Message.DeviceId}'.");

                if (JsonConvert.DeserializeObject <Dictionary <string, object> >(context.Message.Data) is Dictionary <string, object> deviceMessage)
                {
                    EventClusterCreationModel newEvent = new EventClusterCreationModel()
                    {
                        EventClusterId = context.Message.EventClusterId,
                        Date           = context.Message.Date,
                        EventType      = context.Message.EventType.ToLower(),
                        DeviceId       = context.Message.DeviceId,
                        Metadata       = deviceMessage,
                    };

                    var eventCluster = await _eventClusterRestService.CreateOrUpdateEventCluster(newEvent);

                    if (eventCluster != null && eventCluster.EventClusterId != Guid.Empty)
                    {
                        //Push message to Service bus queue
                        _logger.LogDebug($"EventClusterCreateRequestedConsumer: Event cluster created: '{eventCluster.EventClusterId}'.");
                        await context.Publish(new EventClusterCreatedOrUpdatedEvent()
                        {
                            EventCluster = eventCluster, LastEventDate = context.Message.Date
                        });

                        return;
                    }

                    _logger.LogError("EventClusterCreateRequestedConsumer: The event could not be created.");
                    throw new Exception("The event cluster could not be created.");
                }

                _logger.LogError($"EventAddToClusterRequestedConsumer: Error while deserializing message from device '{context.Message.DeviceId}'.");
                throw new Exception($"Error while deserializing message from device '{context.Message.DeviceId}'.");
            }
            catch (Exception e)
            {
                _logger.LogError($"EventAddToClusterRequestedConsumer: {e.Message}");
                throw e;
            }
        }
Exemple #6
0
        public async Task <IActionResult> CreateOrUpdateEventCluster([FromBody] EventClusterCreationModel eventObj)
        {
            var result = await _eventDataManager.CreateOrUpdateEventCluster(eventObj);

            return(Ok(result));
        }