watchdog.module 7.34 KB
Newer Older
Dries's avatar
 
Dries committed
1
<?php
2
// $Id$
Dries's avatar
 
Dries committed
3

Dries's avatar
 
Dries committed
4
function watchdog_help($section = "admin/help#watchdog") {
Dries's avatar
 
Dries committed
5
  $output = "";
Dries's avatar
 
Dries committed
6 7

  switch ($section) {
Dries's avatar
 
Dries committed
8
    case 'admin/help#watchdog':
Dries's avatar
 
Dries committed
9
      $output .= "<p>Watchdog module monitors your web site, capturing system events in a log to be reviewed by an authorized individual at a later time.  The watchdog log is simply a list of recorded events containing usage data, performance data, errors, warnings and operational information.  It is vital to %watchdog on a regular basis as it is often the only way to tell what is going on.</p>";
Dries's avatar
 
Dries committed
10
      $output .= "<p>To ease administration, the watchdog will automatically discard old log entries, %log-entry. Needs \"cron.php\" to discard the entries.</p>";
Dries's avatar
 
Dries committed
11
      $output = t($output, array("%watchdog" => l(t("check the watchdog report"), "admin/watchdog"), "%log-entry" => l(t("as configured"), "admin/system/modules/watchdog")));
Dries's avatar
 
Dries committed
12
      break;
Dries's avatar
 
Dries committed
13 14
   case 'admin/watchdog':
     $output = t("The watchdog module monitors your web site, captures system events in a log and records them to be reviewed by an authorized individual at a later time.  The watchdog log is simply a list of events recorded during operation and contains usage data, performance data, errors, warnings and operational information. It is vital to check the watchdog report on a regular basis as it is often the only way to tell what is going on.");
Dries's avatar
 
Dries committed
15
     break;
Dries's avatar
 
Dries committed
16 17
  case 'admin/watchdog/user':
     $output = t("Watchdog events that have to do with users.");
Dries's avatar
 
Dries committed
18
     break;
Dries's avatar
 
Dries committed
19 20
  case 'admin/watchdog/regular':
    $output = t("Watchdog events that are \"normal\" and have no other classification.");
Dries's avatar
 
Dries committed
21
    break;
Dries's avatar
 
Dries committed
22 23
  case 'admin/watchdog/httpd':
    $output = t("Watchdog events that are from the web server.");
Dries's avatar
 
Dries committed
24
    break;
Dries's avatar
 
Dries committed
25 26
  case 'admin/watchdog/special':
    $output = t("Watchdog events about adding, changing, and moderating nodes and comments.");
Dries's avatar
 
Dries committed
27
    break;
Dries's avatar
 
Dries committed
28 29
  case 'admin/watchdog/error':
    $output = t("Watchdog general error events, such as invalid login, permission denied, and database errors.");
Dries's avatar
 
Dries committed
30
    break;
Dries's avatar
 
Dries committed
31
  case 'admin/watchdog/warning':
Dries's avatar
 
Dries committed
32
    $output = t("Watchdog warning events. These events don't stop Drupal from running, but are things you should know.");
Dries's avatar
 
Dries committed
33 34 35 36 37
    break;
  case 'admin/system/modules#description':
    $output = t("Logs and records system events.");
    break;
  case 'admin/system/modules/watchdog':
Dries's avatar
Dries committed
38
    $output = t("Watchdog logs your system events. To see these logs go to %watchdog. Since these logs can grow out of control if kept around forever, below set how long an item should be kept in the log.  Note that to discard entries as set below you must run \"cron.php\" regularly.", array("%watchdog" => l(t("messages"), "admin/watchdog")));
Dries's avatar
 
Dries committed
39 40
    break;
  }
Dries's avatar
 
Dries committed
41

Dries's avatar
 
Dries committed
42
  return $output;
43 44
}

Dries's avatar
 
