Christopher Vagnetoft
9050c74a08
* Added vertical rendering to com.noccy.pdo.shell * Added missing Log classes for com.noccy.apiclient
80 lines
1.7 KiB
PHP
80 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace SparkPlug\Com\Noccy\ApiClient\Log;
|
|
|
|
use JsonSerializable;
|
|
use Psr\Http\Message\ResponseInterface;
|
|
use SparkPlug\Com\Noccy\ApiClient\Log\RequestData as LogRequestData;
|
|
use SparkPlug\Com\Noccy\ApiClient\Request\Request;
|
|
|
|
|
|
class LogIterator implements \Iterator
|
|
{
|
|
private ?string $lastLog = null;
|
|
|
|
private string $filename;
|
|
|
|
private array $log = [];
|
|
|
|
private ?int $index = null;
|
|
|
|
private ?int $lindex = null;
|
|
|
|
public function __construct(string $logfile)
|
|
{
|
|
$this->filename = $logfile;
|
|
}
|
|
|
|
private function readLog(string $filename)
|
|
{
|
|
if (!file_exists($filename)) {
|
|
$this->lastLog = null;
|
|
$this->log = [];
|
|
$this->index = null;
|
|
$this->lindex = null;
|
|
return;
|
|
}
|
|
$log = json_decode(file_get_contents($filename), true);
|
|
$this->lastLog = $log['lastlog']??null;
|
|
$this->log = $log['events'];
|
|
$this->lindex = 0;
|
|
if ($this->index === null) {
|
|
$this->index = 0;
|
|
}
|
|
}
|
|
|
|
public function rewind(): void
|
|
{
|
|
$this->index = null;
|
|
$this->readLog($this->filename);
|
|
}
|
|
|
|
public function current()
|
|
{
|
|
return $this->log[$this->lindex];
|
|
}
|
|
|
|
public function key()
|
|
{
|
|
return $this->index;
|
|
}
|
|
|
|
public function next(): void
|
|
{
|
|
$this->index++;
|
|
$this->lindex++;
|
|
if ($this->lindex >= count($this->log)) {
|
|
if ($this->lastLog) {
|
|
$this->readLog($this->lastLog);
|
|
} else {
|
|
$this->lindex = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function valid(): bool
|
|
{
|
|
return $this->lindex !== null;
|
|
}
|
|
}
|