Beispiel #1
0
    /**
     * 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;
 }