Dries committed
45
function watchdog_perm() {
Dries's avatar
 
Dries committed
46
  return array("administer watchdog");
Dries's avatar
 
Dries committed
47 48
}

Dries's avatar
 
Dries committed
49
function watchdog_link($type) {
Dries's avatar
 
Dries committed
50 51
  if ($type == "system") {
    if (user_access("administer watchdog")) {
Dries's avatar
 
Dries committed
52 53 54 55 56 57 58 59
      menu("admin/watchdog", t("messages"), "watchdog_admin", 6);
      menu("admin/watchdog/user", t("user"), "watchdog_admin");
      menu("admin/watchdog/regular", t("regular"), "watchdog_admin");
      menu("admin/watchdog/special", t("special"), "watchdog_admin");
      menu("admin/watchdog/warning", t("warning"), "watchdog_admin");
      menu("admin/watchdog/error", t("error"), "watchdog_admin");
      menu("admin/watchdog/httpd", t("httpd"), "watchdog_admin");
      menu("admin/watchdog/view", t("view details"), "watchdog_admin", 0, 1); // hidden menu
Dries's avatar
 
Dries committed
60
    }
Dries's avatar
 
Dries committed
61 62 63
  }
}

64
function watchdog_settings() {
Dries's avatar
 
Dries committed
65 66
  $period = array(3600 => format_interval(3600), 10800 => format_interval(10800), 21600 => format_interval(21600), 32400 => format_interval(32400), 43200 => format_interval(43200), 86400 => format_interval(86400), 172800 => format_interval(172800), 259200 => format_interval(259200), 604800 => format_interval(604800), 1209600 => format_interval(1209600), 2419200 => format_interval(2419200), 1000000000 => t("Never"));
  $output .= form_select(t("Discard entries older than"), "watchdog_clear", variable_get("watchdog_clear", 604800), $period, t("The time watchdog entries should be kept.  Older entries will be automatically discarded.  Requires crontab."));
Dries's avatar
 
Dries committed
67 68 69
  return $output;
}

Dries's avatar
 
Dries committed
70
function watchdog_cron() {
Dries's avatar
 
Dries committed
71
  db_query("DELETE FROM {watchdog} WHERE ". time() ." - timestamp > ". variable_get("watchdog_clear", 604800));
Dries's avatar
 
Dries committed
72
}
Dries's avatar
 
Dries committed
73

Dries's avatar
 
Dries committed
74
function watchdog_overview($type) {
Dries's avatar
 
Dries committed
75 76
  $color = array("user" => "#FFEEAA", "message" => "#FFFFFF", "special" => "#A49FFF", "warning" => "#FFAA22", "httpd" => "#99DD99", "error" => "#EE4C4C");
  $query = array("user" => "WHERE type = 'user'", "regular" => "WHERE type = 'message'", "special" => "WHERE type = 'special'", "warning" => "WHERE type = 'warning'", "error" => "WHERE type = 'error'", "httpd" => "WHERE type = 'httpd'", "actions" => "WHERE link != ''");
Dries's avatar
 
Dries committed
77

Dries's avatar
 
Dries committed
78 79 80 81 82 83
  $header = array(
    array("data" => t("date"), "field" => "w.timestamp", "sort" => "desc"),
    array("data" => t("event"), "field" => "w.message"),
    array("data" => t("user"), "field" => "u.name"),
    array("data" => t("operations"), "colspan" => "2")
  );
Dries's avatar
 
Dries committed
84
  $sql = "SELECT w.*, u.name, u.uid FROM {watchdog} w INNER JOIN {users} u ON w.uid = u.uid ". ($type ? $query[$type] : "");
Dries's avatar
 
Dries committed
85 86
  $sql .= tablesort_sql($header);
  $result = pager_query($sql, 50);
Dries's avatar
 
Dries committed
87

Dries's avatar
 
Dries committed
88
  while ($watchdog = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
89
    if ($background = $color[$watchdog->type]) {
Dries's avatar
 
Dries committed
90 91 92 93 94 95 96
      $rows[] = array(
        array("data" => format_date($watchdog->timestamp, "small"), "style" => "background-color: $background"),
        array("data" => substr(strip_tags($watchdog->message), 0, 64), "style" => "background-color: $background"),
        array("data" => format_name($watchdog), "style" => "background-color: $background"),
        array("data" => $watchdog->link, "style" => "background-color: $background"),
        array("data" => l(t("view details"), "admin/watchdog/view/$watchdog->wid"), "style" => "background-color: $background")
      );
Dries's avatar
 
Dries committed
97
    }
Dries's avatar
 
Dries committed
98
  }
Dries's avatar
 
Dries committed
99

Dries's avatar
 
Dries committed
100
  if (!$rows) {
Dries's avatar
 
Dries committed
101
    $rows[] = array(array("data" => t("No log messages available."), "colspan" => "5"));
Dries's avatar
 
Dries committed
102
  }
Dries's avatar
 
Dries committed
103

Dries's avatar
 
Dries committed
104 105 106 107
  $pager = pager_display(NULL, 50, 0, "admin", tablesort_pager());
  if (!empty($pager)) {
    $rows[] = array(array("data" => $pager, "colspan" => "5"));
  }
Dries's avatar
 
Dries committed
108
  return theme("table", $header, $rows);
Dries's avatar
 
Dries committed
109 110 111
}

