コード例 #1
0
        public async Task <IActionResult> PutMeasurement(
            [FromRoute] int id,
            [FromBody] MeasurementRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != request.Id)
            {
                return(BadRequest());
            }

            var oldMeasurement = await _dataContext.Measurements.FindAsync(request.Id);

            if (oldMeasurement == null)
            {
                return(BadRequest("Measurements doesn't exists."));
            }

            oldMeasurement.Measure     = request.Measure;
            oldMeasurement.MeasureDate = request.MeasureDate;

            _dataContext.Measurements.Update(oldMeasurement);
            await _dataContext.SaveChangesAsync();

            return(Ok(true));
        }
コード例 #2
0
        private static FoundationResponse <string> PushToServer(List <MetricPoint> points, string db, string rp)
        {
            string str;
            FoundationResponse <string> foundationResponse = null;

            if ((points == null ? false : points.Count > 0))
            {
                try
                {
                    string appUri = LocationHelper.Instance.GetAppUri(AppNameEnum.MeasurementApi);
                    if (string.IsNullOrEmpty(appUri))
                    {
                        DebugUtil.Log("MeasurementHost: failed to fetch measurementServerInfo.Uri from location.");
                        foundationResponse = new FoundationResponse <string>()
                        {
                            IsSuccess = false
                        };
                    }
                    else
                    {
                        str = (!appUri.EndsWith("/") ? string.Format("{0}/api/measurement/write/", appUri) : string.Format("{0}api/measurement/write/", appUri));
                        MeasurementRequest measurementRequest = new MeasurementRequest();
                        measurementRequest.MetricPoints.AddRange(points);
                        measurementRequest.DBName          = db;
                        measurementRequest.RetentionPolicy = rp;
                        DebugUtil.Log(string.Format("MeasurementHost: Sending {0} points to db '{1}' via {2}.", points.Count, measurementRequest.DBName, str));
                        foundationResponse = ProxyBase.Call <FoundationResponse <string>, object>(str, measurementRequest, ApiHttpMethod.POST, 180000, null).Result;
                        if (foundationResponse == null)
                        {
                            foundationResponse = new FoundationResponse <string>();
                        }
                        foundationResponse.IsSuccess = true;
                    }
                }
                catch (Exception exception1)
                {
                    Exception exception = exception1;
                    foundationResponse.IsSuccess = false;
                    foundationResponse.ErrMsg    = string.Format("{0}\r\n{1}", exception.Message, exception.StackTrace);
                    DebugUtil.LogException(exception);
                }
            }
            return(foundationResponse);
        }
コード例 #3
0
        public async Task <IActionResult> PostMeasurement([FromBody] MeasurementRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }


            //var up = await _dataContext.UPs.FindAsync(request.UpId);
            //if (up == null)
            //{
            //    return BadRequest("Not valid up.");
            //}

            //var home = await _dataContext.Homes.FindAsync(request.HomeId);
            //if (home == null)
            //{
            //    return BadRequest("Not valid Home.");
            //}

            var flower = await _dataContext.Flowers.FindAsync(request.FlowerId);

            if (flower == null)
            {
                return(BadRequest("Not valid flower."));
            }


            var measurement = new Measurement
            {
                Measure     = request.Measure,
                MeasureDate = request.MeasureDate,
                Flower      = flower
            };

            _dataContext.Measurements.Add(measurement);
            await _dataContext.SaveChangesAsync();

            return(Ok(true));
        }
コード例 #4
0
 public IActionResult Create([FromBody] MeasurementRequest request)
 {
     CreateMeasures(request.Measurements);
     foreach (var reqMeasurement in request.Measurements)
     {
         var measurement = new Measurement
         {
             UserId    = CurrentUserId,
             MeasureId = reqMeasurement.MeasureId.Value,
             Time      = request.Time,
             Value     = reqMeasurement.Value
         };
         if (reqMeasurement.MeasurementId.HasValue)
         {
             measurement.Id = reqMeasurement.MeasurementId.Value;
             measurementRepository.UpdateMeasurement(measurement);
         }
         else
         {
             measurementRepository.CreateMeasurement(measurement);
         }
     }
     return(Ok());
 }
コード例 #5
0
        public async Task <ActionResult <Measurement> > PostMeasurement(MeasurementRequest request)
        {
            // get existing module or create new one if it doesn't exist yet
            Module module = await _context.Modules.FirstOrDefaultAsync(m => m.Name == request.Logger) ?? new Module
            {
                Name = request.Logger
            };

            var currentDate = DateTime.Now;

            // add received sensor data to the measurement
            foreach (SensorRequest sensorRequest in request.Sensors)
            {
                Measurement measurement = new Measurement
                {
                    Module         = module,
                    TimeReceived   = request.DateTime,
                    TimeRegistered = currentDate
                };
                // determine sensor type and set value of the measurement based on that
                switch (sensorRequest.GetType())
                {
                case SensorType.Dendro:
                    measurement.Value = (double)sensorRequest.Distance;
                    break;

                case SensorType.Humidity:
                    measurement.Value = (double)sensorRequest.Humidity;
                    break;

                case SensorType.Thermo:
                    measurement.Value = (double)sensorRequest.Temperature;
                    break;

                default:
                    throw new Exception("Unknown sensor type");
                }

                Sensor sensor = await _context.Sensors.FirstOrDefaultAsync(s => s.Name == sensorRequest.Label) ?? new Sensor
                {
                    Name       = sensorRequest.Label,
                    SensorType = sensorRequest.GetType()
                };

                // find existing spec fot this sensor. If it doesn't exist yet a new default spec will be created
                SensorSpec sensorSpec = await _context.SensorSpecs
                                        .Include(ss => ss.Spec)
                                        .FirstOrDefaultAsync(ss => ss.SensorID == sensor.SensorID);

                measurement.SensorSpec = sensorSpec ?? new SensorSpec
                {
                    Sensor = sensor,
                    Spec   = new DefaultSpec(sensor.SensorType)
                };

                _context.Measurements.Add(measurement);

                await _context.SaveChangesAsync();
            }


            return(CreatedAtAction("GetMeasurements", null));
        }
コード例 #6
0
        public virtual async Task <AsyncServerStreamingCall <MeasurementResponse> > GetMeasurementStream(MeasurementRequest request, CancellationToken cancellationToken)
        {
            await RefreshAccessToken();

            return(machineClient.GetMeasurementStream(request, accessToken, cancellationToken: cancellationToken));
        }