Browse Source

add check diskspace to org

CauseFX 4 years ago
parent
commit
da37faf604
2 changed files with 60 additions and 0 deletions
  1. 59 0
      api/classes/organizr.class.php
  2. 1 0
      api/v2/routes/root.php

+ 59 - 0
api/classes/organizr.class.php

@@ -91,6 +91,8 @@ class Organizr
 	{
 		// First Check PHP Version
 		$this->checkPHP();
+		// Check Disk Space
+		$this->checkDiskSpace();
 		// Constructed from Updater?
 		$this->updating = $updating;
 		// Set Project Root directory
@@ -196,6 +198,63 @@ class Organizr
 		}
 	}
 	
+	public function checkDiskSpace()
+	{
+		$disk = $this->checkDisk('/');
+		$diskLevels = [
+			'warn' => 1000000000,
+			'error' => 100000000
+		];
+		if ($disk['free'] <= $diskLevels['error']) {
+			die($this->showHTML('Low Disk Space', 'You are dangerously low on disk space.<br/>There is only ' . $disk['free']['human_readable'] . ' remaining.<br/><b>Percent Used = ' . $disk['used']['percent_used'] . '%</b>'));
+		} elseif ($disk['free'] <= $diskLevels['warn']) {
+			$GLOBALS['warnings'][] = 'You are low on disk space.  There is only ' . $disk['free']['human_readable'] . ' remaining.';
+		}
+		return true;
+	}
+	
+	public function getFreeSpace($directory = '/')
+	{
+		$disk = disk_free_space($directory);
+		return [
+			'raw' => $disk,
+			'human_readable' => $this->human_filesize($disk, 0)
+		];
+	}
+	
+	public function getDiskSpace($directory = '/')
+	{
+		$disk = disk_total_space($directory);
+		return [
+			'raw' => $disk,
+			'human_readable' => $this->human_filesize($disk, 0)
+		];
+	}
+	
+	public function getUsedSpace($directory = '/')
+	{
+		$diskFree = $this->getFreeSpace($directory);
+		$diskTotal = $this->getDiskSpace($directory);
+		$diskUsed = $diskTotal['raw'] - $diskFree['raw'];
+		$percentUsed = ($diskUsed / $diskTotal['raw']) * 100;
+		$percentFree = 100 - $percentUsed;
+		return [
+			'raw' => $diskUsed,
+			'human_readable' => $this->human_filesize($diskUsed, 0),
+			'percent_used' => round($percentUsed),
+			'percent_free' => round($percentFree)
+		];
+	}
+	
+	public function checkDisk($directory = '/')
+	{
+		return [
+			'free' => $this->getFreeSpace('/'),
+			'used' => $this->getUsedSpace('/'),
+			'total' => $this->getDiskSpace('/'),
+		];
+	}
+	
 	public function auth()
 	{
 		if ($this->hasDB()) {

+ 1 - 0
api/v2/routes/root.php

@@ -126,6 +126,7 @@ $app->get('/launch', function ($request, $response, $args) {
 	$GLOBALS['api']['response']['data']['appearance'] = $Organizr->loadAppearance();
 	$GLOBALS['api']['response']['data']['status'] = $Organizr->status();
 	$GLOBALS['api']['response']['data']['sso'] = $Organizr->ssoCookies();
+	$GLOBALS['api']['response']['data']['warnings'] = $GLOBALS['warnings'];
 	$response->getBody()->write(jsonE($GLOBALS['api']));
 	return $response
 		->withHeader('Content-Type', 'application/json;charset=UTF-8')