modified: xbotcontrol.php
This commit is contained in:
132
src/Classes/Report.php
Normal file
132
src/Classes/Report.php
Normal 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,
|
||||
];
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user