You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hestiacp/web/list/rrd/ajax.php

64 lines
1.4 KiB

<?php
use function Hestiacp\quoteshellarg\quoteshellarg;
// Main include
include $_SERVER["DOCUMENT_ROOT"] . "/inc/main.php";
// Check user
if ($_SESSION["userContext"] != "admin") {
header("Location: /list/user");
exit();
}
$requestPayload = json_decode(file_get_contents("php://input"), true);
$allowedPeriods = ["daily", "weekly", "monthly", "yearly", "biennially", "triennially"];
if (!empty($requestPayload["period"]) && in_array($requestPayload["period"], $allowedPeriods)) {
$period = $requestPayload["period"];
} else {
$period = "daily";
}
if (!empty($requestPayload["service"])) {
$service = $requestPayload["service"];
} else {
$service = "la";
}
// Data
exec(
HESTIA_CMD . "v-export-rrd " . quoteshellarg($service) . " " . quoteshellarg($period),
$output,
$return_var,
);
if ($return_var != 0) {
http_response_code(500);
exit("Error fetching RRD data");
}
$serviceUnits = [
"la" => "Points",
"mem" => "Mbytes",
"apache2" => "Connections",
"nginx" => "Connections",
"mail" => "Queue Size",
"ftp" => "Connections",
"ssh" => "Connections",
];
if (preg_match("/^net_/", $service)) {
$serviceUnits[$service] = "KBytes";
}
if (preg_match("/^pgsql_/", $service)) {
$serviceUnits[$service] = "Queries";
}
if (preg_match("/^mysql_/", $service)) {
$serviceUnits[$service] = "Queries";
}
$data = json_decode(implode("", $output), true);
$data["service"] = $service;
$data["unit"] = $serviceUnits[$service] ?? null;
echo json_encode($data);