/** * Compute the weekly summaries for the week starting at the given timestamp. * * @param $timestamp * UNIX timestamp indicating the last time weekly stats were processed. */ function project_usage_process_weekly($timestamp) { watchdog('project_usage', 'Starting to process weekly usage data.'); $time_0 = microtime(TRUE); // Get all the weeks since we last ran. $weeks = project_usage_get_weeks_since($timestamp); // Skip the last entry since it's the current, incomplete week. $count = count($weeks) - 1; for ($i = 0; $i < $count; $i++) { $start = $weeks[$i]; $end = $weeks[$i + 1]; $date = format_date($start, 'custom', 'Y-m-d'); $time_1 = microtime(TRUE); // Try to compute the usage tallies per project and per release. If there // is a problem--perhaps some rows existed from a previous, incomplete // run that are preventing inserts, throw a watchdog error. $sql = "INSERT INTO {project_usage_week_project} (nid, timestamp, version_api, count) SELECT project_nid as nid, :start, version_api, COUNT(DISTINCT site_key) FROM {project_usage_day} WHERE timestamp >= :start AND timestamp < :end AND project_nid <> 0 GROUP BY project_nid, version_api"; $query_args = array(':start' => $start, ':end' => $end); $result = db_query($sql, $query_args); $time_2 = microtime(TRUE); $substitutions = array('!date' => $date, '!projects' => format_plural($result->rowCount(), '1 project', '@count projects'), '!delta' => format_interval($time_2 - $time_1)); if (!$result) { watchdog('project_usage', 'Query failed inserting weekly project tallies for !date (!delta).', $substitutions, WATCHDOG_ERROR); } else { watchdog('project_usage', 'Computed weekly project tallies for !date for !projects (!delta).', $substitutions); } $sql = "INSERT INTO {project_usage_week_release} (nid, timestamp, count) SELECT release_nid as nid, :start, COUNT(DISTINCT site_key) FROM {project_usage_day} WHERE timestamp >= :start AND timestamp < :end AND release_nid <> 0 GROUP BY release_nid"; $query_args = array(':start' => $start, ':end' => $end); $result = db_query($sql, $query_args); $time_3 = microtime(TRUE); $substitutions = array('!date' => $date, '!releases' => format_plural($result->rowCount(), '1 release', '@count releases'), '!delta' => format_interval($time_3 - $time_2)); if (!$result) { watchdog('project_usage', 'Query failed inserting weekly release tallies for !date, query (!delta).', $substitutions, WATCHDOG_ERROR); } else { watchdog('project_usage', 'Computed weekly release tallies for !date for !releases (!delta).', $substitutions); } } // Remove any tallies that have aged out. $time_4 = microtime(TRUE); $project_life = config_get('project_usage.settings', 'life_weekly_project'); $result = db_query("DELETE FROM {project_usage_week_project} WHERE timestamp < :timestamp", array(':timestamp' => REQUEST_TIME - $project_life)); $time_5 = microtime(TRUE); $substitutions = array('!rows' => format_plural($result->rowCount(), '1 old weekly project row', '@count old weekly project rows'), '!delta' => format_interval($time_5 - $time_4)); watchdog('project_usage', 'Removed !rows (!delta).', $substitutions); $release_life = config_get('project_usage.settings', 'life_weekly_release'); $result = db_query("DELETE FROM {project_usage_week_release} WHERE timestamp < :timestamp", array(':timestamp' => REQUEST_TIME - $release_life)); $time_6 = microtime(TRUE); $substitutions = array('!rows' => format_plural($result->rowCount(), '1 old weekly release row', '@count old weekly release rows'), '!delta' => format_interval($time_6 - $time_5)); watchdog('project_usage', 'Removed !rows (!delta).', $substitutions); watchdog('project_usage', 'Completed weekly usage data processing (total time: !delta).', array('!delta' => format_interval($time_6 - $time_0))); }
/** * Compute the weekly summaries for the week starting at the given timestamp. * * @param $timestamp * UNIX timestamp indicating the last time weekly stats were processed. */ function project_usage_process_weekly($timestamp) { watchdog('project_usage', 'Starting to process weekly usage data.'); $time_0 = time(); // Get all the weeks since we last ran. $weeks = project_usage_get_weeks_since($timestamp); // Skip the last entry since it's the current, incomplete week. $count = count($weeks) - 1; for ($i = 0; $i < $count; $i++) { $start = $weeks[$i]; $end = $weeks[$i + 1]; $date = format_date($start, 'custom', 'Y-m-d'); $time_1 = time(); // Try to compute the usage tallies per project and per release. If there // is a problem--perhaps some rows existed from a previous, incomplete // run that are preventing inserts, throw a watchdog error. $sql = "INSERT INTO {project_usage_week_project} (nid, timestamp, tid, count) SELECT pid, %d, tid, COUNT(DISTINCT site_key) FROM {project_usage_day} WHERE timestamp >= %d AND timestamp < %d AND pid <> 0 GROUP BY pid, tid"; $query_args = array($start, $start, $end); $result = db_query($sql, $query_args); $time_2 = time(); _db_query_callback($query_args, TRUE); $substitutions = array('!date' => $date, '%query' => preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $sql), '!projects' => format_plural(db_affected_rows(), '1 project', '@count projects'), '!delta' => format_interval($time_2 - $time_1)); if (!$result) { watchdog('project_usage', 'Query failed inserting weekly project tallies for !date, query: %query (!delta).', $substitutions, WATCHDOG_ERROR); } else { watchdog('project_usage', 'Computed weekly project tallies for !date for !projects (!delta).', $substitutions); } $sql = "INSERT INTO {project_usage_week_release} (nid, timestamp, count) SELECT nid, %d, COUNT(DISTINCT site_key) FROM {project_usage_day} WHERE timestamp >= %d AND timestamp < %d AND nid <> 0 GROUP BY nid"; $query_args = array($start, $start, $end); $result = db_query($sql, $query_args); $time_3 = time(); _db_query_callback($query_args, TRUE); $substitutions = array('!date' => $date, '!releases' => format_plural(db_affected_rows(), '1 release', '@count releases'), '%query' => preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $sql), '!delta' => format_interval($time_3 - $time_2)); if (!$result) { watchdog('project_usage', 'Query failed inserting weekly release tallies for !date, query: %query (!delta).', $substitutions, WATCHDOG_ERROR); } else { watchdog('project_usage', 'Computed weekly release tallies for !date for !releases (!delta).', $substitutions); } } // Remove any tallies that have aged out. $time_4 = time(); $project_life = variable_get('project_usage_life_weekly_project', PROJECT_USAGE_YEAR); db_query("DELETE FROM {project_usage_week_project} WHERE timestamp < %d", $now - $project_life); $time_5 = time(); $substitutions = array('!rows' => format_plural(db_affected_rows(), '1 old weekly project row', '@count old weekly project rows'), '!delta' => format_interval($time_5 - $time_4)); watchdog('project_usage', 'Removed !rows (!delta).', $substitutions); $release_life = variable_get('project_usage_life_weekly_release', 26 * PROJECT_USAGE_WEEK); db_query("DELETE FROM {project_usage_week_release} WHERE timestamp < %d", $now - $release_life); $time_6 = time(); $substitutions = array('!rows' => format_plural(db_affected_rows(), '1 old weekly release row', '@count old weekly release rows'), '!delta' => format_interval($time_6 - $time_5)); watchdog('project_usage', 'Removed !rows (!delta).', $substitutions); watchdog('project_usage', 'Completed weekly usage data processing (total time: !delta).', array('!delta' => format_interval($time_6 - $time_0))); }