Esempio n. 1
0
        public override Task <RoutingResponse> EnqueueBulkMeasurements(MeasurementData request, ServerCallContext context)
        {
            RoutingResponse response;

            using (this.m_duration.NewTimer()) {
                this.m_logger.LogDebug("Bulk ingress request with {count} measurements.", request.Measurements.Count);

                try {
                    var dto = new List <Measurement>();

                    foreach (var raw in request.Measurements)
                    {
                        var measurement = MeasurementProtobufConverter.Convert(raw);

                        if (MeasurementValidator.Validate(measurement))
                        {
                            dto.Add(measurement);
                        }
                    }

                    this.m_queue.AddRange(dto);
                    this.m_measurementRequests.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));
        }
Esempio n. 2
0
        public JsonResult Add([FromBody] Measurement measurement, [FromHeader] string authorization)
        {
            var authorized = GetAuthorization(authorization);

            if (!authorized.IsAuthorized)
            {
                return(Json(new { Status = "Error", Errors = new string[] { authorized.Message } }));
            }

            var measurementErrors = MeasurementValidator.GetErrors(measurement);

            if (measurementErrors != null)
            {
                return(Json(new { Status = "Error", Errors = measurementErrors }));
            }

            measurement.DateMeasured = DateTime.Now;
            hubContext.Clients.All.SendAsync("MeasurementAdded", measurement);
            persistency.Insert(measurement);
            return(Json(new { Status = "Added", Username = authorized.Username, MeasurementAdded = measurement }));
        }
Esempio n. 3
0
        public override Task <RoutingResponse> EnqueueMeasurement(Platform.Router.Contracts.DTO.Measurement request, ServerCallContext context)
        {
            RoutingResponse response;

            using (this.m_duration.NewTimer()) {
                this.m_logger.LogDebug("Received measurement routing request from sensor {sensorId}.",
                                       request.SensorID);

                try {
                    var count = 0;
                    var dto   = MeasurementProtobufConverter.Convert(request);

                    if (MeasurementValidator.Validate(dto))
                    {
                        this.m_queue.Add(dto);
                        this.m_measurementRequests.Inc();

                        count += 1;
                    }

                    response = new RoutingResponse {
                        Count      = count,
                        Message    = "Measurements 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    = "Measurements not queued. Invalid sensor ID.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                }
            }

            return(Task.FromResult(response));
        }