Fix the Flux query issue when no groupby used

The flux query is invalid when no groupby is used:
invalid token for primary expression: COMMA

Story: 2011528
Task: 52812

Change-Id: I9f1999ccc7b8b06af3d582d7bde209d10c588dba
Signed-off-by: Shi Yan <yanshi.403@gmail.com>
This commit is contained in:
Shi Yan
2025-09-16 14:01:47 +10:00
committed by Matt Crees
parent c22aef560d
commit beeb526627
3 changed files with 55 additions and 3 deletions

View File

@@ -619,11 +619,12 @@ class InfluxClientV2(InfluxClient):
def get_custom_fields_query(self, custom_fields, query, field_filters,
group_filters, limit=None, groupby=None):
if not groupby:
groupby = []
columns_to_keep = '"_field", "_value", "_start", "_stop"'
else:
columns_to_keep = ', '.join(map(lambda g: f'"{g}"', groupby))
columns_to_keep += ', "_field", "_value", "_start", "_stop"'
if not custom_fields:
custom_fields = 'sum(price) AS price,sum(qty) AS qty'
columns_to_keep = ', '.join(map(lambda g: f'"{g}"', groupby))
columns_to_keep += ', "_field", "_value", "_start", "_stop"'
new_query = ''
LOG.debug("Custom fields: %s", custom_fields)
LOG.debug("Custom fields processed: %s",

View File

@@ -439,3 +439,49 @@ class TestInfluxClientV2(unittest.TestCase):
' ', '').replace('\n', '').replace('\t', '')
self.assertEqual(query, expected)
def test_query_build_no_groupby(self):
"""Test query building when groupby is empty."""
custom_fields = 'sum(price) AS price,sum(qty) AS qty'
groupby = [] # Empty groupby
filters = {
'filter1': '10',
'filter2': 'filter2_filter'
}
beg = self.period_begin.isoformat()
end = self.period_end.isoformat()
self.maxDiff = None
expected = ('\n'
' from(bucket:"cloudkitty")\n'
f' |> range(start: {beg}, stop: {end})\n'
' |> filter(fn: (r) => r["_measurement"] == '
'"dataframes")\n'
' |> filter(fn: (r) => r["_field"] == "price"'
' and r.filter1==10 and r.filter2=="filter2_filter" )\n'
' |> group()\n'
' |> sum()\n'
' |> keep(columns: ["_field", "_value", '
'"_start", "_stop"])\n'
' |> set(key: "_field", value: "price")\n'
' |> yield(name: "price")\n'
' \n'
' from(bucket:"cloudkitty")\n'
f' |> range(start: {beg}, stop: {end})\n'
' |> filter(fn: (r) => r["_measurement"] == '
'"dataframes")\n'
' |> filter(fn: (r) => r["_field"] == "qty"'
' and r.filter1==10 and r.filter2=="filter2_filter" )\n'
' |> group()\n'
' |> sum()\n'
' |> keep(columns: ["_field", "_value", '
'"_start", "_stop"])\n'
' |> set(key: "_field", value: "qty")\n'
' |> yield(name: "qty")\n'
' ')
query = self.client.get_query(begin=self.period_begin,
end=self.period_end,
custom_fields=custom_fields,
filters=filters,
groupby=groupby)
self.assertEqual(query, expected)

View File

@@ -0,0 +1,5 @@
---
fixes:
- |
Fix the Flux query syntax error when no groupby is used. See `story 2011528
<https://storyboard.openstack.org/#!/story/2011528>`_ for more details.