diff --git a/modules/mining-checker/src/Domain/AnalyticsService.php b/modules/mining-checker/src/Domain/AnalyticsService.php index 571c673..8157f19 100644 --- a/modules/mining-checker/src/Domain/AnalyticsService.php +++ b/modules/mining-checker/src/Domain/AnalyticsService.php @@ -33,9 +33,11 @@ final class AnalyticsService $previous = null; $previousMeasuredTs = null; $previousIntervalRate = null; + $previousVisibleCoins = null; + $previousCoinCurrency = null; + $previousCumulativePayouts = null; $result = []; $payoutIndex = 0; - $lastPayoutTs = null; $payoutsByAsset = []; $latestPriceByCurrency = []; @@ -52,7 +54,6 @@ final class AnalyticsService $payoutAsset = strtoupper(trim((string) ($payouts[$payoutIndex]['payout_currency'] ?? $coinCurrency))); $payoutsByAsset[$payoutAsset] = ($payoutsByAsset[$payoutAsset] ?? 0.0) + (float) ($payouts[$payoutIndex]['coins_amount'] ?? 0); - $lastPayoutTs = $payoutTs; $payoutIndex++; } @@ -74,11 +75,12 @@ final class AnalyticsService if (is_array($previous) && $previousMeasuredTs !== null) { $intervalStartTs = $previousMeasuredTs; - $intervalStartCoins = (float) ($previous['coins_total'] ?? 0.0); - - if ($lastPayoutTs !== null && $lastPayoutTs > $previousMeasuredTs && $lastPayoutTs <= $measuredTs) { - $intervalStartTs = $lastPayoutTs; - $intervalStartCoins = 0.0; + $intervalStartCoins = (float) ($previousVisibleCoins ?? ($previous['coins_total'] ?? 0.0)); + if ($previousCoinCurrency !== null && $previousCoinCurrency === $coinCurrency) { + $intervalPayouts = max(0.0, $cumulativePayouts - (float) ($previousCumulativePayouts ?? 0.0)); + $intervalStartCoins = max(0.0, $intervalStartCoins - $intervalPayouts); + } elseif ($previousCoinCurrency !== null && $previousCoinCurrency !== $coinCurrency) { + $intervalStartCoins = $visibleCoinsTotal; } $intervalHours = max(0.0, ($measuredTs - $intervalStartTs) / 3600); @@ -202,6 +204,9 @@ final class AnalyticsService } $previous = $row; $previousMeasuredTs = $measuredTs > 0 ? $measuredTs : null; + $previousVisibleCoins = $visibleCoinsTotal; + $previousCoinCurrency = $coinCurrency; + $previousCumulativePayouts = $cumulativePayouts; } return $result;