function watchdog_view($id) {
Dries's avatar
 
Dries committed
112

Dries's avatar
 
Dries committed
113
  $result = db_query("SELECT w.*, u.name, u.uid FROM {watchdog} w INNER JOIN {users} u ON w.uid = u.uid WHERE w.wid = %d", $id);
Dries's avatar
 
Dries committed
114 115

  if ($watchdog = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
116
    $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">";
Dries's avatar
 
Dries committed
117 118 119 120 121 122
    $output .= " <tr><th>". t("Type") ."</th><td>$watchdog->type</td></tr>";
    $output .= " <tr><th>". t("Date") ."</th><td>". format_date($watchdog->timestamp, "large") ."</td></tr>";
    $output .= " <tr><th>". t("User") ."</th><td>". format_name($watchdog) ."</td></tr>";
    $output .= " <tr><th>". t("Location") ."</th><td>$watchdog->location</td></tr>";
    $output .= " <tr><th>". t("Message") ."</th><td>$watchdog->message</td></tr>";
    $output .= " <tr><th>". t("Hostname") ."</th><td>$watchdog->hostname</td></tr>";
Dries's avatar
 
Dries committed
123
    $output .= "</table>";
Dries's avatar
 
Dries committed
124

Dries's avatar
 
Dries committed
125 126
    return $output;
  }
Dries's avatar
 
Dries committed
127 128
}

Dries's avatar
 
Dries committed
129
function watchdog_admin() {
Dries's avatar
 
Dries committed
130

Dries's avatar
 
Dries committed
131
  if (user_access("administer watchdog")) {
Dries's avatar
 
Dries committed
132
    switch (arg(2)) {
Dries's avatar
 
Dries committed
133
      case "help":
Dries's avatar
 
Dries committed
134
        $output = watchdog_help();
Dries's avatar
 
Dries committed
135 136
        break;
      case "view":
Dries's avatar
 
Dries committed
137
        $output = watchdog_view(arg(3));
Dries's avatar
 
Dries committed
138 139
        break;
      default:
Dries's avatar
 
Dries committed
140
        $output = watchdog_overview(arg(2));
Dries's avatar
 
Dries committed
141
    }
Dries's avatar
 
Dries committed
142
    print theme("page", $output);
Dries's avatar
 
Dries committed
143 144
  }
  else {
Dries's avatar
 
Dries committed
145
    print theme("page", message_access());
Dries's avatar
 
Dries committed
146 147
  }
}
Dries's avatar
 
Dries committed
148

Dries's avatar
 
Dries committed
149
?>