Commit 94121baa authored by Gezer's avatar Gezer
Browse files

Added small changes to fluxQueryBuilder, but still

needs to be finished
parent 1ac40ac4
Showing with 21 additions and 3 deletions
+21 -3
...@@ -15,14 +15,12 @@ client = InfluxDBHelper( ...@@ -15,14 +15,12 @@ client = InfluxDBHelper(
bucket=_bucket, bucket=_bucket,
) )
# 2) build a Flux query at runtime
builder = ( builder = (
FluxQueryBuilder() FluxQueryBuilder()
.bucket(_bucket) .bucket(_bucket)
.time_range("-30d", "now()") .time_range("-30d", "now()")
.filter_measurement("sensor_data") .filter_measurement("sensor_data")
.filter_fields("co2", "rh", "temp") .filter_fields("co2", "rh", "temp") # with "or" we should implement "and" too
.mean() .mean()
) )
......
...@@ -24,6 +24,7 @@ class FluxQueryBuilder: ...@@ -24,6 +24,7 @@ class FluxQueryBuilder:
self._measurement: Optional[str] = None self._measurement: Optional[str] = None
self._fields: List[str] = [] self._fields: List[str] = []
self._mean : Optional[bool] = None self._mean : Optional[bool] = None
self._dict : Optional[dict] = None
def bucket(self, name: str) -> "FluxQueryBuilder": def bucket(self, name: str) -> "FluxQueryBuilder":
""" """
...@@ -57,7 +58,20 @@ class FluxQueryBuilder: ...@@ -57,7 +58,20 @@ class FluxQueryBuilder:
self._measurement = measurement self._measurement = measurement
return self 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": def filter_fields(self, *fields: str) -> "FluxQueryBuilder":
""" """
...@@ -106,6 +120,12 @@ class FluxQueryBuilder: ...@@ -106,6 +120,12 @@ class FluxQueryBuilder:
f'|> filter(fn: (r) => r["_measurement"] == "{self._measurement}")' 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 # Add field filters if any
if self._fields: if self._fields:
# create OR expression for fields # create OR expression for fields
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment