diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md
index a549684208..62d3e7bf2f 100644
--- a/doc/Extensions/Alerting.md
+++ b/doc/Extensions/Alerting.md
@@ -8,6 +8,7 @@ Table of Content:
- [Templates](#templates)
- [Syntax](#templates-syntax)
- [Examples](#templates-examples)
+ - [Included](#templates-included)
- [Transports](#transports)
- [E-Mail](#transports-email)
- [API](#transports-api)
@@ -35,6 +36,8 @@ Table of Content:
- [Device](#macros-device)
- [Port](#macros-port)
- [Time](#macros-time)
+ - [Sensors](#macros-sensors)
+ - [Misc](#macros-misc)
- [Additional Options](#extra)
@@ -151,6 +154,16 @@ Conditional formatting example, will display a link to the host in email or just
Note the use of double-quotes. Single quotes (`'`) in templates will be escaped (replaced with `\'`) in the output and should therefore be avoided.
+## Included
+
+We include a few templates for you to use, these are specific to the type of alert rules you are creating. For example if you create a rule that would alert on BGP sessions then you can
+assign the BGP template to this rule to provide more information.
+
+The included templates are:
+
+ - BGP Sessions
+ - Ports
+ - Temperature
# Transports
@@ -671,7 +684,9 @@ Description: Only select sensors that aren't ignored.
Source: `(%sensors.sensor_alert = 1)`
-## Packet Loss (Boolean)
+## Misc (Boolean)
+
+### Packet Loss
Entity: `(%macros.packet_loss_5m)`
@@ -685,6 +700,54 @@ Description: Packet loss % value for the device within the last 15 minutes.
Example: `%macros.packet_loss_15m` > 50
+### Ports in usage perc (Int)
+
+Entity: `((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100`
+
+Description: Port in used more than 50%
+
+Example: `%macros.port_in_usage_perc > 50
+
+### Ports out usage perc (Int)
+
+Entity: `((%ports.ifOutOctets_rate*8)/%ports.ifSpeed)*100`
+
+Description: Port out used more than 50%
+
+Example: `%macros.port_out_usage_perc > 50
+
+### Ports now down (Boolean)
+
+Entity: `%ports.ifOperStatus != %ports.ifOperStatus_prev && %ports.ifOperStatus_prev = "up" && %ports.ifAdminStatus = "up"`
+
+Description: Ports that were previously up and have now gone down.
+
+Example: `%macros.port_now_down = "1"`
+
+### Device component down [JunOS]
+
+Entity: `%sensors.sensor_class = "state" && %sensors.sensor_current != "6" && %sensors.sensor_type = "jnxFruState" && %sensors.sensor_current != "2"`
+
+Description: Device component is down such as Fan, PSU, etc for JunOS devices.
+
+Example: `%macros.device_component_down_junos = "1"`
+
+### Device component down [Cisco]
+
+Entity: `%sensors.sensor_current != "1" && %sensors.sensor_current != "5" && %sensors.sensor_type ~ "^cisco.*State$"`
+
+Description: Device component is down such as Fan, PSU, etc for Cisco devices.
+
+Example: `%macros.device_component_down_cisco = "1"`
+
+### PDU over amperage [APC]
+
+Entity: `%sensors.sensor_class = "current" && %sensors.sensor_descr = "Bank Total" && %sensors.sensor_current > %sensors.sensor_limit && %devices.os = "apc"`
+
+Description: APC PDU over amperage
+
+Example: `%macros.pdu_over_amperage_apc = "1"`
+
# Additional Options
Here are some of the other options available when adding an alerting rule:
diff --git a/html/includes/print-alert-rules.php b/html/includes/print-alert-rules.php
index 8d93e23c09..ad0eb7a56c 100644
--- a/html/includes/print-alert-rules.php
+++ b/html/includes/print-alert-rules.php
@@ -75,6 +75,14 @@ if (isset($_POST['create-default'])) {
'disabled' => 0,
'name' => 'Sensor under limit',
);
+ $default_rules[] = array(
+ 'device_id' => '-1',
+ 'rule' => '%services.service_status != "0"',
+ 'severity' => 'critical',
+ 'extra' => '{"mute":false,"count":"-1","delay":"300"}',
+ 'disabled' => 0,
+ 'name' => 'Service up/down',
+ );
foreach ($default_rules as $add_rule) {
dbInsert($add_rule, 'alert_rules');
}
diff --git a/sql-schema/123.sql b/sql-schema/123.sql
new file mode 100644
index 0000000000..6a7d4b3815
--- /dev/null
+++ b/sql-schema/123.sql
@@ -0,0 +1,9 @@
+INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.port_in_usage_perc','((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100','((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100','Ports using more than X perc of capacity IN','alerting',0,'macros',0,1,0);
+INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.port_out_usage_perc','((%ports.ifOutOctets_rate*8)/%ports.ifSpeed)*100','((%ports.ifOutOctets_rate*8)/%ports.ifSpeed)*100','Ports using more than X perc of capacity OUT','alerting',0,'macros',0,1,0);
+INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.port_now_down','%ports.ifOperStatus != %ports.ifOperStatus_prev && %ports.ifOperStatus_prev = "up" && %ports.ifAdminStatus = "up"','%ports.ifOperStatus != %ports.ifOperStatus_prev && %ports.ifOperStatus_prev = "up" && %ports.ifAdminStatus = "up"','Port has gone down','alerting',0,'macros',0,1,0);
+INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.device_component_down_junos','%sensors.sensor_class = "state" && %sensors.sensor_current != "6" && %sensors.sensor_type = "jnxFruState" && %sensors.sensor_current != "2"','%sensors.sensor_class = "state" && %sensors.sensor_current != "6" && %sensors.sensor_type = "jnxFruState" && %sensors.sensor_current != "2"','Device Component down [JunOS]','alerting',0,'macros',0,1,0);
+INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.device_component_down_cisco','%sensors.sensor_current != "1" && %sensors.sensor_current != "5" && %sensors.sensor_type ~ "^cisco.*State$"','%sensors.sensor_current != "1" && %sensors.sensor_current != "5" && %sensors.sensor_type ~ "^cisco.*State$"','Device Component down [Cisco]','alerting',0,'macros',0,1,0);
+INSERT INTO `config` (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) VALUES ('alert.macros.rule.pdu_over_amperage_apc','%sensors.sensor_class = "current" && %sensors.sensor_descr = "Bank Total" && %sensors.sensor_current > %sensors.sensor_limit && %devices.os = "apc"','%sensors.sensor_class = "current" && %sensors.sensor_descr = "Bank Total" && %sensors.sensor_current > %sensors.sensor_limit && %devices.os = "apc"','PDU Over Amperage [APC]','alerting',0,'macros',0,1,0);
+INSERT INTO `alert_templates` (`rule_id`, `name`, `template`, `title`, `title_rec`) VALUES (',','BGP Sessions.','%title\\r\\n\nSeverity: %severity\\r\\n\n{if %state == 0}Time elapsed: %elapsed\\r\\n{/if}\nTimestamp: %timestamp\\r\\n\nUnique-ID: %uid\\r\\n\nRule: {if %name}%name{else}%rule{/if}\\r\\n\n{if %faults}Faults:\\r\\n\n{foreach %faults}\n#%key: %value.string\\r\\n\nPeer: %value.astext\\r\\n\nPeer IP: %value.bgpPeerIdentifier\\r\\n\nPeer AS: %value.bgpPeerRemoteAs\\r\\n\nPeer EstTime: %value.bgpPeerFsmEstablishedTime\\r\\n\nPeer State: %value.bgpPeerState\\r\\n\n{/foreach}\n{/if}','','');
+INSERT INTO `alert_templates` (`rule_id`, `name`, `template`, `title`, `title_rec`) VALUES (',','Ports','%title\\r\\n\nSeverity: %severity\\r\\n\n{if %state == 0}Time elapsed: %elapsed{/if}\nTimestamp: %timestamp\nUnique-ID: %uid\nRule: {if %name}%name{else}%rule{/if}\\r\\n\n{if %faults}Faults:\\r\\n\n{foreach %faults}\\r\\n\n#%key: %value.string\\r\\n\nPort: %value.ifName\\r\\n\nPort Name: %value.ifAlias\\r\\n\nPort Status: %value.message\\r\\n\n{/foreach}\\r\\n\n{/if}\n','','');
+INSERT INTO `alert_templates` (`rule_id`, `name`, `template`, `title`, `title_rec`) VALUES (',','Temperature','%title\\r\\n\nSeverity: %severity\\r\\n\n{if %state == 0}Time elapsed: %elapsed{/if}\\r\\n\nTimestamp: %timestamp\\r\\n\nUnique-ID: %uid\\r\\n\nRule: {if %name}%name{else}%rule{/if}\\r\\n\n{if %faults}Faults:\\r\\n\n{foreach %faults}\\r\\n\n#%key: %value.string\\r\\n\nTemperature: %value.sensor_current\\r\\n\nPrevious Measurement: %value.sensor_prev\\r\\n\n{/foreach}\\r\\n\n{/if}','','');