Avoid fetching all stats metadata when there are no entities

Fetch all the data at once since it is not dependant
This commit is contained in:
J. Nick Koston 2023-02-24 15:56:31 -06:00
parent 01ec9aaf96
commit 225a3c3f50
No known key found for this signature in database

View File

@ -405,9 +405,8 @@ const getEnergyData = async (
volume: lengthUnit === "km" ? "L" : "gal", volume: lengthUnit === "km" ? "L" : "gal",
}; };
const stats = { const _energyStats = energyStatIds.length
...(energyStatIds.length ? fetchStatistics(
? await fetchStatistics(
hass!, hass!,
startMinHour, startMinHour,
end, end,
@ -416,8 +415,8 @@ const getEnergyData = async (
energyUnits, energyUnits,
["sum"] ["sum"]
) )
: {}), : Promise.resolve({});
...(waterStatIds.length const _waterStats = waterStatIds.length
? await fetchStatistics( ? await fetchStatistics(
hass!, hass!,
startMinHour, startMinHour,
@ -427,12 +426,13 @@ const getEnergyData = async (
waterUnits, waterUnits,
["sum"] ["sum"]
) )
: {}), : Promise.resolve({});
};
let statsCompare;
let startCompare; let startCompare;
let endCompare; let endCompare;
let _energyStatsCompare = Promise.resolve({});
let _waterStatsCompare = Promise.resolve({});
if (compare) { if (compare) {
if (dayDifference > 27 && dayDifference < 32) { if (dayDifference > 27 && dayDifference < 32) {
// When comparing a month, we want to start at the begining of the month // When comparing a month, we want to start at the begining of the month
@ -443,10 +443,8 @@ const getEnergyData = async (
const compareStartMinHour = addHours(startCompare, -1); const compareStartMinHour = addHours(startCompare, -1);
endCompare = addMilliseconds(start, -1); endCompare = addMilliseconds(start, -1);
if (energyStatIds.length) {
statsCompare = { _energyStatsCompare = fetchStatistics(
...(energyStatIds.length
? await fetchStatistics(
hass!, hass!,
compareStartMinHour, compareStartMinHour,
endCompare, endCompare,
@ -454,10 +452,10 @@ const getEnergyData = async (
period, period,
energyUnits, energyUnits,
["sum"] ["sum"]
) );
: {}), }
...(waterStatIds.length if (waterStatIds.length) {
? await fetchStatistics( _waterStatsCompare = fetchStatistics(
hass!, hass!,
compareStartMinHour, compareStartMinHour,
endCompare, endCompare,
@ -465,16 +463,18 @@ const getEnergyData = async (
period, period,
waterUnits, waterUnits,
["sum"] ["sum"]
) );
: {}), }
};
} }
let fossilEnergyConsumption: FossilEnergyConsumption | undefined; let _fossilEnergyConsumption:
let fossilEnergyConsumptionCompare: FossilEnergyConsumption | undefined; | Promise<undefined>
| Promise<FossilEnergyConsumption> = Promise.resolve(undefined);
let _fossilEnergyConsumptionCompare:
| Promise<undefined>
| Promise<FossilEnergyConsumption> = Promise.resolve(undefined);
if (co2SignalEntity !== undefined) { if (co2SignalEntity !== undefined) {
fossilEnergyConsumption = await getFossilEnergyConsumption( _fossilEnergyConsumption = getFossilEnergyConsumption(
hass!, hass!,
start, start,
consumptionStatIDs, consumptionStatIDs,
@ -483,7 +483,7 @@ const getEnergyData = async (
dayDifference > 35 ? "month" : dayDifference > 2 ? "day" : "hour" dayDifference > 35 ? "month" : dayDifference > 2 ? "day" : "hour"
); );
if (compare) { if (compare) {
fossilEnergyConsumptionCompare = await getFossilEnergyConsumption( _fossilEnergyConsumptionCompare = getFossilEnergyConsumption(
hass!, hass!,
startCompare, startCompare,
consumptionStatIDs, consumptionStatIDs,
@ -494,6 +494,35 @@ const getEnergyData = async (
} }
} }
const statsMetadata: Record<string, StatisticsMetaData> = {};
const _getStatisticMetadata: Promise<StatisticsMetaData[]> = allStatIDs.length
? getStatisticMetadata(hass, allStatIDs)
: Promise.resolve([]);
const [
energyStats,
waterStats,
energyStatsCompare,
waterStatsCompare,
statsMetadataArray,
fossilEnergyConsumption,
fossilEnergyConsumptionCompare,
] = await Promise.all([
_energyStats,
_waterStats,
_energyStatsCompare,
_waterStatsCompare,
_getStatisticMetadata,
_fossilEnergyConsumption,
_fossilEnergyConsumptionCompare,
]);
const stats = { ...energyStats, ...waterStats };
const statsCompare = { ...energyStatsCompare, ...waterStatsCompare };
if (allStatIDs.length) {
statsMetadataArray.forEach((x) => {
statsMetadata[x.statistic_id] = x;
});
}
Object.values(stats).forEach((stat) => { Object.values(stats).forEach((stat) => {
// if the start of the first value is after the requested period, we have the first data point, and should add a zero point // if the start of the first value is after the requested period, we have the first data point, and should add a zero point
if (stat.length && new Date(stat[0].start) > startMinHour) { if (stat.length && new Date(stat[0].start) > startMinHour) {
@ -507,12 +536,6 @@ const getEnergyData = async (
} }
}); });
const statsMetadataArray = await getStatisticMetadata(hass, allStatIDs);
const statsMetadata: Record<string, StatisticsMetaData> = {};
statsMetadataArray.forEach((x) => {
statsMetadata[x.statistic_id] = x;
});
const data: EnergyData = { const data: EnergyData = {
start, start,
end, end,