private _processQueryResponse()

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);
    }