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:
@@ -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",
|
||||
|
||||
@@ -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)
|
||||
|
||||
5
releasenotes/notes/fix-flux-query-59b7b9f485ba1dde.yaml
Normal file
5
releasenotes/notes/fix-flux-query-59b7b9f485ba1dde.yaml
Normal 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.
|
||||
Reference in New Issue
Block a user