From 0d4d09f6fac5e79a75e8305c0c6c4df1620b6eb0 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 8 Jan 2018 13:47:34 +0100 Subject: [statistics] Add filters for uptime and hostname Closes #3278 --- modules-available/statistics/inc/filter.inc.php | 44 ++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'modules-available/statistics/inc') diff --git a/modules-available/statistics/inc/filter.inc.php b/modules-available/statistics/inc/filter.inc.php index be6df752..1686f328 100644 --- a/modules-available/statistics/inc/filter.inc.php +++ b/modules-available/statistics/inc/filter.inc.php @@ -88,15 +88,17 @@ class Filter $lhs = trim(substr($q, 0, $pos)); $rhs = trim(substr($q, $pos + strlen($operator))); - if ($lhs == 'gbram') { + if ($lhs === 'gbram') { $filters[] = new RamGbFilter($operator, $rhs); - } elseif ($lhs == 'state') { + } elseif ($lhs === 'runtime') { + $filters[] = new RuntimeFilter($operator, $rhs); + } elseif ($lhs === 'state') { $filters[] = new StateFilter($operator, $rhs); - } elseif ($lhs == 'hddgb') { + } elseif ($lhs === 'hddgb') { $filters[] = new Id44Filter($operator, $rhs); - } elseif ($lhs == 'location') { + } elseif ($lhs === 'location') { $filters[] = new LocationFilter($operator, $rhs); - } elseif ($lhs == 'subnet') { + } elseif ($lhs === 'subnet') { $filters[] = new SubnetFilter($operator, $rhs); } else { if (array_key_exists($lhs, Page_Statistics::$columns) && Page_Statistics::$columns[$lhs]['column']) { @@ -143,6 +145,38 @@ class RamGbFilter extends Filter } } +class RuntimeFilter extends Filter +{ + public function __construct($operator, $argument) + { + parent::__construct('lastboot', $operator, $argument); + } + + public function whereClause(&$args, &$joins) + { + global $SIZE_RAM; + $lower = time() + (int)$this->argument * 3600; + $upper = $lower + 3600; + $common = "state IN ('OCCUPIED', 'IDLE', 'STANDBY') AND"; + if ($this->operator == '=') { + return "$common ({$this->column} BETWEEN $lower AND $upper)"; + } elseif ($this->operator == '<') { + return "$common {$this->column} < $lower"; + } elseif ($this->operator == '<=') { + return "$common {$this->column} < $upper"; + } elseif ($this->operator == '>') { + return "$common {$this->column} > $upper"; + } elseif ($this->operator == '>=') { + return "$common {$this->column} > $lower"; + } elseif ($this->operator == '!=') { + return "$common ({$this->column} < $lower OR {$this->column} > $upper)"; + } else { + error_log("unimplemented operator in RuntimeFilter: $this->operator"); + return ' 1'; + } + } +} + class Id44Filter extends Filter { public function __construct($operator, $argument) -- cgit v1.2.3-55-g7522