diff options
Diffstat (limited to 'inc/eventlog.inc.php')
-rw-r--r-- | inc/eventlog.inc.php | 61 |
1 files changed, 44 insertions, 17 deletions
diff --git a/inc/eventlog.inc.php b/inc/eventlog.inc.php index 3ebb82a4..99585abd 100644 --- a/inc/eventlog.inc.php +++ b/inc/eventlog.inc.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class to add entries to the event log. Technically this class belongs to the * eventlog module, but since it is used in so many places, this helper resides @@ -10,46 +12,71 @@ class EventLog { - private static function log($type, $message, $details) + private static function log(string $type, string $message, string $details, bool $markWarning): void { if (!Module::isAvailable('eventlog')) { // Eventlog module does not exist; the eventlog table might not exist, so bail out error_log($message); return; } - Database::exec("INSERT INTO eventlog (dateline, logtypeid, description, extra)" - . " VALUES (UNIX_TIMESTAMP(), :type, :message, :details)", array( - 'type' => $type, - 'message' => $message, - 'details' => $details - ), true); + if (mb_strlen($message) > 255) { + $message = mb_substr($message, 0, 255); + } + if (mb_strlen($details) > 65535) { + $details = mb_substr($details, 0, 65535); + } + $data = [ + 'type' => $type, + 'message' => $message, + 'details' => $details, + ]; + if (Database::exec("INSERT INTO eventlog (dateline, logtypeid, description, extra)" + . " VALUES (UNIX_TIMESTAMP(), :type, :message, :details)", $data, true) === false) { + error_log($message); + } else { + // Insert ok, see if we should update the "latest warning" id + $id = Database::lastInsertId(); + if ($id !== 0 && $markWarning) { + Property::setLastWarningId($id); + } + } + self::applyFilterRules('#serverlog', $data); } - public static function failure($message, $details = '') + public static function failure(string $message, string $details = ''): void { - self::log('failure', $message, $details); - Property::setLastWarningId(Database::lastInsertId()); + self::log('failure', $message, $details, true); } - public static function warning($message, $details = '') + public static function warning(string $message, string $details = ''): void { - self::log('warning', $message, $details); - Property::setLastWarningId(Database::lastInsertId()); + self::log('warning', $message, $details, true); } - public static function info($message, $details = '') + public static function info(string $message, string $details = ''): void { - self::log('info', $message, $details); + self::log('info', $message, $details, false); } /** * DELETE ENTIRE EVENT LOG! */ - public static function clear() + public static function clear(): void { if (!Module::isAvailable('eventlog')) return; Database::exec("TRUNCATE eventlog"); } - + + /** + * @param string $type the event. Will either be client state like ~poweron, ~runstate etc. or a client log type + * @param array $data A structured array containing event specific data that can be matched. + */ + public static function applyFilterRules(string $type, array $data): void + { + if (!Module::isAvailable('eventlog')) + return; + FilterRuleProcessor::applyFilterRules($type, $data); + } + } |