in desktop/src/app/services/azure-cost-management/azure-cost-management.service.ts [78:129]
private _processQueryResponse(accountId: string, response: QueryResult): BatchAccountCost {
const columnIndexes = {
cost: null,
date: null,
resourceId: null,
currency: null,
};
for (const [index, column] of response.properties.columns.entries()) {
switch (column.name) {
case "PreTaxCost":
columnIndexes.cost = index;
break;
case "UsageDate":
columnIndexes.date = index;
break;
case CostManagementDimensions.ResourceId:
columnIndexes.resourceId = index;
break;
case "Currency":
columnIndexes.currency = index;
break;
}
}
// Check we found all the columns
for (const [key, index] of Object.entries(columnIndexes)) {
if (index === null) {
log.error(`Failed to retrieve column index for ${key}`, response.properties.columns);
return {
totalForPeriod: 0,
currency: "n/a",
pools: {},
};
}
}
const rows = response.properties.rows.filter((row) => {
// Filter empty meters
return row[columnIndexes.resourceId]
|| row[columnIndexes.cost] !== 0;
}).map((row) => {
return {
preTaxCost: row[columnIndexes.cost],
date: row[columnIndexes.date],
currency: row[columnIndexes.currency],
resourceId: row[columnIndexes.resourceId],
};
}).filter(entry => entry.resourceId.toLowerCase().startsWith(accountId.toLowerCase()));
return this._buildResponseFromRows(rows);
}