array( 'Name' => "Name", 'Hostname' => "Hostname", 'PhysicalLocation' => "PhysicalLocation", 'PrivateKey' => "CustomPrivateKey", 'PublicKey' => "CustomPublicKey", 'User' => "User" ), 'numeric' => array( 'Port' => "Port" ), 'boolean' => array( 'HasCustomKey' => "HasCustomKey" ) ); public $ssh = null; protected function EventConstructed() { global $settings; $this->ssh = new SshConnector(); $this->ssh->host = $this->sHostname; $this->ssh->port = $this->sPort; $this->ssh->user = $this->sUser; if($this->HasCustomKey === true) { $this->ssh->key = $this->sPrivateKey; $this->ssh->pubkey = $this->sPublicKey; } else { $this->ssh->key = $settings['master_privkey']; $this->ssh->pubkey = $settings['master_pubkey']; } } public function __get($name) { switch($name) { case "sRealHostname": return $this->GetHostname(); break; case "sDiskFree": return $this->GetDiskFree(); break; case "sDiskUsed": return $this->GetDiskUsed(); break; default: return parent::__get($name); break; } } public function GetHostname() { return $this->ssh->RunCommandCached("hostname", true)->stdout; } public function GetDiskFree() { $disk = $this->GetDisk(); return $disk['free']; } public function GetDiskUsed() { $disk = $this->GetDisk(); return $disk['used']; } public function GetDisk() { $result = $this->ssh->RunCommandCached("df -l -x tmpfs", true); $lines = explode("\n", $result->stdout); array_shift($lines); $total_free = 0; $total_used = 0; $total_total = 0; foreach($lines as $disk) { $disk = trim($disk); if(!empty($disk)) { $values = split_whitespace($disk); $total_free += (int)$values[3] / 1024; $total_used += (int)$values[2] / 1024; $total_total += ((int)$values[2] + (int)$values[3]) / 1024; } } return array( 'free' => $total_free, 'used' => $total_used, 'total' => $total_total ); } }