Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: Web validation #7474

Merged
merged 15 commits into from
Oct 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions LibreNMS/IRCBot.php
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ private function init()
if ($this->config['irc_alert']) {
$this->alertData();
}

if ($this->config['irc_conn_timeout']) {
$inactive_seconds = time() - $this->last_activity;
$max_inactive = $this->config['irc_conn_timeout'];
Expand Down Expand Up @@ -677,7 +677,7 @@ private function _help($params)

private function _version($params)
{
$versions = version_info(false);
$versions = version_info();
$schema_version = $versions['db_schema'];
$version = substr($versions['local_sha'], 0, 7);

Expand Down
46 changes: 46 additions & 0 deletions LibreNMS/Interfaces/ValidationGroup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php
/**
* ValidationGroup.php
*
* An interface for validation groups, this will be run by Validator.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2017 Tony Murray
* @author Tony Murray <murraytony@gmail.com>
*/

namespace LibreNMS\Interfaces;

use LibreNMS\Validator;

interface ValidationGroup
{
/**
* Validate this module.
* To return ValidationResults, call ok, warn, fail, or result methods on the $validator
*
* @param Validator $validator
*/
public function validate(Validator $validator);

/**
* Returns if this test should be run by default or not.
*
* @return bool
*/
public function isDefault();
}
198 changes: 198 additions & 0 deletions LibreNMS/ValidationResult.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
<?php
/**
* ValidationResult.php
*
* Encapsulates the result of a validation test.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2017 Tony Murray
* @author Tony Murray <murraytony@gmail.com>
*/

namespace LibreNMS;

class ValidationResult
{
const FAILURE = 0;
const WARNING = 1;
const SUCCESS = 2;

private $message;
private $status;
private $list_description = '';
private $list;
private $fix;

/**
* ValidationResult constructor.
* @param string $message The message to describe this result
* @param int $status The status of this result FAILURE, WARNING, or SUCCESS
* @param string $fix a suggested fix to highlight for the user
*/
public function __construct($message, $status, $fix = null)
{
$this->message = $message;
$this->status = $status;
$this->fix = $fix;
}

/**
* Create a new ok Validation result
* @param string $message The message to describe this result
* @param string $fix a suggested fix to highlight for the user
* @return ValidationResult
*/
public static function ok($message, $fix = null)
{
return new self($message, self::SUCCESS, $fix);
}

/**
* Create a new warning Validation result
* @param string $message The message to describe this result
* @param string $fix a suggested fix to highlight for the user
* @return ValidationResult
*/
public static function warn($message, $fix = null)
{
return new self($message, self::WARNING, $fix);
}

/**
* Create a new failure Validation result
* @param string $message The message to describe this result
* @param string $fix a suggested fix to highlight for the user
* @return ValidationResult
*/
public static function fail($message, $fix = null)
{
return new self($message, self::FAILURE, $fix);
}

/**
* Returns the status an int representing
* ValidationResult::FAILURE, ValidationResult::WARNING, or ValidationResult::SUCCESS
*
* @return int
*/
public function getStatus()
{
return $this->status;
}

public function getMessage()
{
return $this->message;
}

public function hasList()
{
return !empty($this->list);
}

public function getList()
{
return $this->list;
}

public function setList($description, array $list)
{
$this->list_description = $description;
$this->list = $list;
return $this;
}

public function hasFix()
{
return !empty($this->fix);
}

public function getFix()
{
return $this->fix;
}

public function setFix($fix)
{
$this->fix = $fix;
return $this;
}

/**
* Print out this result to the console. Formatted nicely and with color.
*/
public function consolePrint()
{
c_echo(str_pad('[' . $this->getStatusText($this->status) . ']', 12) . $this->message . PHP_EOL);

if (isset($this->fix)) {
c_echo("\t[%BFIX%n] %B$this->fix%n\n");
}

if (!empty($this->list)) {
echo "\t" . $this->getListDescription() . ":\n";
$this->printList();
}
}

/**
* Get the colorized string that represents the status of a ValidatonResult
*
* @return string
*/
public static function getStatusText($status)
{
if ($status === self::SUCCESS) {
return '%gOK%n';
} elseif ($status === self::WARNING) {
return '%YWARN%n';
} elseif ($status === self::FAILURE) {
return '%RFAIL%n';
}
return 'Unknown';
}

public function getListDescription()
{
return $this->list_description;
}

/**
* Print a list of items up to a max amount
* If over that number, a line will print the total items
*
* @param string $format format as consumed by printf()
* @param int $max the max amount of items to print, default 15
*/
private function printList($format = "\t %s\n", $max = 15)
{
if (is_array(current($this->list))) {
$this->list = array_map(function ($item) {
return implode(' ', $item);
}, $this->list);
}

foreach (array_slice($this->list, 0, $max) as $item) {
printf($format, $item);
}

$extra = count($this->list) - $max;
if ($extra > 0) {
printf($format, " and $extra more...");
}
}
}
57 changes: 57 additions & 0 deletions LibreNMS/Validations/Configuration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
/**
* Configuration.php
*
* Checks various config settings are correct.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2017 Tony Murray
* @author Tony Murray <murraytony@gmail.com>
*/

namespace LibreNMS\Validations;

use LibreNMS\Config;
use LibreNMS\Interfaces\ValidationGroup;
use LibreNMS\Validator;

class Configuration implements ValidationGroup
{
/**
* Validate this module.
* To return ValidationResults, call ok, warn, fail, or result methods on the $validator
*
* @param Validator $validator
*/
public function validate(Validator $validator)
{
// Test transports
if (Config::get('alerts.email.enable') == true) {
$validator->warn('You have the old alerting system enabled - this is to be deprecated on the 1st of June 2015: https://groups.google.com/forum/#!topic/librenms-project/1llxos4m0p4');
}
}

/**
* Returns if this test should be run by default or not.
*
* @return bool
*/
public function isDefault()
{
return true;
}
}
Loading