5 class Stats extends \Rsi\Fred\Log\Handler{
16 public $message =
"Message '[message]' ([filename]@[lineNo]) occurred [threshold] times in the last [ttl] seconds";
19 protected function same($new_message,$old_message){
20 return (similar_text($new_message,$old_message,$perc) >= $this->charThreshold) || ($perc >=
$this->percThreshold);
24 return $this->_log->component(
'mail')->send(
26 $this->to ?: ini_get(
'sendmail_from'),
27 str_replace(
'*',\
Rsi\Http::host(),$this->subject),
28 strtr($this->message,[
30 '[lineNo]' => $line_no ?: 0,
32 '[threshold]' => $this->threshold,
40 if($this->filename)
try{
41 $records = \Rsi\File::unserialize($this->filename,[]);
43 foreach($records as $index => &$record){
45 foreach($record[
'times'] as $time)
if($time > $limit) $times[] = $time;
46 if($times) $record[
'times'] = $times;
47 elseif(!$record[
'lastSend'] || ($record[
'lastSend'] < time() - $this->interval * 60)) unset($records[$index]);
51 $line_no = $context[
'lineNo'] ??
null;
52 foreach($records as $index => &$record)
if(
54 ($record[
'lineNo'] == $line_no) &&
58 (!$record[
'lastSend'] || ($record[
'lastSend'] < time() - $this->interval * 60)) &&
59 (count($record[
'times']) >= $this->threshold) &&
61 ) $record = [
'lastSend' => time(),
'times' => []] + $record;
62 $record[
'times'][] = time();
67 if(
$message) $records[] = [
'filename' =>
$filename,
'lineNo' => $line_no,
'message' =>
$message,
'lastSend' =>
null,
'times' => [time()]];
68 \Rsi\File::serialize($temp = $this->filename . \
Rsi\Str::random(),$records);
69 rename($temp,$this->filename);
72 if($this->_log->fred->debug)
throw $e;