fix: table row data doesn't align with the response (#5248)

* fix: wrong values getting associated with the table rows

* fix: table columns rendering

* fix: remove console logs
This commit is contained in:
Vikrant Gupta 2024-06-18 12:25:10 +05:30 committed by GitHub
parent 3b4b9e43b3
commit 0fade428ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -365,6 +365,7 @@ const fillRestAggregationData = (
queryTableData: QueryDataV3[], queryTableData: QueryDataV3[],
seria: SeriesItem, seria: SeriesItem,
equalQueriesByLabels: string[], equalQueriesByLabels: string[],
isEqualQuery: boolean,
): void => { ): void => {
const nextQueryData = const nextQueryData =
queryTableData.find((q) => q.queryName === column.field) || null; queryTableData.find((q) => q.queryName === column.field) || null;
@ -374,13 +375,13 @@ const fillRestAggregationData = (
nextQueryData, nextQueryData,
); );
const isEqual = isEqualQueriesByLabel(equalQueriesByLabels, column.field);
if (targetSeria) { if (targetSeria) {
const isEqual = isEqualQueriesByLabel(equalQueriesByLabels, column.field);
if (!isEqual) { if (!isEqual) {
// This line is crucial. It ensures that no additional rows are added to the table for similar labels across all formulas here is how this check is applied: signoz/frontend/src/lib/query/createTableColumnsFromQuery.ts line number 370 // This line is crucial. It ensures that no additional rows are added to the table for similar labels across all formulas here is how this check is applied: signoz/frontend/src/lib/query/createTableColumnsFromQuery.ts line number 370
equalQueriesByLabels.push(column.field); equalQueriesByLabels.push(column.field);
} }
} else { } else if (!isEqualQuery) {
column.data.push('N/A'); column.data.push('N/A');
} }
}; };
@ -435,6 +436,7 @@ const fillDataFromSeries = (
queryTableData, queryTableData,
seria, seria,
equalQueriesByLabels, equalQueriesByLabels,
isEqualQuery,
); );
return; return;
@ -570,6 +572,29 @@ export const createTableColumnsFromQuery: CreateTableDataFromQuery = ({
a.queryName < b.queryName ? -1 : 1, a.queryName < b.queryName ? -1 : 1,
); );
// the reason we need this is because the filling of values in rows doesn't account for mismatch enteries
// in the response. Example : Series A -> [label1, label2] and Series B -> [label2,label1] this isn't accounted for
sortedQueryTableData.forEach((q) => {
q.series?.forEach((s) => {
s.labelsArray?.sort((a, b) =>
Object.keys(a)[0] < Object.keys(b)[0] ? -1 : 1,
);
});
q.series?.sort((a, b) => {
let labelA = '';
let labelB = '';
a.labelsArray.forEach((lab) => {
labelA += Object.values(lab)[0];
});
b.labelsArray.forEach((lab) => {
labelB += Object.values(lab)[0];
});
return labelA < labelB ? -1 : 1;
});
});
const dynamicColumns = getDynamicColumns(sortedQueryTableData, query); const dynamicColumns = getDynamicColumns(sortedQueryTableData, query);
const { filledDynamicColumns, rowsLength } = fillColumnsData( const { filledDynamicColumns, rowsLength } = fillColumnsData(