modified: xbotcontrol.php

This commit is contained in:
2024-12-17 15:50:30 +02:00
parent 03fd8a7df7
commit 141deaa35b
15 changed files with 1042 additions and 60 deletions

132
src/Classes/Report.php Normal file
View File

@@ -0,0 +1,132 @@
<?php
declare(strict_types=1);
namespace XBotControl\Classes;
use React\Promise\PromiseInterface;
use Psr\Http\Message\ServerRequestInterface;
class Report
{
public static function latest_requests(ServerRequestInterface $request): PromiseInterface
{
$columnsDefinition = [
[
'title' => 'id',
'field' => 'id',
'visible' => false,
'sortable' => true,
'filterControl' => 'input',
'widthUnit' => 'input',
'width' => 'input',
],
[
'sortable' => true,
'title' => 'ip',
'field' => 'ip',
'sortable' => true,
'filterControl' => 'input',
],
[
'sortable' => true,
'title' => 'domain',
'field' => 'domain',
'sortable' => true,
'visible' => false,
'filterControl' => 'input',
],
[
'sortable' => true,
'title' => 'path',
'field' => 'path',
'sortable' => true,
'filterControl' => 'input',
],
[
'sortable' => true,
'title' => 'useragent',
'field' => 'useragent',
'sortable' => true,
'filterControl' => 'input',
],
[
'sortable' => true,
'title' => 'load',
'field' => 'load',
'sortable' => true,
'filterControl' => 'input',
],
[
'sortable' => true,
'title' => 'datetime',
'field' => 'datetime',
'sortable' => true,
'filterControl' => 'input',
],
];
$sql = "SELECT
req.rowid AS id,
ip.data AS ip,
domain.data AS domain,
path.data AS path,
useragent.data AS useragent,
headers.data AS headers ,
(SELECT load.load1
FROM load
WHERE load.rowid >= req.timestamp
ORDER BY load.rowid DESC LIMIT 1) AS load,
datetime(req.timestamp, 'auto') AS datetime
FROM
request req
LEFT JOIN
ip ON req.id_ip = ip.rowid
LEFT JOIN
domain ON req.id_domain = domain.rowid
LEFT JOIN
path ON req.id_path = path.rowid
LEFT JOIN
useragent ON req.id_useragent = useragent.rowid
LEFT JOIN
headers ON req.id_headers = headers.rowid
WHERE 1=1 ";
$params = [];
$query = $request->getQueryParams();
if (isset($query['filter'])) {
$filter = json_decode($request->getQueryParams()['filter'], true);
} else {
$filter = [];
}
foreach ($filter as $field => $value) {
$sql .= 'AND ' . $field . ' LIKE ? ';
$params[] = '%' . $value . '%';
}
$sql .= " AND req.timestamp BETWEEN ? AND ? ";
$sql .= ' ORDER BY req.rowid DESC ';
$sql .= ' LIMIT ? ;';
$params[] = strtotime($request->getQueryParams()['from'] ?? 'yesterday');
$params[] = strtotime($request->getQueryParams()['to'] ?? 'now');
$params[] = (int)$request->getQueryParams()['limit'] ?? 100;
return \XBotControl\Storage::getInstance()->db->query($sql, $params)->then(function ($result) use ($columnsDefinition) {
return [
"columns" => $columnsDefinition,
"rows" => $result->rows,
];
});
}
}