X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FLog%2FParsedLogIterator.php;h=a45b67176961b47f74ded3fb5f5fc3d54dcb6b5d;hb=360614d2cf3aceeb763ef1281ad5236878f5d735;hp=15714454e7ce667a9631c0c7e477824ae5ed98d2;hpb=5b9aeeeca95165203ed2753ba44ce6d8fbdea321;p=friendica.git diff --git a/src/Model/Log/ParsedLogIterator.php b/src/Model/Log/ParsedLogIterator.php index 15714454e7..a45b671769 100644 --- a/src/Model/Log/ParsedLogIterator.php +++ b/src/Model/Log/ParsedLogIterator.php @@ -1,6 +1,6 @@ . * */ -namespace Friendica\Model\Log; -use \Friendica\Util\ReversedFileReader; -use \Friendica\Object\Log\ParsedLog; +namespace Friendica\Model\Log; +use Friendica\Util\ReversedFileReader; +use Friendica\Object\Log\ParsedLogLine; /** - * An iterator which returns `\Friendica\Objec\Log\ParsedLog` instances + * An iterator which returns `\Friendica\Objec\Log\ParsedLogLine` instances * * Uses `\Friendica\Util\ReversedFileReader` to fetch log lines * from newest to oldest. @@ -35,51 +35,85 @@ class ParsedLogIterator implements \Iterator /** @var \Iterator */ private $reader; - /** @var ParsedLog current iterator value*/ - private $value; + /** @var ParsedLogLine current iterator value*/ + private $value = null; /** @var int max number of lines to read */ - private $limit; + private $limit = 0; /** @var array filters per column */ - private $filters; + private $filters = []; /** @var string search term */ - private $search; + private $search = ''; + /** + * @param ReversedFileReader $reader + */ + public function __construct(ReversedFileReader $reader) + { + $this->reader = $reader; + } + /** * @param string $filename File to open + * @return $this + */ + public function open(string $filename): ParsedLogIterator + { + $this->reader->open($filename); + return $this; + } + + /** * @param int $limit Max num of lines to read - * @param array $filter filters per column - * @param string $search string to search to filter lines + * @return $this */ - public function __construct(string $filename, int $limit=0, array $filters=[], string $search="") + public function withLimit(int $limit): ParsedLogIterator { - $this->reader = new ReversedFileReader($filename); - $this->value = null; $this->limit = $limit; + return $this; + } + + /** + * @param array $filters filters per column + * @return $this + */ + public function withFilters(array $filters): ParsedLogIterator + { $this->filters = $filters; + return $this; + } + + /** + * @param string $search string to search to filter lines + * @return $this + */ + public function withSearch(string $search): ParsedLogIterator + { $this->search = $search; + return $this; } /** * Check if parsed log line match filters. * Always match if no filters are set. - * - * @param ParsedLog $parsedlog - * @return bool + * + * @param ParsedLogLine $parsedlogline ParsedLogLine instance + * @return bool Wether the parse log line matches */ - private function filter($parsedlog) + private function filter(ParsedLogLine $parsedlogline): bool { $match = true; foreach ($this->filters as $filter => $filtervalue) { - switch($filter) { - case "level": - $match = $match && ($parsedlog->level == strtoupper($filtervalue)); + switch ($filter) { + case 'level': + $match = $match && ($parsedlogline->level == strtoupper($filtervalue)); break; - case "context": - $match = $match && ($parsedlog->context == $filtervalue); + + case 'context': + $match = $match && ($parsedlogline->context == $filtervalue); break; } } @@ -89,70 +123,98 @@ class ParsedLogIterator implements \Iterator /** * Check if parsed log line match search. * Always match if no search query is set. - * - * @param ParsedLog $parsedlog + * + * @param ParsedLogLine $parsedlogline * @return bool */ - private function search($parsedlog) + private function search(ParsedLogLine $parsedlogline): bool { - if ($this->search != "") { - return strstr($parsedlog->logline, $this->search) !== false; + if ($this->search != '') { + return strstr($parsedlogline->logline, $this->search) !== false; } - return True; + return true; } /** * Read a line from reader and parse. * Returns null if limit is reached or the reader is invalid. - * - * @param ParsedLog $parsedlog - * @return ?ParsedLog + * + * @return ?ParsedLogLine */ private function read() { $this->reader->next(); - if ($this->limit > 0 && $this->reader->key() > $this->limit || !$this->reader->valid()) { + if ($this->limit > 0 && $this->reader->key() > $this->limit || !$this->reader->valid()) { return null; } $line = $this->reader->current(); - return new ParsedLog($this->reader->key(), $line); + return new ParsedLogLine($this->reader->key(), $line); } - public function next() + + /** + * Fetch next parsed log line which match with filters or search and + * set it as current iterator value. + * + * @see Iterator::next() + * @return void + */ + public function next(): void { $parsed = $this->read(); - // if read() has not retuned none and - // the line don't match filters or search - // read the next line - while(is_null($parsed) == false && !($this->filter($parsed) && $this->search($parsed))) { + while (is_null($parsed) == false && !($this->filter($parsed) && $this->search($parsed))) { $parsed = $this->read(); } $this->value = $parsed; } - public function rewind() + + /** + * Rewind the iterator to the first matching log line + * + * @see Iterator::rewind() + * @return void + */ + public function rewind(): void { $this->value = null; $this->reader->rewind(); $this->next(); } - public function key() + /** + * Return current parsed log line number + * + * @see Iterator::key() + * @see ReversedFileReader::key() + * @return int + */ + public function key(): int { return $this->reader->key(); } - public function current() + /** + * Return current iterator value + * + * @see Iterator::current() + * @return ?ParsedLogLine + */ + public function current(): ?ParsedLogLine { return $this->value; } - public function valid() + /** + * Checks if current iterator value is valid, that is, not null + * + * @see Iterator::valid() + * @return bool + */ + public function valid(): bool { - return ! is_null($this->value); + return !is_null($this->value); } - } -