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;
|
||
|
}
|
||
|
}
|