move into sonardesk
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Analytics\Services;
|
||||
|
||||
use Modules\Analytics\Models\AnalyticsEvent;
|
||||
use Modules\Analytics\Models\DailyMetric;
|
||||
|
||||
final class AnalyticsAggregator
|
||||
{
|
||||
public function aggregate(?string $date = null): int
|
||||
{
|
||||
$date = $date ?: now()->subHour()->toDateString();
|
||||
$written = 0;
|
||||
$base = AnalyticsEvent::query()->whereDate('occurred_at', $date);
|
||||
foreach ($base->clone()->select('site_id')->distinct()->pluck('site_id') as $siteId) {
|
||||
$query = $base->clone()->where('site_id', $siteId);
|
||||
$metrics = [
|
||||
['page_views', 'all', $query->clone()->where('event_type', 'page_view')->count()],
|
||||
['visitors', 'all', $query->clone()->whereNotNull('visitor_hash')->distinct('visitor_hash')->count('visitor_hash')],
|
||||
['sessions', 'all', $query->clone()->whereNotNull('session_hash')->distinct('session_hash')->count('session_hash')],
|
||||
['conversions', 'all', $query->clone()->where('event_type', 'conversion')->count()],
|
||||
['searches', 'all', $query->clone()->where('event_type', 'search')->count()],
|
||||
];
|
||||
foreach ($metrics as [$metric,$dimension,$value]) {
|
||||
DailyMetric::updateOrCreate(['site_id' => $siteId, 'metric_date' => $date, 'metric' => $metric, 'dimension' => $dimension], ['value' => $value]);
|
||||
$written++;
|
||||
}
|
||||
}
|
||||
|
||||
return $written;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user