/** * Get the average wait of a set of queue items * * @param int $start_time Lower limit on submission time * @param int $end_time Upper limit on submission time * @param bool $from_current_time Determine the wait using the current time * @param mixed $included_statuses Optional array|string of queue statuses to include. * @param mixed $excluded_statuses Optional array|string of queue statuses to exclude. * @param int $cache_ttl Total time to cache the result. * * @return string Returns the wait as a translated string. Eg: 1 Hour; 20 Days; 10 minutes */ public function get_average_wait($start_time, $end_time = 0, $wait_from_current_time = false, $included_statuses = false, $excluded_statuses = false, $cache_ttl = 0) { $sql = 'SELECT COUNT(*) AS total_items, SUM(queue_submit_time) AS sum_submit_time, SUM(queue_close_time) AS sum_close_time FROM ' . TITANIA_QUEUE_TABLE . ' WHERE queue_type = ' . $this->queue_type . ' AND queue_submit_time > ' . (int) $start_time . (!empty($end_time) ? ' AND queue_submit_time < ' . (int) $end_time : '') . (!empty($included_statuses) ? ' AND ' . $this->db->sql_in_set('queue_status', $included_statuses) : '') . (!empty($excluded_statuses) ? ' AND ' . $this->db->sql_in_set('queue_status', $excluded_statuses, true) : ''); $result = $this->db->sql_query($sql, $cache_ttl); $data = $this->db->sql_fetchrow($result); if ($data['total_items']) { if ($wait_from_current_time) { $average_wait = time() - $data['sum_submit_time'] / $data['total_items']; } else { $average_wait = ($data['sum_close_time'] - $data['sum_submit_time']) / $data['total_items']; } return date::format_time_delta($this->user, $average_wait); } return '0'; }
/** * Generate queue stats * * @return bool Returns true if there have been any revisions validated. False otherwise. */ protected function generate_stats() { $total_revs_denied = $this->stats->get_queue_item_count(TITANIA_QUEUE_DENIED); $total_revs_approved = $this->stats->get_queue_item_count(TITANIA_QUEUE_APPROVED); $total_revs_validated = $total_revs_denied + $total_revs_approved; if (!$total_revs_validated) { return false; } $current_time = time(); $year_ago = new \DateTime('midnight tomorrow', $this->user->timezone); $year_ago->modify('-1 year')->setTimezone(new \DateTimezone('UTC')); $validated_cache_ttl = round($total_revs_validated / 1000) * 86400; $validated_statuses = array(TITANIA_QUEUE_DENIED, TITANIA_QUEUE_APPROVED); $closed_statuses = array(TITANIA_QUEUE_CLOSED, TITANIA_QUEUE_DENIED, TITANIA_QUEUE_APPROVED, TITANIA_QUEUE_HIDE); $oldest_unvalidated_rev = $this->stats->get_oldest_revision_time(false, $closed_statuses); $oldest_validated_rev = $this->stats->get_oldest_revision_time($validated_statuses); $unvalidated_avg_wait = $this->stats->get_average_wait(0, 0, true, false, $closed_statuses); $validated_avg_wait = $this->stats->get_average_wait($year_ago->getTimestamp(), 0, false, $validated_statuses, false, $validated_cache_ttl); $revisions_in_queue = $this->stats->get_queue_item_count(false, $closed_statuses); $this->template->assign_vars(array('DENIED_RATIO' => round($total_revs_denied / $total_revs_validated * 100), 'APPROVED_RATIO' => round($total_revs_approved / $total_revs_validated * 100), 'AVG_PAST_VALIDATION_TIME' => $this->user->lang('AVG_PAST_VALIDATION_TIME', $validated_avg_wait), 'AVG_CURRENT_QUEUE_WAIT' => $this->user->lang('AVG_CURRENT_QUEUE_WAIT', $unvalidated_avg_wait), 'OLDEST_UNVALIDATED_REV' => $this->user->lang('OLDEST_UNVALIDATED_REV', date::format_time_delta($this->user, $oldest_unvalidated_rev, $current_time)), 'NUM_REVISIONS_IN_QUEUE' => $this->user->lang('NUM_REVISIONS_IN_QUEUE', $revisions_in_queue), 'SINCE_X_VALIDATED_REVS' => $this->user->lang('SINCE_X_VALIDATED_REVS', $this->user->format_date($oldest_validated_rev, 'd M Y'), $total_revs_validated, $total_revs_denied, $total_revs_approved), 'S_QUEUE_ACTIVE' => $revisions_in_queue)); return true; }