From 92527b0b2d8a76ee8ae368541c60d0a07c889dbc Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 26 Feb 2020 15:19:34 +0100 Subject: [backup/systemstatus] Show up/downloads in backup page Add AJAX API to dozmod module to query the fileserver status of dmsd. --- modules-available/dozmod/pages/special.inc.php | 85 ++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 modules-available/dozmod/pages/special.inc.php (limited to 'modules-available/dozmod/pages/special.inc.php') diff --git a/modules-available/dozmod/pages/special.inc.php b/modules-available/dozmod/pages/special.inc.php new file mode 100644 index 00000000..5a532b51 --- /dev/null +++ b/modules-available/dozmod/pages/special.inc.php @@ -0,0 +1,85 @@ + 1 ORDER BY blockcount DESC, blocksha1 ASC"); + $data = array('hashes' => array()); + $spaceWasted = 0; + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $row['hash_hex'] = bin2hex($row['blocksha1']); + $row['blocksize_s'] = Util::readableFileSize($row['blocksize']); + $data['hashes'][] = $row; + $spaceWasted += $row['blocksize'] * ($row['blockcount'] - 1); + } + $data['spacewasted'] = Util::readableFileSize($spaceWasted); + Render::addTemplate('blockstats', $data); + } + + public static function doAjax() + { + $action = Request::any('action'); + + if ($action === 'getblockinfo') { + self::ajaxGetBlockInfo(); + } elseif ($action === 'dmsd-status') { + self::ajaxDmsdStatus(); + } + } + + private static function ajaxGetBlockInfo() + { + $hash = Request::any('hash', false, 'string'); + $size = Request::any('size', false, 'string'); + if ($hash === false || $size === false) { + die('Missing parameter'); + } + if (!is_numeric($size) || strlen($hash) !== 40 || !preg_match('/^[a-f0-9]+$/i', $hash)) { + die('Malformed parameter'); + } + $res = Database::simpleQuery("SELECT i.displayname, v.createtime, v.filesize, Count(*) AS blockcount FROM sat.imageblock ib" + . " INNER JOIN sat.imageversion v USING (imageversionid)" + . " INNER JOIN sat.imagebase i USING (imagebaseid)" + . " WHERE ib.blocksha1 = :hash AND ib.blocksize = :size" + . " GROUP BY ib.imageversionid" + . " ORDER BY i.displayname ASC, v.createtime ASC", + array('hash' => hex2bin($hash), 'size' => $size), true); + if ($res === false) { + die('Database error: ' . Database::lastError()); + } + $data = array('rows' => array()); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $row['createtime_s'] = date('d.m.Y H:i', $row['createtime']); + $row['filesize_s'] = Util::readableFileSize($row['filesize']); + $data['rows'][] = $row; + } + die(Render::parse('blockstats-details', $data)); + } + + private static function ajaxDmsdStatus() + { + $ret = Download::asStringPost('http://127.0.0.1:9080/status/fileserver', false, 2, $code); + $args = array(); + if ($code != 200) { + $args['error'] = true; + } else { + $data = @json_decode($ret, true); + if (is_array($data)) { + $args['uploads'] = $data['activeUploads']; + $args['downloads'] = $data['activeDownloads']; + } + } + Header('Content-Type: application/json'); + echo json_encode($args); + } + +} \ No newline at end of file -- cgit v1.2.3-55-g7522