Serve dashboard stats from daily_stats and default visit list to today.
Stop live-scanning page_visits on every dashboard load (including today) so the admin home stays fast; keep the live path only for channel filters and cache the result for 45s. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -12,6 +12,7 @@ use App\Models\WalletAddress;
|
||||
use App\Models\WalletMnemonic;
|
||||
use App\Support\AgentScope;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class DailyReportService
|
||||
@@ -122,12 +123,14 @@ class DailyReportService
|
||||
$end = $to->copy()->startOfDay();
|
||||
while ($cursor->lte($end)) {
|
||||
if ($force || $cursor->gte($refreshFrom) || ! $this->dayIsFresh($cursor, $agentUserId)) {
|
||||
[$uv, $effectiveUv, $devices, $walletDevices, $addressCount, $mnemonicCount] = $this->totalsForDay($cursor, $agentUserId);
|
||||
[$uv, $effectiveUv, $devices, $walletDevices, $addressCount, $mnemonicCount, $pv, $effectivePv] = $this->totalsForDay($cursor, $agentUserId);
|
||||
$row = $this->present($cursor->toDateString(), $uv, $effectiveUv, $devices, $walletDevices, $addressCount, $mnemonicCount);
|
||||
DailyStat::query()->updateOrCreate(
|
||||
['stat_date' => $row['date'], 'scope_key' => $scope],
|
||||
[
|
||||
'pv' => $pv,
|
||||
'uv' => $row['uv'],
|
||||
'effective_pv' => $effectivePv,
|
||||
'effective_uv' => $row['effective_uv'],
|
||||
'devices' => $row['devices'],
|
||||
'wallet_devices' => $row['wallet_devices'],
|
||||
@@ -233,6 +236,7 @@ class DailyReportService
|
||||
->where('stat_date', $date)
|
||||
->whereNotNull('computed_at')
|
||||
->whereNotNull('address_count')
|
||||
->whereNotNull('pv')
|
||||
->exists();
|
||||
if (! $statOk) {
|
||||
return false;
|
||||
@@ -272,7 +276,7 @@ class DailyReportService
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int}
|
||||
* @return array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int}
|
||||
*/
|
||||
private function totalsForDay(Carbon $day, ?int $agentUserId): array
|
||||
{
|
||||
@@ -285,7 +289,9 @@ class DailyReportService
|
||||
$visit = $visits
|
||||
->whereBetween('created_at', [$from, $to])
|
||||
->selectRaw(
|
||||
"COUNT(DISTINCT client_uid) as uv,
|
||||
"COUNT(*) as pv,
|
||||
COUNT(DISTINCT client_uid) as uv,
|
||||
COALESCE(SUM(CASE WHEN ({$effectiveSql}) THEN 1 ELSE 0 END), 0) as effective_pv,
|
||||
COUNT(DISTINCT CASE WHEN ({$effectiveSql}) THEN client_uid END) as effective_uv"
|
||||
)
|
||||
->first();
|
||||
@@ -307,11 +313,13 @@ class DailyReportService
|
||||
(int) ($device?->wallet_devices ?? 0),
|
||||
$this->countDeviceChildrenForDay(WalletAddress::query(), 'wallet_addresses', $from, $to, $agentUserId),
|
||||
$this->countDeviceChildrenForDay(WalletMnemonic::query(), 'wallet_mnemonics', $from, $to, $agentUserId),
|
||||
(int) ($visit?->pv ?? 0),
|
||||
(int) ($visit?->effective_pv ?? 0),
|
||||
];
|
||||
}
|
||||
|
||||
private function countDeviceChildrenForDay(
|
||||
\Illuminate\Database\Eloquent\Builder $query,
|
||||
Builder $query,
|
||||
string $table,
|
||||
Carbon $from,
|
||||
Carbon $to,
|
||||
|
||||
Reference in New Issue
Block a user