From 4b0d7cbda1ece16dfd0deba9eb66dd293b2d0413 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 14 Oct 2020 20:09:51 +0200 Subject: [PATCH] Fixed #11 - route to retrieve min/max values for given sensor ids --- docs/api.yml | 33 +++++++++++++++++++++++++++++++-- src/blueprints/Measurements.py | 26 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/docs/api.yml b/docs/api.yml index 8d0b35e..a54fc6c 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -10,6 +10,8 @@ info: paths: /version: get: + tags: + - general summary: Gets information about the server version operationId: version responses: @@ -209,7 +211,7 @@ paths: type: integer - in: path name: limit - description: Maximum number of results. + description: Maximum number of results. Set to "0" to disable limit. required: true schema: type: integer @@ -282,7 +284,7 @@ paths: parameters: - in: path name: limit - description: Maximum number of results. + description: Maximum number of results. Set to "0" to disable limit. required: true schema: type: integer @@ -296,6 +298,33 @@ paths: items: $ref: '#/components/schemas/Measurement' + /measurements/minMax: + get: + tags: + - measurement + summary: Gets the minimum and maximum values for the given sensor ids. + operationId: measurementsMinMax + parameters: + - in: query + name: sensorIds + description: The sensor ids to calculate the min and max value for. + required: true + style: form + explode: false + schema: + type: array + items: + type: integer + responses: + '200': + description: All available measurements + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Measurement' + /measurements: post: tags: diff --git a/src/blueprints/Measurements.py b/src/blueprints/Measurements.py index 1d76e0a..3dd7ee9 100644 --- a/src/blueprints/Measurements.py +++ b/src/blueprints/Measurements.py @@ -17,6 +17,32 @@ def construct_blueprint(settings: Dict, backupService: BackupService): database = Database(settings['database']['databasePath'], backupService) return jsonify(database.measurementAccess.get_all_measurements(limit)) + @measurements.route('/measurements/minMax', methods=['GET']) + def get_min_and_max_for_sensor_ids(): + if 'sensorIds' not in request.args: + return jsonify({'message': 'Parameter "sensorIds" missing'}), 400 + + sensorIds = request.args.get('sensorIds').split(',') + database = Database(settings['database']['databasePath'], backupService) + + values = [] + for sensorId in sensorIds: + sensorId = int(sensorId) + latestValue = database.measurementAccess.get_latest_measurements_for_sensor(sensorId) + if latestValue: + values.append(float(latestValue['value'])) + + if values: + return jsonify({ + 'min': min(values), + 'max': max(values) + }) + + return jsonify({ + 'min': None, + 'max': None + }) + @measurements.route('/measurement/<int:measurementID>', methods=['GET']) def get_measurement(measurementID): database = Database(settings['database']['databasePath'], backupService) -- GitLab