/// <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)); }
/// <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 }); }
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; } }
public async Task <IActionResult> CreateOrUpdateEventCluster([FromBody] EventClusterCreationModel eventObj) { var result = await _eventDataManager.CreateOrUpdateEventCluster(eventObj); return(Ok(result)); }