Init Repo

This commit is contained in:
Gregor Schulte
2021-06-15 11:08:34 +02:00
parent d0b72a118d
commit b303dd00d6
330 changed files with 93268 additions and 0 deletions

View File

@@ -0,0 +1,253 @@
<?php
if (!defined('PICONTROL')) exit();
class ProcessController
{
private $rawOutput;
private $processes;
private function runCommand()
{
$this->rawOutput = shell_exec('ps axo pid,ppid,user,stat,pcpu,pmem,etime,time,comm | tail -n +2');
}
private function handleRawOutput()
{
if ($this->rawOutput === NULL)
$this->runCommand();
$output = explode("\n", $this->rawOutput);
foreach ($output as $process)
{
if (empty($process))
continue;
$split = preg_split('#[\s]+#', $process);
if ($split[0] == '')
{
unset($split[0]);
$split = array_values($split);
}
$newProcess = new ProcessEntry();
$newProcess->setPid($split[0]);
$newProcess->setPpid($split[1]);
$newProcess->setUser($split[2]);
$newProcess->setStatus($split[3]);
$newProcess->setCpu($split[4]);
$newProcess->setRam($split[5]);
$newProcess->setElapsedTime($split[6]);
$newProcess->setRuntime($split[7]);
$newProcess->setCommand($split[8]);
$this->processes[] = $newProcess;
}
}
public function getProcesses()
{
if ($this->rawOutput === NULL)
$this->handleRawOutput();
return $this->processes;
}
public function getProcessesArray()
{
$output = [];
foreach ($this->getProcesses() as $process) {
$output[] = $process->toArray();
}
return $output;
}
public function getCount()
{
if ($this->rawOutput === NULL)
$this->handleRawOutput();
return count($this->processes);
}
public function getCountRunning()
{
if ($this->rawOutput === NULL)
$this->handleRawOutput();
$count = 0;
foreach ($this->processes as $process)
{
if ($process->getStatus() == 'R')
$count += 1;
}
return $count;
}
static public function isPidWithStartTimeExists($pid, $time) {
if (!function_exists('getSecondsFromTime'))
(include_once LIBRARY_PATH.'process/process.function.php');
$rawOutput = shell_exec('ps -eo pid,etime | grep -E \'^[[:space:]]*'.escapeshellarg($pid).' \' | head -n 1');
$split = preg_split('#[\s]+#', $rawOutput);
if ($split[0] == '')
{
unset($split[0]);
$split = array_values($split);
}
return ($split[0] == $pid && abs((time() - getSecondsFromTime($split[1])) - $time) < 10);
}
public function terminatePid($pid)
{
global $tpl;
list ($SSHReturn, $SSHError, $SSHExitStatus) = $tpl->executeSSH('sudo kill -SIGTERM '.escapeshellarg($pid));
return ($SSHError == '' && $SSHExitStatus == 0) ? true : false;
}
public function killPid($pid)
{
global $tpl;
list ($SSHReturn, $SSHError, $SSHExitStatus) = $tpl->executeSSH('sudo kill -SIGKILL '.escapeshellarg($pid));
return ($SSHError == '' && $SSHExitStatus == 0) ? true : false;
}
}
class ProcessEntry
{
private $pid;
private $ppid;
private $user;
private $status;
private $cpu;
private $ram;
private $elapsedTime;
private $runtime;
private $command;
public function getPid()
{
return $this->pid;
}
public function setPid($pid)
{
$this->pid = $pid;
}
public function getPpid()
{
return $this->ppid;
}
public function setPpid($ppid)
{
$this->ppid = $ppid;
}
public function getUser()
{
return $this->user;
}
public function setUser($user)
{
$this->user = $user;
}
public function getStatus()
{
return $this->status;
}
public function setStatus($status)
{
$this->status = $status;
}
public function getCpu()
{
return $this->cpu;
}
public function setCpu($cpu)
{
$this->cpu = $cpu;
}
public function getRam()
{
return $this->ram;
}
public function setRam($ram)
{
$this->ram = $ram;
}
public function getElapsedTime()
{
if (!function_exists('getSecondsFromTime'))
(include_once LIBRARY_PATH.'process/process.function.php');
return getSecondsFromTime($this->elapsedTime);
}
public function setElapsedTime($elapsedTime)
{
$this->elapsedTime = $elapsedTime;
}
public function getRuntime()
{
if (!function_exists('getSecondsFromTime'))
(include_once LIBRARY_PATH.'process/process.function.php');
return getSecondsFromTime($this->runtime);
}
public function setRuntime($runtime)
{
$this->runtime = $runtime;
}
public function getCommand()
{
return $this->command;
}
public function setCommand($command)
{
$this->command = $command;
}
public function toArray() {
return [
'pid' => $this->pid,
'ppid' => $this->ppid,
'user' => $this->user,
'status' => $this->status,
'cpu' => $this->cpu,
'ram' => $this->ram,
'elapsedTime' => $this->getElapsedTime(),
'runtime' => $this->getRuntime(),
'command' => $this->command
];
}
}
?>

View File

@@ -0,0 +1,32 @@
<?php
if (!defined('PICONTROL')) exit();
function getReadableStatus($status)
{
switch (substr($status, 0, 1))
{
case 'D':
return _t('Ununterbrechbar');
case 'R':
return _t('L&auml;uft');
case 'S':
return _t('Schl&auml;ft');
case 'T':
return _t('Gestoppt');
case 'Z':
return _t('Zombie');
}
}
function getSecondsFromTime($time)
{
$split = preg_split('#[-:]+#', $time);
if (count($split) == 4)
return $split[0]*86400 + $split[1]*3600 + $split[2]*60 + $split[3];
elseif (count($split) == 3)
return $split[0]*3600 + $split[1]*60 + $split[2];
return $split[0]*60 + $split[1];
}
?>