Metric chart with aggFn increase and a multi-column group-by fails: toString() gets several arguments
Los mantenedores suelen responder en 2 días
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- clickhouse, typescript
- Área
- backend, observability
Línea de trabajo
Empieza en packages/common-utils/src/core/renderChartConfig.ts, especialmente en la ruta de filtrado de agrupación por increase descrita en el issue, y compárala con el tratamiento de la CTE de límite de series para las columnas group-by separadas por comas. Revisa las pruebas cercanas de increase con métricas agrupadas y añade cobertura para dos columnas proporcionadas como una cadena separada por comas. Se considera terminado cuando la consulta acepta la agrupación por varias columnas y devuelve una serie por cada par de columnas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happened?
A metric chart on a Sum metric with aggFn: increase and a group-by of two or more columns, given as a comma-separated string, fails with:
An incorrect number of arguments was specified for function 'toString'. Expected 1 argument, got 2 arguments: In scope SELECT tuple(Attributes['destination_service_name'], Attributes['response_code']) AS group, sum(Rate) AS bucket_value FROM Bucketed WHERE (Attributes['destination_service_name'], ((Attributes['response_code']) IS NOT NULL) AND (toString(Attributes['destination_service_name'], Attributes['response_code']) != '')) GROUP BY group, __hdx_time_bucket2.
Expected: one series per (destination_service_name, response_code) pair, the same as with a single group-by column.
What we checked on the same metric and time range:
increasewith one group-by column works.sumwith the same two-column group-by works.increasewith two columns fails both with Map expressions (Attributes['a'], Attributes['b']) and with plain MATERIALIZED columns (`col_a`, `col_b`).
As far as we can tell, the cause is in the top-N ranking added for increase + group-by (packages/common-utils/src/core/renderChartConfig.ts at 7752c88):
renderSelectListreturns a string group-by as a singleChSql(if (typeof selectList === 'string') return chSql\${{ UNSAFE_RAW_SQL: selectList }}``): https://github.com/hyperdxio/hyperdx/blob/7752c880e0f2d96be8926af71beebdf0b1e7d4b6/packages/common-utils/src/core/renderChartConfig.ts#L733-L741- The
increasepath then treats that single fragment as one column.groupByEmptyFilterwraps the wholea, bin(… IS NOT NULL AND toString(…) != ''): https://github.com/hyperdxio/hyperdx/blob/7752c880e0f2d96be8926af71beebdf0b1e7d4b6/packages/common-utils/src/core/renderChartConfig.ts#L2341-L2362 - The series-limit CTE handles the same case by splitting a string group-by with
splitAndTrimWithBracketfirst: https://github.com/hyperdxio/hyperdx/blob/7752c880e0f2d96be8926af71beebdf0b1e7d4b6/packages/common-utils/src/core/renderChartConfig.ts#L1605-L1614
Splitting the string group-by the same way before building groupByEmptyFilter should fix it. The tuple(${groupBySql}) parts already work with the comma-separated form.
Steps to reproduce
Reproduces on play.hyperdx.io? Didn't try. We hit it through the MCP tools on our own deployment.
- Use a Metric source whose sum table has a counter with two attributes, for example Istio's
istio_requests_total(destination_service_name,response_code). - Call the MCP tool
clickstack_tablewith:select: [{"aggFn": "increase", "metricType": "sum", "metricName": "istio_requests_total"}]groupBy: "Attributes['destination_service_name'], Attributes['response_code']"
- It fails with the error above.
- Change
aggFntosum, or drop the second group-by column. It works.
We haven't checked the UI chart editor. It renders through the same renderChartConfig, so we expect a two-column group-by on an increase chart to fail the same way there.
How are you running HyperDX?
Helm (ClickStack chart 2.1.0) with the hyperdx:2-nightly image, which is 2.42.0 plus the Node bump from #3456. Our own ClickHouse 26.2.5.45.
Where does it show up?
The API: the MCP tool clickstack_table.
Debug info
N/A. We saw this through the API's MCP tools, not the UI.
Logs
The error is quoted above.
Written with help from an AI assistant (Claude Code). The behaviour and the error come from our own deployment.
- Lenguaje dominante
- TypeScript
- Estrellas
- 10k
- Forks
- 501
- Merge medio
- 2 d 7 h
- PR fusionados (30 d)
- 153
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de hyperdxio/hyperdx
-
external
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
Slack notifications for inline alerts fail when the chart-explorer link passes Slack's 3000-character block limitPosiblemente ocupada @Tyagiquamar la tomó hace 5 días. Abiertoalerting bug external
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 2 días
-
bug external Needs Feedback
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
hyperdxio/hyperdx#3308 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
systeminformation resolution still allows 5.30.7 -- command injection in networkInterfaces()Abiertoexternal
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 2 días
Todos los issues de hyperdxio/hyperdx
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
area:desktop area:ui bug platform:macos
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
anthropics/claude-code#106183 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
reproduced
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/opencode#60558 · 1 comentario ·
Los mantenedores suelen responder en 1 día