mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Enumerate AlertState (#11665)
* Enumerate AlertState * fix typo * add missing use's * . * .
This commit is contained in:
@@ -36,6 +36,7 @@ namespace LibreNMS\Alert;
|
||||
use App\Models\Device;
|
||||
use LibreNMS\Alert\AlertUtil;
|
||||
use LibreNMS\Alert\AlertDB;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
|
||||
class AlertRules
|
||||
{
|
||||
@@ -50,7 +51,7 @@ class AlertRules
|
||||
//Check to see if disable alerting is set
|
||||
if (AlertUtil::hasDisableNotify($device_id)) {
|
||||
echo "Disable alerting is set, Clearing active alerts and skipping alert rules check\r\n";
|
||||
$device_alert['state'] = 0;
|
||||
$device_alert['state'] = AlertState::CLEAR;
|
||||
$device_alert['alerted'] = 0;
|
||||
$device_alert['open'] = 0;
|
||||
dbUpdate($device_alert, 'alerts', '`device_id` = ?', array($device_id));
|
||||
@@ -90,9 +91,9 @@ class AlertRules
|
||||
|
||||
$current_state = dbFetchCell("SELECT state FROM alerts WHERE rule_id = ? AND device_id = ? ORDER BY id DESC LIMIT 1", [$rule['id'], $device_id]);
|
||||
if ($doalert) {
|
||||
if ($current_state == 2) {
|
||||
if ($current_state == AlertState::ACKNOWLEDGED) {
|
||||
c_echo('Status: %ySKIP');
|
||||
} elseif ($current_state >= 1) {
|
||||
} elseif ($current_state >= AlertState::ACTIVE) {
|
||||
c_echo('Status: %bNOCHG');
|
||||
// NOCHG here doesn't mean no change full stop. It means no change to the alert state
|
||||
// So we update the details column with any fresh changes to the alert output we might have.
|
||||
@@ -108,24 +109,24 @@ class AlertRules
|
||||
dbUpdate(array('details' => $details), 'alert_log', 'id = ?', array($alert_log['id']));
|
||||
} else {
|
||||
$extra = gzcompress(json_encode(array('contacts' => AlertUtil::getContacts($qry), 'rule'=>$qry)), 9);
|
||||
if (dbInsert(['state' => 1, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'details' => $extra], 'alert_log')) {
|
||||
if (dbInsert(['state' => AlertState::ACTIVE, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'details' => $extra], 'alert_log')) {
|
||||
if (is_null($current_state)) {
|
||||
dbInsert(array('state' => 1, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'open' => 1,'alerted' => 0), 'alerts');
|
||||
dbInsert(array('state' => AlertState::ACTIVE, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'open' => 1,'alerted' => 0), 'alerts');
|
||||
} else {
|
||||
dbUpdate(['state' => 1, 'open' => 1, 'timestamp' => array('NOW()')], 'alerts', 'device_id = ? && rule_id = ?', [$device_id, $rule['id']]);
|
||||
dbUpdate(['state' => AlertState::ACTIVE, 'open' => 1, 'timestamp' => array('NOW()')], 'alerts', 'device_id = ? && rule_id = ?', [$device_id, $rule['id']]);
|
||||
}
|
||||
c_echo(PHP_EOL . 'Status: %rALERT');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!is_null($current_state) && $current_state == 0) {
|
||||
if (!is_null($current_state) && $current_state == AlertState::RECOVERED) {
|
||||
c_echo('Status: %bNOCHG');
|
||||
} else {
|
||||
if (dbInsert(['state' => 0, 'device_id' => $device_id, 'rule_id' => $rule['id']], 'alert_log')) {
|
||||
if (dbInsert(['state' => AlertState::RECOVERED, 'device_id' => $device_id, 'rule_id' => $rule['id']], 'alert_log')) {
|
||||
if (is_null($current_state)) {
|
||||
dbInsert(['state' => 0, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'open' => 1, 'alerted' => 0], 'alerts');
|
||||
dbInsert(['state' => AlertState::RECOVERED, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'open' => 1, 'alerted' => 0], 'alerts');
|
||||
} else {
|
||||
dbUpdate(['state' => 0, 'open' => 1, 'note' => '', 'timestamp' => array('NOW()')], 'alerts', 'device_id = ? && rule_id = ?', [$device_id, $rule['id']]);
|
||||
dbUpdate(['state' => AlertState::RECOVERED, 'open' => 1, 'note' => '', 'timestamp' => array('NOW()')], 'alerts', 'device_id = ? && rule_id = ?', [$device_id, $rule['id']]);
|
||||
}
|
||||
|
||||
c_echo(PHP_EOL . 'Status: %gOK');
|
||||
|
@@ -33,6 +33,7 @@ namespace LibreNMS\Alert;
|
||||
use App\Models\DevicePerf;
|
||||
use LibreNMS\Config;
|
||||
use LibreNMS\Util\Time;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use Log;
|
||||
|
||||
class RunAlerts
|
||||
@@ -122,13 +123,13 @@ class RunAlerts
|
||||
$tpl = new Template;
|
||||
$template = $tpl->getTemplate($obj);
|
||||
|
||||
if ($alert['state'] >= 1) {
|
||||
if ($alert['state'] >= AlertState::ACTIVE) {
|
||||
$obj['title'] = $template->title ?: 'Alert for device '.$device['hostname'].' - '.($alert['name'] ? $alert['name'] : $alert['rule']);
|
||||
if ($alert['state'] == 2) {
|
||||
if ($alert['state'] == AlertState::ACKNOWLEDGED) {
|
||||
$obj['title'] .= ' got acknowledged';
|
||||
} elseif ($alert['state'] == 3) {
|
||||
} elseif ($alert['state'] == AlertState::WORSE) {
|
||||
$obj['title'] .= ' got worse';
|
||||
} elseif ($alert['state'] == 4) {
|
||||
} elseif ($alert['state'] == AlertState::BETTER) {
|
||||
$obj['title'] .= ' got better';
|
||||
}
|
||||
|
||||
@@ -146,9 +147,9 @@ class RunAlerts
|
||||
if (!empty($extra['diff'])) {
|
||||
$obj['diff'] = $extra['diff'];
|
||||
}
|
||||
} elseif ($alert['state'] == 0) {
|
||||
} elseif ($alert['state'] == AlertState::RECOVERED) {
|
||||
// Alert is now cleared
|
||||
$id = dbFetchRow('SELECT alert_log.id,alert_log.time_logged,alert_log.details FROM alert_log WHERE alert_log.state != 2 && alert_log.state != 0 && alert_log.rule_id = ? && alert_log.device_id = ? && alert_log.id < ? ORDER BY id DESC LIMIT 1', array($alert['rule_id'], $alert['device_id'], $alert['id']));
|
||||
$id = dbFetchRow('SELECT alert_log.id,alert_log.time_logged,alert_log.details FROM alert_log WHERE alert_log.state != ? && alert_log.state != ? && alert_log.rule_id = ? && alert_log.device_id = ? && alert_log.id < ? ORDER BY id DESC LIMIT 1', array(AlertState::ACKNOWLEDGED, AlertState::RECOVERED, $alert['rule_id'], $alert['device_id'], $alert['id']));
|
||||
if (empty($id['id'])) {
|
||||
return false;
|
||||
}
|
||||
@@ -222,7 +223,7 @@ class RunAlerts
|
||||
|
||||
public function clearStaleAlerts()
|
||||
{
|
||||
$sql = "SELECT `alerts`.`id` AS `alert_id`, `devices`.`hostname` AS `hostname` FROM `alerts` LEFT JOIN `devices` ON `alerts`.`device_id`=`devices`.`device_id` RIGHT JOIN `alert_rules` ON `alerts`.`rule_id`=`alert_rules`.`id` WHERE `alerts`.`state`!=0 AND `devices`.`hostname` IS NULL";
|
||||
$sql = "SELECT `alerts`.`id` AS `alert_id`, `devices`.`hostname` AS `hostname` FROM `alerts` LEFT JOIN `devices` ON `alerts`.`device_id`=`devices`.`device_id` RIGHT JOIN `alert_rules` ON `alerts`.`rule_id`=`alert_rules`.`id` WHERE `alerts`.`state`!=".AlertState::CLEAR." AND `devices`.`hostname` IS NULL";
|
||||
foreach (dbFetchRows($sql) as $alert) {
|
||||
if (empty($alert['hostname']) && isset($alert['alert_id'])) {
|
||||
dbDelete('alerts', '`id` = ?', array($alert['alert_id']));
|
||||
@@ -289,9 +290,9 @@ class RunAlerts
|
||||
public function runAcks()
|
||||
{
|
||||
|
||||
foreach ($this->loadAlerts('alerts.state = 2 && alerts.open = 1') as $alert) {
|
||||
foreach ($this->loadAlerts('alerts.state = '.AlertState::ACKNOWLEDGED.' && alerts.open = '.AlertState::ACTIVE) as $alert) {
|
||||
$this->issueAlert($alert);
|
||||
dbUpdate(array('open' => 0), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id']));
|
||||
dbUpdate(array('open' => AlertState::CLEAR), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id']));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,8 +302,8 @@ class RunAlerts
|
||||
*/
|
||||
public function runFollowUp()
|
||||
{
|
||||
foreach ($this->loadAlerts('alerts.state > 0 && alerts.open = 0') as $alert) {
|
||||
if ($alert['state'] != 2 || ($alert['info']['until_clear'] === false)) {
|
||||
foreach ($this->loadAlerts('alerts.state > '.AlertState::CLEAR.' && alerts.open = 0') as $alert) {
|
||||
if ($alert['state'] != AlertState::ACKNOWLEDGED || ($alert['info']['until_clear'] === false)) {
|
||||
$rextra = json_decode($alert['extra'], true);
|
||||
if ($rextra['invert']) {
|
||||
continue;
|
||||
@@ -322,18 +323,18 @@ class RunAlerts
|
||||
$o = sizeof($alert['details']['rule']);
|
||||
$n = sizeof($chk);
|
||||
$ret = 'Alert #' . $alert['id'];
|
||||
$state = 0;
|
||||
$state = AlertState::CLEAR;
|
||||
if ($n > $o) {
|
||||
$ret .= ' Worsens';
|
||||
$state = 3;
|
||||
$state = AlertState::WORSE;
|
||||
$alert['details']['diff'] = array_diff($chk, $alert['details']['rule']);
|
||||
} elseif ($n < $o) {
|
||||
$ret .= ' Betters';
|
||||
$state = 4;
|
||||
$state = AlertState::BETTER;
|
||||
$alert['details']['diff'] = array_diff($alert['details']['rule'], $chk);
|
||||
}
|
||||
|
||||
if ($state > 0 && $n > 0) {
|
||||
if ($state > AlertState::CLEAR && $n > 0) {
|
||||
$alert['details']['rule'] = $chk;
|
||||
if (dbInsert(array(
|
||||
'state' => $state,
|
||||
@@ -385,7 +386,7 @@ class RunAlerts
|
||||
*/
|
||||
public function runAlerts()
|
||||
{
|
||||
foreach ($this->loadAlerts('alerts.state != 2 && alerts.open = 1') as $alert) {
|
||||
foreach ($this->loadAlerts('alerts.state != '.AlertState::ACKNOWLEDGED.' && alerts.open = 1') as $alert) {
|
||||
$noiss = false;
|
||||
$noacc = false;
|
||||
$updet = false;
|
||||
@@ -404,7 +405,7 @@ class RunAlerts
|
||||
$tolerence_window = Config::get('alert.tolerance_window');
|
||||
if (!empty($rextra['count']) && empty($rextra['interval'])) {
|
||||
// This check below is for compat-reasons
|
||||
if (!empty($rextra['delay']) && $alert['state'] != 0) {
|
||||
if (!empty($rextra['delay']) && $alert['state'] != AlertState::RECOVERED) {
|
||||
if ((time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $tolerence_window) < $rextra['delay'])) {
|
||||
continue;
|
||||
} else {
|
||||
@@ -413,7 +414,7 @@ class RunAlerts
|
||||
}
|
||||
}
|
||||
|
||||
if ($alert['state'] == 1 && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) {
|
||||
if ($alert['state'] == AlertState::ACTIVE && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) {
|
||||
if ($alert['details']['count'] < $rextra['count']) {
|
||||
$noacc = true;
|
||||
}
|
||||
@@ -423,7 +424,7 @@ class RunAlerts
|
||||
}
|
||||
} else {
|
||||
// This is the new way
|
||||
if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] && $alert['state'] != 0) {
|
||||
if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] && $alert['state'] != AlertState::RECOVERED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -436,7 +437,7 @@ class RunAlerts
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array($alert['state'], [1,3,4]) && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) {
|
||||
if (in_array($alert['state'], [AlertState::ACTIVE, AlertState::WORSE, AlertState::BETTER]) && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) {
|
||||
if ($alert['details']['count'] < $rextra['count']) {
|
||||
$noacc = true;
|
||||
}
|
||||
@@ -470,7 +471,7 @@ class RunAlerts
|
||||
Log::event('Skipped alerts because all parent devices are down', $alert['device_id'], 'alert', 1);
|
||||
}
|
||||
|
||||
if ($alert['state'] == 0 && $rextra['recovery'] == false) {
|
||||
if ($alert['state'] == AlertState::RECOVERED && $rextra['recovery'] == false) {
|
||||
// Rule is set to not send a recovery alert
|
||||
$noiss = true;
|
||||
}
|
||||
@@ -545,9 +546,9 @@ class RunAlerts
|
||||
public function alertLog($result, $obj, $transport)
|
||||
{
|
||||
$prefix = [
|
||||
0 => "recovery",
|
||||
1 => $obj['severity']." alert",
|
||||
2 => "acknowledgment"
|
||||
AlertState::RECOVERED => "recovery",
|
||||
AlertState::ACTIVE => $obj['severity']." alert",
|
||||
AlertState::ACKNOWLEDGED => "acknowledgment"
|
||||
];
|
||||
$prefix[3] = &$prefix[0];
|
||||
$prefix[4] = &$prefix[0];
|
||||
|
@@ -26,6 +26,7 @@
|
||||
namespace LibreNMS\Alert;
|
||||
|
||||
use App\Models\AlertTemplate;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
|
||||
class Template
|
||||
{
|
||||
@@ -107,7 +108,7 @@ class Template
|
||||
{
|
||||
return '{{ $alert->title }}' . PHP_EOL .
|
||||
'Severity: {{ $alert->severity }}' . PHP_EOL .
|
||||
'@if ($alert->state == 0)Time elapsed: {{ $alert->elapsed }} @endif ' . PHP_EOL .
|
||||
'@if ($alert->state == '.AlertState::RECOVERED.')Time elapsed: {{ $alert->elapsed }} @endif ' . PHP_EOL .
|
||||
'Timestamp: {{ $alert->timestamp }}' . PHP_EOL .
|
||||
'Unique-ID: {{ $alert->uid }}' . PHP_EOL .
|
||||
'Rule: @if ($alert->name) {{ $alert->name }} @else {{ $alert->rule }} @endif ' . PHP_EOL .
|
||||
|
@@ -5,6 +5,7 @@ namespace LibreNMS\Alert;
|
||||
use Illuminate\Support\Str;
|
||||
use LibreNMS\Interfaces\Alert\Transport as TransportInterface;
|
||||
use LibreNMS\Config;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
|
||||
abstract class Transport implements TransportInterface
|
||||
{
|
||||
@@ -48,11 +49,11 @@ abstract class Transport implements TransportInterface
|
||||
public static function getColorForState($state)
|
||||
{
|
||||
$colors = array(
|
||||
0 => Config::get('alert_colour.ok'),
|
||||
1 => Config::get('alert_colour.bad'),
|
||||
2 => Config::get('alert_colour.acknowledged'),
|
||||
3 => Config::get('alert_colour.worse'),
|
||||
4 => Config::get('alert_colour.better'),
|
||||
AlertState::CLEAR => Config::get('alert_colour.ok'),
|
||||
AlertState::ACTIVE => Config::get('alert_colour.bad'),
|
||||
AlertState::ACKNOWLEDGED => Config::get('alert_colour.acknowledged'),
|
||||
AlertState::WORSE => Config::get('alert_colour.worse'),
|
||||
AlertState::BETTER => Config::get('alert_colour.better'),
|
||||
);
|
||||
|
||||
return isset($colors[$state]) ? $colors[$state] : '#337AB7';
|
||||
|
@@ -16,6 +16,7 @@
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Config;
|
||||
|
||||
class Alerta extends Transport
|
||||
@@ -34,7 +35,7 @@ class Alerta extends Transport
|
||||
$host = $opts['url'];
|
||||
$curl = curl_init();
|
||||
$text = strip_tags($obj['msg']);
|
||||
$severity = ($obj['state'] == 0 ? $opts['recoverstate'] : $opts['alertstate']);
|
||||
$severity = ($obj['state'] == AlertState::RECOVERED ? $opts['recoverstate'] : $opts['alertstate']);
|
||||
$deviceurl = (Config::get('base_url') . 'device/device=' . $obj['device_id']);
|
||||
$devicehostname = $obj['hostname'];
|
||||
$data = [
|
||||
|
@@ -23,6 +23,7 @@
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Config;
|
||||
|
||||
class Alertmanager extends Transport
|
||||
@@ -37,7 +38,7 @@ class Alertmanager extends Transport
|
||||
|
||||
public static function contactAlertmanager($obj, $api)
|
||||
{
|
||||
if ($obj['state'] == 0) {
|
||||
if ($obj['state'] == AlertState::RECOVERED) {
|
||||
$alertmanager_status = 'endsAt';
|
||||
} else {
|
||||
$alertmanager_status = 'startsAt';
|
||||
|
@@ -26,6 +26,7 @@
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class Api extends Transport
|
||||
|
@@ -39,6 +39,7 @@
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Config;
|
||||
|
||||
class Boxcar extends Transport
|
||||
@@ -71,16 +72,16 @@ class Boxcar extends Transport
|
||||
break;
|
||||
}
|
||||
switch ($obj['state']) {
|
||||
case 0:
|
||||
case AlertState::RECOVERED:
|
||||
$title_text = "OK";
|
||||
if (!empty($api['sound_ok'])) {
|
||||
$data['notification[sound]'] = $api['sound_ok'];
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case AlertState::Active:
|
||||
$title_text = $severity;
|
||||
break;
|
||||
case 2:
|
||||
case AlertState::ACKNOWLEDGED:
|
||||
$title_text = "Acknowledged";
|
||||
break;
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Canopsis extends Transport
|
||||
|
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Ciscospark extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Clickatell extends Transport
|
||||
|
@@ -28,6 +28,7 @@
|
||||
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Discord extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Dummy extends Transport
|
||||
|
@@ -16,6 +16,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Elasticsearch extends Transport
|
||||
@@ -65,19 +66,19 @@ class Elasticsearch extends Transport
|
||||
$host = $es_host . ':' . $es_port . '/' . $index . '/' . $type;
|
||||
|
||||
switch ($obj['state']) {
|
||||
case 0:
|
||||
case AlertState::RECOVERED:
|
||||
$state = "ok";
|
||||
break;
|
||||
case 1:
|
||||
case AlertState::ACTIVE:
|
||||
$state = $severity;
|
||||
break;
|
||||
case 2:
|
||||
case AlertState::ACKNOWLEDGED:
|
||||
$state = "acknowledged";
|
||||
break;
|
||||
case 3:
|
||||
case AlertState::WORSE:
|
||||
$state = "worse";
|
||||
break;
|
||||
case 4:
|
||||
case AlertState::BETTER:
|
||||
$state = "better";
|
||||
break;
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Gitlab extends Transport
|
||||
@@ -40,7 +41,7 @@ class Gitlab extends Transport
|
||||
public function contactGitlab($obj, $opts)
|
||||
{
|
||||
// Don't create tickets for resolutions
|
||||
if ($obj['state'] != 0) {
|
||||
if ($obj['state'] != AlertState::CLEAR) {
|
||||
$device = device_by_id_cache($obj['device_id']); // for event logging
|
||||
|
||||
$project_id = $opts['project-id'];
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Hipchat extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
/**
|
||||
@@ -46,7 +47,7 @@ class Hue extends Transport
|
||||
public function contactHue($obj, $opts)
|
||||
{
|
||||
// Don't alert on resolve at this time
|
||||
if ($obj['state'] == 0) {
|
||||
if ($obj['state'] == AlertState::RECOVERED) {
|
||||
return true;
|
||||
} else {
|
||||
$device = device_by_id_cache($obj['device_id']); // for event logging
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Config;
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Jira extends Transport
|
||||
|
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Config;
|
||||
|
||||
|
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Linenotify extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Config;
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Mattermost extends Transport
|
||||
|
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Msteams extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Nagios extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Opsgenie extends Transport
|
||||
|
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Config;
|
||||
|
||||
|
@@ -27,6 +27,7 @@ namespace LibreNMS\Alert\Transport;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Http\Request;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
use Log;
|
||||
use Validator;
|
||||
@@ -37,9 +38,9 @@ class Pagerduty extends Transport
|
||||
|
||||
public function deliverAlert($obj, $opts)
|
||||
{
|
||||
if ($obj['state'] == 0) {
|
||||
if ($obj['state'] == AlertState::RECOVERED) {
|
||||
$obj['event_type'] = 'resolve';
|
||||
} elseif ($obj['state'] == 2) {
|
||||
} elseif ($obj['state'] == AlertState::ACKNOWLEDGED) {
|
||||
$obj['event_type'] = 'acknowledge';
|
||||
} else {
|
||||
$obj['event_type'] = 'trigger';
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Playsms extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Pushbullet extends Transport
|
||||
|
@@ -37,6 +37,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Pushover extends Transport
|
||||
@@ -69,7 +70,7 @@ class Pushover extends Transport
|
||||
break;
|
||||
}
|
||||
switch ($obj['state']) {
|
||||
case 0:
|
||||
case AlertState::RECOVERED:
|
||||
$data['priority'] = 0;
|
||||
if (!empty($api['options']['sound_ok'])) {
|
||||
$data['sound'] = $api['options']['sound_ok'];
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Rocket extends Transport
|
||||
|
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
use LibreNMS\Config;
|
||||
|
||||
@@ -37,13 +38,6 @@ class Sensu extends Transport
|
||||
const CRITICAL = 2;
|
||||
const UNKNOWN = 3;
|
||||
|
||||
// LibreNMS alert coding
|
||||
const RECOVER = 0;
|
||||
const ALERT = 1;
|
||||
const ACK = 2;
|
||||
const WORSE = 3;
|
||||
const BETTER = 4;
|
||||
|
||||
private static $status = array(
|
||||
'ok' => Sensu::OK,
|
||||
'warning' => Sensu::WARNING,
|
||||
@@ -51,11 +45,11 @@ class Sensu extends Transport
|
||||
);
|
||||
|
||||
private static $severity = array(
|
||||
'recovered' => Sensu::RECOVER,
|
||||
'alert' => Sensu::ALERT,
|
||||
'acknowledged' => Sensu::ACK,
|
||||
'worse' => Sensu::WORSE,
|
||||
'better' => Sensu::BETTER,
|
||||
'recovered' => AlertState::RECOVERED,
|
||||
'alert' => AlertState::ACTIVE,
|
||||
'acknowledged' => AlertState::ACKNOWLEDGED,
|
||||
'worse' => AlertState::WORSE,
|
||||
'better' => AlertState::BETTER,
|
||||
);
|
||||
|
||||
private static $client = null;
|
||||
@@ -85,7 +79,7 @@ class Sensu extends Transport
|
||||
return 'Sensu API is not responding';
|
||||
}
|
||||
|
||||
if ($obj['state'] !== Sensu::RECOVER && $obj['state'] !== Sensu::ACK && $obj['alerted'] === 0) {
|
||||
if ($obj['state'] !== AlertState::RECOVERED && $obj['state'] !== AlertState::ACKNOWLEDGED && $obj['alerted'] === 0) {
|
||||
// If this is the first event, send a forced "ok" dated (rrd.step / 2) seconds ago to tell Sensu the last time the check was healthy
|
||||
$data = Sensu::generateData($obj, $opts, Sensu::OK, round(Config::get('rrd.step', 300) / 2));
|
||||
Log::debug('Sensu transport sent last good event to socket: ', $data);
|
||||
@@ -142,7 +136,7 @@ class Sensu extends Transport
|
||||
{
|
||||
return array_filter([
|
||||
'generated-by' => 'LibreNMS',
|
||||
'acknowledged' => $obj['state'] === Sensu::ACK ? 'true' : 'false',
|
||||
'acknowledged' => $obj['state'] === AlertState::ACKNOWLEDGED ? 'true' : 'false',
|
||||
'contact' => $obj['sysContact'],
|
||||
'description' => $obj['sysDescr'],
|
||||
'location' => $obj['location'],
|
||||
@@ -158,7 +152,7 @@ class Sensu extends Transport
|
||||
{
|
||||
// Sensu only has a single short (status) to indicate both severity and status, so we need to map LibreNMS' state and severity onto it
|
||||
|
||||
if ($state === Sensu::RECOVER) {
|
||||
if ($state === AlertState::RECOVERED) {
|
||||
// LibreNMS alert is resolved, send ok
|
||||
return Sensu::OK;
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Slack extends Transport
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use Illuminate\Support\Str;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Smsfeedback extends Transport
|
||||
|
@@ -16,6 +16,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Splunk extends Transport
|
||||
@@ -68,10 +69,10 @@ class Splunk extends Transport
|
||||
}
|
||||
|
||||
switch ($obj['state']) {
|
||||
case 0:
|
||||
case AlertState::RECOVERED:
|
||||
$severity = 6;
|
||||
break;
|
||||
case 2:
|
||||
case AlertState::ACKNOWLEDGED:
|
||||
$severity = 6;
|
||||
break;
|
||||
}
|
||||
|
@@ -16,6 +16,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Syslog extends Transport
|
||||
@@ -79,14 +80,14 @@ class Syslog extends Transport
|
||||
}
|
||||
|
||||
switch ($obj['state']) {
|
||||
case 0:
|
||||
case AlertState::RECOVERED:
|
||||
$state = "OK";
|
||||
$severity = 6;
|
||||
break;
|
||||
case 1:
|
||||
case AlertState::ACTIVE:
|
||||
$state = $sev_txt;
|
||||
break;
|
||||
case 2:
|
||||
case AlertState::ACKNOWLEDGED:
|
||||
$state = "Acknowledged";
|
||||
$severity = 6;
|
||||
break;
|
||||
|
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Telegram extends Transport
|
||||
|
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Twilio extends Transport
|
||||
|
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
namespace LibreNMS\Alert\Transport;
|
||||
|
||||
use LibreNMS\Enum\AlertState;
|
||||
use LibreNMS\Alert\Transport;
|
||||
|
||||
class Victorops extends Transport
|
||||
@@ -47,11 +48,11 @@ class Victorops extends Transport
|
||||
'state_message' => $obj['msg'],
|
||||
'monitoring_tool' => 'librenms',
|
||||
);
|
||||
if ($obj['state'] == 0) {
|
||||
if ($obj['state'] == AlertState::RECOVERED) {
|
||||
$protocol['message_type'] = 'recovery';
|
||||
} elseif ($obj['state'] == 2) {
|
||||
} elseif ($obj['state'] == AlertState::ACKNOWLEDGED) {
|
||||
$protocol['message_type'] = 'acknowledgement';
|
||||
} elseif ($obj['state'] == 1) {
|
||||
} elseif ($obj['state'] == AlertState::ACTIVE) {
|
||||
$protocol['message_type'] = 'critical';
|
||||
}
|
||||
|
||||
|
36
LibreNMS/Enum/AlertState.php
Normal file
36
LibreNMS/Enum/AlertState.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* Alert.php
|
||||
*
|
||||
* Enumerates alarming Level
|
||||
*
|
||||
* 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 2020 Thomas Berberich
|
||||
* @author Thomas Berberich <sourcehhdoctor@gmail.com>
|
||||
*/
|
||||
|
||||
namespace LibreNMS\Enum;
|
||||
|
||||
abstract class AlertState
|
||||
{
|
||||
const CLEAR = 0;
|
||||
const ACTIVE = 1;
|
||||
const ACKNOWLEDGED = 2;
|
||||
const WORSE = 3;
|
||||
const BETTER = 4;
|
||||
const RECOVERED = 0;
|
||||
}
|
@@ -22,6 +22,7 @@ namespace LibreNMS;
|
||||
|
||||
use LibreNMS\DB\Eloquent;
|
||||
use LibreNMS\Authentication\LegacyAuth;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
|
||||
class IRCBot
|
||||
{
|
||||
@@ -237,10 +238,10 @@ class IRCBot
|
||||
}
|
||||
|
||||
switch ($alert['state']) :
|
||||
case 3:
|
||||
case AlertState::WORSE:
|
||||
$severity_extended = '+';
|
||||
break;
|
||||
case 4:
|
||||
case AlertState::BETTER:
|
||||
$severity_extended = '-';
|
||||
break;
|
||||
default:
|
||||
@@ -248,7 +249,7 @@ class IRCBot
|
||||
endswitch;
|
||||
|
||||
$severity = str_replace(array('warning', 'critical'), array($this->_color('Warning', 'yellow'), $this->_color('Critical', 'red')), $alert['severity']).$severity_extended.' ';
|
||||
if ($alert['state'] == 0 and $this->config['irc_alert_utf8']) {
|
||||
if ($alert['state'] == AlertState::RECOVERED and $this->config['irc_alert_utf8']) {
|
||||
$severity = str_replace(array('Warning', 'Critical'), array('̶W̶a̶r̶n̶i̶n̶g', '̶C̶r̶i̶t̶i̶c̶a̶l'), $severity);
|
||||
}
|
||||
|
||||
|
@@ -27,6 +27,7 @@ namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
|
||||
class Alert extends Model
|
||||
{
|
||||
@@ -41,7 +42,7 @@ class Alert extends Model
|
||||
*/
|
||||
public function scopeActive($query)
|
||||
{
|
||||
return $query->where('state', '=', '1');
|
||||
return $query->where('state', '=', AlertState::ACTIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -51,7 +52,7 @@ class Alert extends Model
|
||||
*/
|
||||
public function scopeAcknowledged($query)
|
||||
{
|
||||
return $query->where('state', '=', '2');
|
||||
return $query->where('state', '=', AlertState::ACKNOWLEDGED);
|
||||
}
|
||||
|
||||
// ---- Define Relationships ----
|
||||
|
@@ -26,6 +26,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use LibreNMS\Enum\AlertState;
|
||||
|
||||
class AlertRule extends BaseModel
|
||||
{
|
||||
@@ -52,7 +53,7 @@ class AlertRule extends BaseModel
|
||||
{
|
||||
return $query->enabled()
|
||||
->join('alerts', 'alerts.rule_id', 'alert_rules.id')
|
||||
->whereNotIn('alerts.state', [0, 2]);
|
||||
->whereNotIn('alerts.state', [AlertState::CLEAR, AlertState::ACKNOWLEDGED, AlertState::RECOVERED]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user