Mercurial > defr > drupal > core
diff modules/dblog/dblog.module @ 1:c1f4ac30525a 6.0
Drupal 6.0
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Tue, 23 Dec 2008 14:28:28 +0100 |
parents | |
children | 2427550111ae |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/dblog/dblog.module Tue Dec 23 14:28:28 2008 +0100 @@ -0,0 +1,159 @@ +<?php +// $Id: dblog.module,v 1.21 2008/01/08 10:35:41 goba Exp $ + +/** + * @file + * System monitoring and logging for administrators. + * + * The dblog module monitors your site and keeps a list of + * recorded events containing usage and performance data, errors, + * warnings, and similar operational information. + * + * @see watchdog() + */ + +/** + * Implementation of hook_help(). + */ +function dblog_help($path, $arg) { + switch ($path) { + case 'admin/help#dblog': + $output = '<p>'. t('The dblog module monitors your system, capturing system events in a log to be reviewed by an authorized individual at a later time. This is useful for site administrators who want a quick overview of activities on their site. The logs also record the sequence of events, so it can be useful for debugging site errors.') .'</p>'; + $output .= '<p>'. t('The dblog log is simply a list of recorded events containing usage data, performance data, errors, warnings and operational information. Administrators should check the dblog report on a regular basis to ensure their site is working properly.') .'</p>'; + $output .= '<p>'. t('For more information, see the online handbook entry for <a href="@dblog">Dblog module</a>.', array('@dblog' => 'http://drupal.org/handbook/modules/dblog/')) .'</p>'; + return $output; + case 'admin/reports/dblog': + return '<p>'. t('The dblog module monitors your website, capturing system events in a log to be reviewed by an authorized individual at a later time. The dblog log is simply a list of recorded events containing usage data, performance data, errors, warnings and operational information. It is vital to check the dblog report on a regular basis as it is often the only way to tell what is going on.') .'</p>'; + } +} + +/** + * Implementation of hook_theme() + */ +function dblog_theme() { + return array( + 'dblog_filters' => array( + 'arguments' => array('form' => NULL), + ), + ); +} + +/** + * Implementation of hook_menu(). + */ +function dblog_menu() { + $items['admin/settings/logging/dblog'] = array( + 'title' => 'Database logging', + 'description' => 'Settings for logging to the Drupal database logs. This is the most common method for small to medium sites on shared hosting. The logs are viewable from the admin pages.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('dblog_admin_settings'), + 'file' => 'dblog.admin.inc', + ); + + $items['admin/reports/dblog'] = array( + 'title' => 'Recent log entries', + 'description' => 'View events that have recently been logged.', + 'page callback' => 'dblog_overview', + 'weight' => -1, + 'file' => 'dblog.admin.inc', + ); + $items['admin/reports/page-not-found'] = array( + 'title' => "Top 'page not found' errors", + 'description' => "View 'page not found' errors (404s).", + 'page callback' => 'dblog_top', + 'page arguments' => array('page not found'), + 'file' => 'dblog.admin.inc', + ); + $items['admin/reports/access-denied'] = array( + 'title' => "Top 'access denied' errors", + 'description' => "View 'access denied' errors (403s).", + 'page callback' => 'dblog_top', + 'page arguments' => array('access denied'), + 'file' => 'dblog.admin.inc', + ); + $items['admin/reports/event/%'] = array( + 'title' => 'Details', + 'page callback' => 'dblog_event', + 'page arguments' => array(3), + 'type' => MENU_CALLBACK, + 'file' => 'dblog.admin.inc', + ); + return $items; +} + +function dblog_init() { + if (arg(0) == 'admin' && arg(1) == 'reports') { + // Add the CSS for this module + drupal_add_css(drupal_get_path('module', 'dblog') .'/dblog.css', 'module', 'all', FALSE); + } +} + + + +/** + * Implementation of hook_cron(). + * + * Remove expired log messages and flood control events. + */ +function dblog_cron() { + // Cleanup the watchdog table + $max = db_result(db_query('SELECT MAX(wid) FROM {watchdog}')); + db_query('DELETE FROM {watchdog} WHERE wid < %d', $max - variable_get('dblog_row_limit', 1000)); +} + +/** + * Implementation of hook_user(). + */ +function dblog_user($op, &$edit, &$user) { + if ($op == 'delete') { + db_query('UPDATE {watchdog} SET uid = 0 WHERE uid = %d', $user->uid); + } +} + +function _dblog_get_message_types() { + $types = array(); + + $result = db_query('SELECT DISTINCT(type) FROM {watchdog} ORDER BY type'); + while ($object = db_fetch_object($result)) { + $types[] = $object->type; + } + + return $types; +} + +function dblog_watchdog($log = array()) { + $current_db = db_set_active(); + db_query("INSERT INTO {watchdog} + (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) + VALUES + (%d, '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', %d)", + $log['user']->uid, + $log['type'], + $log['message'], + serialize($log['variables']), + $log['severity'], + $log['link'], + $log['request_uri'], + $log['referer'], + $log['ip'], + $log['timestamp']); + + if ($current_db) { + db_set_active($current_db); + } +} + +/** + * Theme dblog administration filter selector. + * + * @ingroup themeable + */ +function theme_dblog_filters($form) { + $output = ''; + foreach (element_children($form['status']) as $key) { + $output .= drupal_render($form['status'][$key]); + } + $output .= '<div id="dblog-admin-buttons">'. drupal_render($form['buttons']) .'</div>'; + return $output; +} +