From a1e3bc76e7df5c19701f3b71c27ff9ed3901ba09 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 7 Oct 2026 08:35:33 +0200 Subject: [PATCH] refactor(Engine\V1): simplify fallback system --- src/Engine/V1/AbstractPermanent.php | 20 +++++++------------- src/Engine/V1/AbstractSwitchable.php | 16 ++++++---------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/Engine/V1/AbstractPermanent.php b/src/Engine/V1/AbstractPermanent.php index dfbb29a7..26125b95 100644 --- a/src/Engine/V1/AbstractPermanent.php +++ b/src/Engine/V1/AbstractPermanent.php @@ -75,8 +75,7 @@ public function getCarbonEmissionPerDay(DateTimeInterface $day, Source_Zone $sou $start_time->setTime(0, 0, 0, 0); $length = new DateInterval('PT' . 86400 . 'S'); // 24h = 86400 seconds $source = Source::getById($source_zone->fields['plugin_carbon_sources_id']); - $fallback_source_zone = null; - $iterator = null; + $expected_count = 24; // Try to read real time carbon intensities if ($source->fields['fallback_level'] === 0) { @@ -84,25 +83,20 @@ public function getCarbonEmissionPerDay(DateTimeInterface $day, Source_Zone $sou if ($iterator->count() === 0) { // Need to fallback to an alternate source $fallback_source_zone = new Source_Zone(); - if (!$fallback_source_zone->getFallbackFromDB($source_zone)) { - $fallback_source_zone = null; + if ($fallback_source_zone->getFallbackFromDB($source_zone)) { + $row = array_fill(0, $expected_count, $this->getFallbackCarbonIntensity($start_time, $fallback_source_zone)); + $iterator = new ArrayObject($row); + $iterator = $iterator->getIterator(); } } } else { // The source is already a fallback (exapmple: Quebec does has any realtime source) - $fallback_source_zone = $source_zone; - } - - $expected_count = 24; - - // Try a fallback source - if ($fallback_source_zone !== null) { - $row = array_fill(0, $expected_count, $this->getFallbackCarbonIntensity($start_time, $fallback_source_zone)); + $row = array_fill(0, $expected_count, $this->getFallbackCarbonIntensity($start_time, $source_zone)); $iterator = new ArrayObject($row); $iterator = $iterator->getIterator(); } - $count = $iterator ? $iterator->count() : 0; + $count = $iterator->count(); if ($count != $expected_count) { trigger_error(sprintf( 'required count of carbon intensity %d samples not met. Got %d samples for date %s', diff --git a/src/Engine/V1/AbstractSwitchable.php b/src/Engine/V1/AbstractSwitchable.php index 8d13ea9f..12f4f43d 100644 --- a/src/Engine/V1/AbstractSwitchable.php +++ b/src/Engine/V1/AbstractSwitchable.php @@ -150,24 +150,20 @@ protected function computeEmissionPerDay(DateTimeImmutable $start_time, TrackedI if ($iterator->count() < $expected_count) { // Need to fallback to an alternate source $fallback_source_zone = new Source_Zone(); - if (!$fallback_source_zone->getFallbackFromDB($source_zone)) { - $fallback_source_zone = null; + if ($fallback_source_zone->getFallbackFromDB($source_zone)) { + $row = array_fill(0, $expected_count, $this->getFallbackCarbonIntensity($start_time, $fallback_source_zone)); + $iterator = new ArrayObject($row); + $iterator = $iterator->getIterator(); } } } else { // The source is already a fallback (exapmple: Quebec does has any realtime source) - $fallback_source_zone = $source_zone; - } - - - // Try a fallback source - if ($fallback_source_zone !== null) { - $row = array_fill(0, $expected_count, $this->getFallbackCarbonIntensity($start_time, $fallback_source_zone)); + $row = array_fill(0, $expected_count, $this->getFallbackCarbonIntensity($start_time, $source_zone)); $iterator = new ArrayObject($row); $iterator = $iterator->getIterator(); } - $count = $iterator ? $iterator->count() : 0; + $count = $iterator->count(); if ($count != $expected_count) { trigger_error(sprintf( "required count of carbon intensity %d samples not met. Got %d samples for date %s",