示例#1
0
        public async Task <ActionResult <SensorDetailsApiModel> > Create([BindRequired] SensorLocatorBindingModel view)
        {
            var device = await _service.GetDeviceByNameAsync(view.DeviceName);

            await _service.CreateSensorByDeviceAndNameAsync(device, view.Name);

            var sensor = await _service.GetSensorByDeviceAndNameAsync(device, view.Name);

            var res = new SensorDetailsApiModel(sensor);

            return(CreatedAtAction(nameof(Create), res));
        }
示例#2
0
        public async Task <ActionResult <SensorDetailsApiModel> > Show(string deviceName, string sensorName, [FromQuery(Name = "started_at")] string?startedAtQuery = null, [FromQuery(Name = "duration")] string?durationQuery = null)
        {
            var device = await _service.GetDeviceByNameAsync(deviceName);

            var sensor = await _service.GetSensorByDeviceAndNameAsync(device, sensorName);

            var values = new List <(double, Instant)>();

            _logger.LogTrace($"Getting query {startedAtQuery} and {durationQuery}");
            var duration = Duration.FromSeconds(3600);

            if (durationQuery != null)
            {
                try {
                    var converted = TypeDescriptor.GetConverter(typeof(Duration)).ConvertFromString(durationQuery);
                    if (converted != null)
                    {
                        duration = (Duration)converted;
                    }
                } catch (NotSupportedException) {
                    // do nothing
                } catch (UnparsableValueException exception) {
                    throw new InvalidArgumentException(exception.Message, "duration");
                }
            }
            var startedAt = _clock.GetCurrentInstant() - duration;

            if (startedAtQuery != null)
            {
                try {
                    var converted = TypeDescriptor.GetConverter(typeof(Instant)).ConvertFromString(startedAtQuery);
                    if (converted != null)
                    {
                        startedAt = (Instant)converted;
                    }
                } catch (NotSupportedException) {
                    // do nothing
                } catch (UnparsableValueException exception) {
                    throw new InvalidArgumentException(exception.Message, "started_at");
                }
            }
            _logger.LogTrace($"Querying from {startedAt} with {duration}");

            await foreach (var val in _valueService.GetNumberTimeSeriesBySensorAsync(sensor, startedAt, duration))
            {
                values.Add(val);
            }
            var res = new SensorDetailsApiModel(sensor, values);

            return(Ok(res));
        }
示例#3
0
        public async Task <ActionResult <SensorDetailsApiModel> > ShowLast(string deviceName, string sensorName, [FromQuery] int seconds = 120)
        {
            var device = await _service.GetDeviceByNameAsync(deviceName);

            var sensor = await _service.GetSensorByDeviceAndNameAsync(device, sensorName);

            var values = new List <(double, Instant)>();

            await foreach (var val in _valueService.GetLastSecondsOfValuesBySensorAsync(sensor, seconds))
            {
                values.Add(val);
            }
            var res = new SensorDetailsApiModel(sensor, values);

            return(Ok(res));
        }