Events
3 months ago
EngagementScore.php
6 months ago
JourneyStatisticsJob.php
5 months ago
Timeline.php
5 months ago
JourneyStatisticsJob.php
50 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Journey; |
| 4 | |
| 5 | use IAWPSCOPED\Carbon\CarbonImmutable; |
| 6 | use IAWP\Cron_Job; |
| 7 | use IAWP\Illuminate_Builder; |
| 8 | use IAWP\Tables; |
| 9 | /** @internal */ |
| 10 | class JourneyStatisticsJob extends Cron_Job |
| 11 | { |
| 12 | protected $name = 'iawp_journey_statistics'; |
| 13 | protected $interval = 'daily'; |
| 14 | protected $at_midnight = \true; |
| 15 | public function should_execute_handler() : bool |
| 16 | { |
| 17 | return \IAWPSCOPED\iawp_is_pro(); |
| 18 | } |
| 19 | public function handle() : void |
| 20 | { |
| 21 | $this->calculate_average_views_cutoff(); |
| 22 | $this->calculate_duration_cutoffs(); |
| 23 | } |
| 24 | private function calculate_average_views_cutoff() : void |
| 25 | { |
| 26 | $thiry_days_ago = CarbonImmutable::now('utc')->subDays(30); |
| 27 | $sessions = Illuminate_Builder::new()->from(Tables::sessions())->where('total_views', '>', 1)->where('created_at', '>', $thiry_days_ago)->count(); |
| 28 | if ($sessions < 25) { |
| 29 | return; |
| 30 | } |
| 31 | $sessions_in_seventy_fifth_percentile = \intval(\round($sessions * 0.75)); |
| 32 | $average_views_cutoff = Illuminate_Builder::new()->select('total_views')->from(Tables::sessions())->where('total_views', '>', 1)->where('created_at', '>', $thiry_days_ago)->orderBy('total_views', 'ASC')->limit(1)->offset($sessions_in_seventy_fifth_percentile)->value('total_views'); |
| 33 | \update_option('iawp_average_views_cutoff', $average_views_cutoff, \false); |
| 34 | } |
| 35 | private function calculate_duration_cutoffs() : void |
| 36 | { |
| 37 | $thiry_days_ago = CarbonImmutable::now('utc')->subDays(30); |
| 38 | $sessions = Illuminate_Builder::new()->from(Tables::sessions())->whereNotNull('ended_at')->where('created_at', '>', $thiry_days_ago)->count(); |
| 39 | if ($sessions < 25) { |
| 40 | return; |
| 41 | } |
| 42 | $sessions_in_thirty_third_percentile = \intval(\round($sessions * 0.33)); |
| 43 | $sessions_in_sixty_seventh_percentile = \intval(\round($sessions * 0.67)); |
| 44 | $low_duration_cutoff = Illuminate_Builder::new()->selectRaw('TIMESTAMPDIFF(SECOND, created_at, ended_at) AS duration')->from(Tables::sessions())->whereNotNull('ended_at')->where('created_at', '>', $thiry_days_ago)->orderBy('total_views', 'ASC')->limit(1)->offset($sessions_in_thirty_third_percentile)->value('total_views'); |
| 45 | $average_duration_cutoff = Illuminate_Builder::new()->selectRaw('TIMESTAMPDIFF(SECOND, created_at, ended_at) AS duration')->from(Tables::sessions())->whereNotNull('ended_at')->where('created_at', '>', $thiry_days_ago)->orderBy('duration', 'ASC')->limit(1)->offset($sessions_in_sixty_seventh_percentile)->value('duration'); |
| 46 | \update_option('iawp_low_duration_cutoff', $low_duration_cutoff, \false); |
| 47 | \update_option('iawp_average_duration_cutoff', $average_duration_cutoff, \false); |
| 48 | } |
| 49 | } |
| 50 |