More work on alerting config

This commit is contained in:
laf
2015-05-17 03:20:28 +01:00
parent d0a0df4e88
commit b769af2459
6 changed files with 188 additions and 7 deletions

View File

@@ -0,0 +1,42 @@
<?php
/*
* LibreNMS
*
* Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa>
*
* 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. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
if(is_admin() === false) {
die('ERROR: You need to be admin');
}
$status = 'error';
if (!is_numeric($_POST['config_id'])) {
$message = 'ERROR: No alert selected';
exit;
} else {
if($_POST['config_value'] === true) {
$state = TRUE;
} else {
$state = FALSE;
}
$state = $_POST['config_value'];
$update = dbUpdate(array('config_value' => $state), 'config', '`config_id`=?', array($_POST['config_id']));
if(!empty($update) || $update == '0')
{
$message = 'Alert rule has been updated.';
$status = 'ok';
} else {
$message = 'ERROR: Alert rule has not been updated.';
}
}
$response = array('status'=>$status,'message'=>$message);
echo _json_encode($response);

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -786,4 +786,35 @@ function add_config_item($new_conf_name,$new_conf_value,$new_conf_type,$new_conf
return($db_inserted);
}
function get_config_by_group($group) {
$group = array($group);
foreach (dbFetchRows("SELECT * FROM `config` WHERE `config_group` = '?'", array($group)) as $config_item) {
$items[] = $config_item;
}
return $items;
}
function get_config_by_name($name) {
$name = array($name);
foreach (dbFetchRows("SELECT * FROM `config` WHERE `config_name` = '?'", array($name)) as $config_item) {
$items[] = $config_item;
}
return $items;
}
function set_config_name($name,$config_value) {
return dbUpdate(array('config_value' => $config_value), 'config', '`config_name`=?', array($name));
}
function get_url() {
// http://stackoverflow.com/questions/2820723/how-to-get-base-url-with-php
// http://stackoverflow.com/users/184600/ma%C4%8Dek
return sprintf(
"%s://%s%s",
isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
$_SERVER['SERVER_NAME'],
$_SERVER['REQUEST_URI']
);
}
?>

View File

@@ -23,9 +23,21 @@
* @subpackage Page
*/
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<span id="message"></span>
</div>
</div>
</div>
<?php
if (isset($vars['sub'])) {
if (file_exists(mres($vars['sub']))) {
if (file_exists("pages/settings/".mres($vars['sub']).".inc.php")) {
require_once "pages/settings/".mres($vars['sub']).".inc.php";
} else {
print_error("This settings page doesn't exist, please go to the main settings page");

View File

@@ -12,10 +12,105 @@
* the source code distribution for details.
*/
if (isset($_GET['error'])) {
print_error('We had issues connecting to your Pager Duty account, please try again');
}
if (isset($_GET['account']) && isset($_GET['service_key']) && isset($_GET['service_name'])) {
set_config_name('alert,transports,pagerduty',$_GET['service_key']);
set_config_name('alert,pagerduty,account',$_GET['account']);
set_config_name('alert,pagerduty,service',$_GET['service_name']);
}
$admin_config = get_config_by_name('alert,admins');
if (strcasecmp($admin_config[0]['config_value'],"true") == 0) {
$admin_checked = 'checked';
} else {
$admin_checked = '';
}
$read_config = get_config_by_name('alert,globals');
if (strcasecmp($read_config[0]['config_value'],"true") == 0) {
$read_checked = 'checked';
} else {
$read_checked = '';
}
$default_only_config = get_config_by_name('alert,default_only');
if (strcasecmp($default_only_config[0]['config_value'],"true") == 0) {
$default_only_checked = 'checked';
} else {
$default_only_checked = '';
}
$default_mail_config = get_config_by_name('alert,default_mail');
if (isset($config['base_url'])) {
$callback = $config['base_url'].'/'.$_SERVER['REQUEST_URI'].'/';
} else {
$callback = get_url().'/';
}
$callback = urlencode($callback);
echo '
<div class="container-fluid">
<div class="row">
<div class="col-sm-12">
<form class="form-horizontal">
<div class="form-group">
<label for="admins" class="col-sm-4 control-label">'.$admin_config[0]['config_desc'].': </label>
<div class="col-sm-8">
<input id="admins" type="checkbox" name="global-config-check" '.$admin_checked.' data-on-text="Yes" data-off-text="No" data-size="small" data-config_id="'.$admin_config[0]['config_id'].'">
</div>
</div>
<div class="form-group">
<label for="globals" class="col-sm-4 control-label">'.$read_config[0]['config_desc'].': </label>
<div class="col-sm-8">
<input id="globals" type="checkbox" name="global-config-check" '.$read_checked.' data-on-text="Yes" data-off-text="No" data-size="small" data-config_id="'.$read_config[0]['config_id'].'">
</div>
</div>
<div class="form-group">
<label for="default_only" class="col-sm-4 control-label">'.$default_only_config[0]['config_desc'].': </label>
<div class="col-sm-8">
<input id="default_only" type="checkbox" name="global-config-check" '.$default_only_checked.' data-on-text="Yes" data-off-text="No" data-size="small" data-config_id="'.$default_only_config[0]['config_id'].'">
</div>
</div>
<div class="form-group">
<label for="default_mail" class="col-sm-4 control-label">'.$default_mail_config[0]['config_desc'].': </label>
<div class="col-sm-8">
<input id="default_mail" type="text" name="global-config-input" value"'.$default_mail_config[0]['config_value'].'" data-config_id="'.$default_mail_config[0]['config_id'].'">
</div>
</div>
<div class="form-group">
<div class="col-sm-8">
<a href="https://connect.pagerduty.com/connect?vendor=2fc7c9f3c8030e74aae6&callback='.$callback.'"><img src="images/pd_connect_button.png" width="202" height="36" alt="Connect to PagerDuty"></a>
</div>
</div>
</form>
</div>
</div>
</div>
';
?>
<form>
<div class="form-group">
<label for="
</div>
</form>
<script>
$("[name='global-config-check']").bootstrapSwitch('offColor','danger');
$('input[name="global-config-check"]').on('switchChange.bootstrapSwitch', function(event, state) {
event.preventDefault();
var config_id = $(this).data("config_id");
$.ajax({
type: 'POST',
url: '/ajax_form.php',
data: {type: "update-config-item", config_id: config_id, config_value: state},
dataType: "json",
success: function (data) {
if (data.status == 'ok') {
$("#message").html('<div class="alert alert-info">' + data.message + '</div>');
} else {
$("#message").html('<div class="alert alert-info">' + data.message + '</div>');
}
},
error: function () {
$("#message").html('<div class="alert alert-info">An error occurred.</div>');
}
});
});
</script>

View File

@@ -1 +1,2 @@
CREATE TABLE `config` ( `config_id` int(11) NOT NULL AUTO_INCREMENT, `config_name` varchar(255) NOT NULL, `config_value` varchar(255) NOT NULL, `config_default` varchar(255) NOT NULL, `config_type` enum('array','single','multi-array','single-array') NOT NULL DEFAULT 'single', `config_desc` varchar(100) NOT NULL, `config_group` varchar(50) NOT NULL, `config_sub_group` varchar(50) NOT NULL, `config_hidden` enum('0','1') NOT NULL DEFAULT '0', `config_disabled` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`config_id`) ) ENGINE=InnoDB AUTO_INCREMENT=437 DEFAULT CHARSET=latin1;
CREATE TABLE `config` ( `config_id` int(11) NOT NULL AUTO_INCREMENT, `config_name` varchar(255) NOT NULL, `config_value` varchar(512) NOT NULL, `config_default` varchar(512) NOT NULL, `config_type` enum('array','single','multi-array','single-array') NOT NULL DEFAULT 'single', `config_desc` varchar(100) NOT NULL, `config_form` text NOT NULL, `config_group` varchar(50) NOT NULL, `config_group_order` int(11) NOT NULL, `config_sub_group` varchar(50) NOT NULL, `config_sub_group_order` int(11) NOT NULL, `config_hidden` enum('0','1') NOT NULL DEFAULT '0', `config_disabled` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`config_id`) ENGINE=InnoDB AUTO_INCREMENT=428 DEFAULT CHARSET=latin1;
INSERT INTO `config` VALUES (405,'alert,macros,rule,now','NOW()','NOW()','single-array','Time macro','text:','alerting',100,'macros',10,'0','0'),(406,'alert,macros,rule,past_5m','DATE_SUB(NOW(),INTERVAL 5 MINUTE)','DATE_SUB(NOW(),INTERVAL 5 MINUTE)','single-array','Time macro','text:','alerting',100,'macros',10,'0','0'),(407,'alert,macros,rule,past_10m','DATE_SUB(NOW(),INTERVAL 10 MINUTE)','DATE_SUB(NOW(),INTERVAL 10 MINUTE)','single-array','Time macro','text:','alerting',100,'macros',10,'0','0'),(408,'alert,macros,rule,past_15m','DATE_SUB(NOW(),INTERVAL 15 MINUTE)','DATE_SUB(NOW(),INTERVAL 10 MINUTE)','single-array','Time macro','text:','alerting',100,'macros',10,'0','0'),(409,'alert,macros,rule,past_30m','DATE_SUB(NOW(),INTERVAL 30 MINUTE)','DATE_SUB(NOW(),INTERVAL 10 MINUTE)','single-array','Time macro','text:','alerting',100,'macros',10,'0','0'),(410,'alert,macros,rule,past_60m','DATE_SUB(NOW(),INTERVAL 60 MINUTE)','DATE_SUB(NOW(),INTERVAL 10 MINUTE)','single-array','Time macro','text:','alerting',100,'macros',10,'0','0'),(411,'alert,macros,rule,device','(%devices.disabled = \"0\" && %devices.ignore = \"0\")','(%devices.disabled = \"0\" && %devices.ignore = \"0\")','single-array','Device macro','text:','alerting',100,'macros',10,'0','0'),(412,'alert,macros,rule,device_up','(%devices.status = \"1\" && %macros.device)','(%devices.status = \"1\" && %macros.device)','single-array','Device macro','text:','alerting',100,'macros',10,'0','0'),(413,'alert,macros,rule,device_down','(%devices.status = \"0\" && %macros.device)','(%devices.status = \"0\" && %macros.device)','single-array','Device macro','text:','alerting',100,'macros',10,'0','0'),(414,'alert,macros,rule,port','(%ports.deleted = \\\"0\\\" && %ports.ignore = \\\"0\\\" && %ports.disabled = \\\"0\\\")','(%ports.deleted = \"0\" && %ports.ignore = \"0\" && %ports.disabled = \"0\")','single-array','Port macro','text:','alerting',100,'macros',10,'0','0'),(415,'alert,macros,rule,port_up','(%ports.ifOperStatus = \"up\" && %ports.ifAdminStatus = \"up\" && %macros.port)','(%ports.ifOperStatus = \"up\" && %ports.ifAdminStatus = \"up\" && %macros.port)','single-array','Port macro','text:','alerting',100,'macros',10,'0','0'),(416,'alert,macros,rule,port_down','(%ports.ifOperStatus = \\\"down\\\" && %ports.ifAdminStatus != \\\"down\\\" && %macros.port)','(%ports.ifOperStatus = \"down\" && %ports.ifAdminStatus != \"down\" && %macros.port)','single-array','Port macro','text:','alerting',100,'macros',10,'0','0'),(417,'alert,macros,rule,port_usage_perc','((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100','((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100','single-array','Port macro','text:','alerting',100,'macros',10,'0','0'),(418,'alert,transports,dummy','false','false','single-array','Transports','radio:false,true','alerting',100,'transports',8,'0','0'),(419,'alert,transports,mail','false','false','single-array','Transports','radio:false,true','alerting',100,'transports',8,'0','0'),(420,'alert,transports,irc','false','false','single-array','Transports','radio:false,true','alerting',100,'transports',8,'0','0'),(421,'alert,globals','false','false','single-array','Issue alerts to global-read users','radio:false,true','alerting',100,'global',5,'0','0'),(422,'alert,admins','true','false','single-array','Issue alerts to admins','radio:false,true','alerting',100,'global',5,'0','0'),(423,'alert,default_only','true','false','single-array','Alert settings','radio:false,true','alerting',100,'global',5,'0','0'),(424,'alert,default_mail','','','single-array','Alert settings','text:','alerting',100,'global',5,'0','0'),(425,'alert,transports,pagerduty','false','false','single-array','Pagerduty transport','','alerting',100,'transports',8,'0','0'),(426,'alert,pagerduty,account','false','false','single-array','Pagerduty account name','','alerting',100,'transports',8,'0','0'),(427,'alert,pagerduty,service','false','false','single-array','Pagerduty service name','','alerting',100,'transports',8,'0','0');