From 94121baafefe53469de8b8955fac48b1fb0dc244 Mon Sep 17 00:00:00 2001 From: Emre Gezer <21geem1bif@hft-stuttgart.de> Date: Wed, 30 Apr 2025 10:51:02 +0200 Subject: [PATCH] Added small changes to fluxQueryBuilder, but still needs to be finished --- backend/app/influxdb_service.py | 4 +--- backend/utils/fluxQueryBuilder.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/backend/app/influxdb_service.py b/backend/app/influxdb_service.py index a34ec54..36e04e6 100644 --- a/backend/app/influxdb_service.py +++ b/backend/app/influxdb_service.py @@ -15,14 +15,12 @@ client = InfluxDBHelper( bucket=_bucket, ) - -# 2) build a Flux query at runtime builder = ( FluxQueryBuilder() .bucket(_bucket) .time_range("-30d", "now()") .filter_measurement("sensor_data") - .filter_fields("co2", "rh", "temp") + .filter_fields("co2", "rh", "temp") # with "or" we should implement "and" too .mean() ) diff --git a/backend/utils/fluxQueryBuilder.py b/backend/utils/fluxQueryBuilder.py index 40258a6..bd83d95 100644 --- a/backend/utils/fluxQueryBuilder.py +++ b/backend/utils/fluxQueryBuilder.py @@ -24,6 +24,7 @@ class FluxQueryBuilder: self._measurement: Optional[str] = None self._fields: List[str] = [] self._mean : Optional[bool] = None + self._dict : Optional[dict] = None def bucket(self, name: str) -> "FluxQueryBuilder": """ @@ -57,7 +58,20 @@ class FluxQueryBuilder: self._measurement = measurement return self + def filter_field(self, field: str, value:str) -> "FluxQueryBuilder": + """ + Add filters for one or more _field tags (OR-combined). + :param + Example: field = "room", value = "1/210" + + Result: |> filter(fn: (r) => r["room"] == "1/210") + + :return: self (for method chaining) + """ + # extend the list of fields to filter + self._dict[field] = value + return self def filter_fields(self, *fields: str) -> "FluxQueryBuilder": """ @@ -106,6 +120,12 @@ class FluxQueryBuilder: f'|> filter(fn: (r) => r["_measurement"] == "{self._measurement}")' ) + # Add specified filter if any + #if self._dict: + #for key, value in self._dict.items(): + #lines.append(f'|> filter(fn: (r) => r["_field"] == "{f}")') + #lines.append(f'r["_field"] == "{f}"') + # Add field filters if any if self._fields: # create OR expression for fields -- GitLab