summaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
Diffstat (limited to 'extra')
-rw-r--r--extra/nagios_check_failing_nodes.rb22
-rw-r--r--extra/oxidized.service12
-rw-r--r--extra/syslog.rb52
3 files changed, 69 insertions, 17 deletions
diff --git a/extra/nagios_check_failing_nodes.rb b/extra/nagios_check_failing_nodes.rb
index 1c81f66..27a5c66 100644
--- a/extra/nagios_check_failing_nodes.rb
+++ b/extra/nagios_check_failing_nodes.rb
@@ -6,20 +6,30 @@ require 'open-uri'
require 'json'
critical = false
+pending = false
critical_nodes = []
+pending_nodes = []
json = JSON.load(open("http://localhost:8888/nodes.json"))
json.each do |node|
- if node['last']['status'] != 'success'
- critical_nodes << node['name']
- critical = true
+ if not node['last'].nil?
+ if node['last']['status'] != 'success'
+ critical_nodes << node['name']
+ critical = true
+ end
+ else
+ pending_nodes << node['name']
+ pending = true
end
end
-if critical
- puts 'Unable to backup: ' + critical_nodes.join(' ')
+if pending
+ puts '[WARN] Pending backup: ' + pending_nodes.join(',')
+ exit 1
+elsif critical
+ puts '[CRIT] Unable to backup: ' + critical_nodes.join(',')
exit 2
else
- puts 'Backup of all nodes completed successfully.'
+ puts '[OK] Backup of all nodes completed successfully.'
exit 0
end
diff --git a/extra/oxidized.service b/extra/oxidized.service
new file mode 100644
index 0000000..65063b7
--- /dev/null
+++ b/extra/oxidized.service
@@ -0,0 +1,12 @@
+#For debian 8 put it in /lib/systemd/system/
+#and call it with systemctl start oxidized.service
+
+[Unit]
+Description=Oxidized - Network Device Configuration Backup Tool
+
+[Service]
+ExecStart=/usr/local/bin/oxidized
+User=root
+
+[Install]
+WantedBy=multi-user.target
diff --git a/extra/syslog.rb b/extra/syslog.rb
index 2af83a0..e364cf9 100644
--- a/extra/syslog.rb
+++ b/extra/syslog.rb
@@ -8,10 +8,18 @@
# set system syslog host SERVER interactive-commands notice
# set system syslog host SERVER match "^mgd\[[0-9]+\]: UI_COMMIT: .*"
-# Ports < 1024 need extra privileges, use a port higher than this by passing the first argument a number
-# To use the default port for syslog (514) you shouldnt pass an argument, but you will need to allow this with:
+# Ports < 1024 need extra privileges, use a port higher than this by setting the port option in your oxidized config file.
+# To use the default port for syslog (514) you shouldn't pass an argument, but you will need to allow this with:
# sudo setcap 'cap_net_bind_service=+ep' /usr/bin/ruby
+# Config options are:
+# syslogd
+# port (Default = 514)
+# file (Default = messages)
+# resolve (Default = true)
+
+# To stop the resolution of IP's to PTR you can set resolve to false
+
# exit if fork ## TODO: proper daemonize
require 'socket'
@@ -19,26 +27,44 @@ require 'resolv'
require_relative 'rest_client'
module Oxidized
+
+ require 'asetus'
+ class Config
+ Root = File.join ENV['HOME'], '.config', 'oxidized'
+ end
+
+ CFGS = Asetus.new :name=>'oxidized', :load=>false, :key_to_s=>true
+ CFGS.default.syslogd.port = 514
+ CFGS.default.syslogd.file = 'messages'
+ CFGS.default.syslogd.resolve = true
+
+ begin
+ CFGS.load
+ rescue => error
+ raise InvalidConfig, "Error loading config: #{error.message}"
+ ensure
+ CFG = CFGS.cfg # convenienence, instead of Config.cfg.password, CFG.password
+ end
+
class SyslogMonitor
NAME_MAP = {
/(.*)\.ip\.tdc\.net/ => '\1',
/(.*)\.ip\.fi/ => '\1',
}
- PORT = 514
- FILE = 'messages'
MSG = {
:ios => /%SYS-(SW[0-9]+-)?5-CONFIG_I:/,
:junos => 'UI_COMMIT:',
+ :eos => /%SYS-5-CONFIG_I:/,
+ :nxos => /%VSHD-5-VSHD_SYSLOG_CONFIG_I:/,
}
class << self
- def udp port=PORT, listen=0
- port ||= PORT
+ def udp port=Oxidized::CFG.syslogd.port, listen=0
io = UDPSocket.new
io.bind listen, port
new io, :udp
end
- def file syslog_file=FILE
+ def file syslog_file=Oxidized::CFG.syslogd.file
io = open syslog_file, 'r'
io.seek 0, IO::SEEK_END
new io, :file
@@ -102,12 +128,16 @@ module Oxidized
end
def getname ip
- name = (Resolv.getname ip.to_s rescue ip)
- NAME_MAP.each { |re, sub| name.sub! re, sub }
- name
+ if Oxidized::CFG.syslogd.resolve == false
+ ip
+ else
+ name = (Resolv.getname ip.to_s rescue ip)
+ NAME_MAP.each { |re, sub| name.sub! re, sub }
+ name
+ end
end
end
end
-Oxidized::SyslogMonitor.udp ARGV[0]
+Oxidized::SyslogMonitor.udp
#Oxidized::SyslogMonitor.file '/var/log/poop'