summaryrefslogtreecommitdiffstats
path: root/modules-available/systemstatus/inc/systemstatus.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/systemstatus/inc/systemstatus.inc.php')
-rw-r--r--modules-available/systemstatus/inc/systemstatus.inc.php53
1 files changed, 53 insertions, 0 deletions
diff --git a/modules-available/systemstatus/inc/systemstatus.inc.php b/modules-available/systemstatus/inc/systemstatus.inc.php
new file mode 100644
index 00000000..4413af5f
--- /dev/null
+++ b/modules-available/systemstatus/inc/systemstatus.inc.php
@@ -0,0 +1,53 @@
+<?php
+
+class SystemStatus
+{
+
+ /**
+ * Collect status about the disk and vmstore.
+ * The *Usage vars are filled with arrays with keys mountPoint, fileSystem,
+ * usedPercent, sizeKb, freeKb.
+ * @param array|false $systemUsage
+ * @param array|false $storeUsage
+ * @param string|false $currentSource What's currently mounted as vmstore
+ * @param string|false $wantedSource What should be mounted as vmstore (false if nothing configured)
+ * @return bool false if querying fs data from taskmanager failed
+ */
+ public static function diskStat(&$systemUsage, &$storeUsage, &$currentSource = false, &$wantedSource = false)
+ {
+ $task = Taskmanager::submit('DiskStat');
+ if ($task === false)
+ return false;
+ $task = Taskmanager::waitComplete($task, 3000);
+
+ if (!isset($task['data']['list']) || empty($task['data']['list']))
+ return false;
+ $wantedSource = Property::getVmStoreUrl();
+ $currentSource = false;
+ $storeUsage = false;
+ $systemUsage = false;
+ if ($wantedSource === '<local>') {
+ $storePoint = '/';
+ } else {
+ $storePoint = CONFIG_VMSTORE_DIR;
+ }
+ // Collect free space information
+ foreach ($task['data']['list'] as $entry) {
+ // StorePoint is either the atual directory of the vmstore, or / if we use internal storage
+ if ($entry['mountPoint'] === $storePoint) {
+ $storeUsage = $entry;
+ }
+ // Always report free space on system disk
+ if ($entry['mountPoint'] === '/') {
+ $systemUsage = $entry;
+ }
+ // Record what's mounted at destination, regardless of config, to indicate something is wrong
+ if (($currentSource === false && $wantedSource === '<local>' && $entry['mountPoint'] === '/')
+ || $entry['mountPoint'] === CONFIG_VMSTORE_DIR) {
+ $currentSource = $entry['fileSystem'];
+ }
+ }
+ return true;
+ }
+
+} \ No newline at end of file