public async Task FlushMessagesAsync() { var publishes = new ConcurrentBag <Task>(); this.m_gauge.Set(0D); var measurements = this.m_measurements.DequeueRange(int.MaxValue).ToList(); var messages = this.m_messages.DequeueRange(int.MaxValue).ToList(); if (measurements.Count > 0) { var protoMeasurements = MeasurementProtobufConverter.Convert(measurements); await using var measurementStream = new MemoryStream(); protoMeasurements.WriteTo(measurementStream); var data = measurementStream.ToArray().Compress(); publishes.Add(this.m_client.PublishOnAsync(this.m_measurementStorageQueue, data, false)); } if (messages.Count > 0) { var protoMessages = MessageProtobufConverter.Convert(messages); await using var messageStream = new MemoryStream(); protoMessages.WriteTo(messageStream); var messageData = messageStream.ToArray().Compress(); publishes.Add(this.m_client.PublishOnAsync(this.m_messageStorageQueue, messageData, false)); } await Task.WhenAll(publishes).ConfigureAwait(false); }
public void EnqueueMessageToTarget(IPlatformMessage message, RoutingTarget target) { this.m_liveDataLock.Lock(); try { this.m_textMessageQueues[target.Target].Messages.Add(MessageProtobufConverter.Convert(message as Message)); this.m_gaugeLiveDataService.Inc(); } finally { this.m_liveDataLock.Unlock(); } }
public void EnqueueMessageToTriggerService(IPlatformMessage message) { this.m_measurementLock.Lock(); try { this.m_triggerMessages.Messages.Add(MessageProtobufConverter.Convert(message as Message)); this.m_gaugeTriggerSerivce.Inc(); } finally { this.m_measurementLock.Unlock(); } }
public override Task <RoutingResponse> EnqueueBulkMessages(TextMessageData request, ServerCallContext context) { RoutingResponse response; using (this.m_duration.NewTimer()) { this.m_logger.LogDebug("Bulk ingress request with {count} messages.", request.Messages.Count); try { var dto = new List <Message>(); foreach (var raw in request.Messages) { var message = MessageProtobufConverter.Convert(raw); if (MessageValidator.Validate(message)) { dto.Add(message); } } this.m_queue.AddRange(dto); this.m_messageRequests.Inc(); response = new RoutingResponse { Count = dto.Count, Message = "Messages queued.", ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray()) }; } catch (FormatException ex) { this.m_logger.LogWarning("Received messages from an invalid sensor. Exception: {exception}", ex); response = new RoutingResponse { Count = 0, Message = "Messages not queued. Invalid sensor ID.", ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray()) }; } } return(Task.FromResult(response)); }
public override Task <RoutingResponse> EnqueueMessage(TextMessage request, ServerCallContext context) { RoutingResponse response; using (this.m_duration.NewTimer()) { this.m_logger.LogDebug("Received message routing request from sensor {sensorId}.", request.SensorID); try { var count = 0; var dto = MessageProtobufConverter.Convert(request); if (MessageValidator.Validate(dto)) { this.m_queue.Add(dto); this.m_messageRequests.Inc(); count += 1; } response = new RoutingResponse { Count = count, Message = "Message queued.", ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray()) }; } catch (FormatException) { this.m_logger.LogWarning("Received messages from an invalid sensor (ID): {sensorID}", request.SensorID); response = new RoutingResponse { Count = 0, Message = "Messages not queued. Invalid sensor ID.", ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray()) }; } } return(Task.FromResult(response)); }