From c460732bbbf12a04eeb50769f9e265bbf3e793a5 Mon Sep 17 00:00:00 2001 From: Fabian Franz Date: Sat, 22 Jul 2017 18:02:20 +0200 Subject: [PATCH] add logging to quagga (#206) * add logging to quagga * sed -i "s/zebra.log/quagga.log/g" files * add log viewer * fix indent; fix typo; upcase first char --- .../Quagga/Api/DiagnosticsController.php | 6 ++- .../OPNsense/Quagga/DiagnosticsController.php | 5 +++ .../OPNsense/Quagga/forms/general.xml | 26 ++++++++++++- .../app/models/OPNsense/Quagga/General.xml | 38 +++++++++++++++++++ .../app/models/OPNsense/Quagga/Menu/Menu.xml | 1 + .../mvc/app/views/OPNsense/Quagga/log.volt | 24 ++++++++++++ .../src/opnsense/scripts/quagga/quagga.rb | 18 +++++++-- .../src/opnsense/scripts/quagga/setup.sh | 5 +++ .../conf/actions.d/actions_quagga.conf | 7 ++++ .../templates/OPNsense/Quagga/bgpd.conf | 8 ++++ .../templates/OPNsense/Quagga/ospf6d.conf | 8 ++++ .../templates/OPNsense/Quagga/ospfd.conf | 8 ++++ .../templates/OPNsense/Quagga/ripd.conf | 8 ++++ .../templates/OPNsense/Quagga/zebra.conf | 8 ++++ 14 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/log.volt diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/DiagnosticsController.php b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/DiagnosticsController.php index ea39a67a5..8cb4ee062 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/DiagnosticsController.php +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/DiagnosticsController.php @@ -122,12 +122,16 @@ class DiagnosticsController extends ApiControllerBase private function get_general_information($name) { $backend = new Backend(); - return array("response" => json_decode(trim($backend->configdRun("quagga general-$name")))); + return array("response" => json_decode(trim($backend->configdRun("quagga general-$name")), true)); } public function generalroutesAction() { return $this->get_general_information('routes'); } + public function logAction() + { + return $this->get_general_information('log')['response']['general_log']; + } public function generalroutes6Action() { return $this->get_general_information('routes6'); diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/DiagnosticsController.php b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/DiagnosticsController.php index 2df01e100..53ed82e2a 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/DiagnosticsController.php +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/DiagnosticsController.php @@ -47,4 +47,9 @@ class DiagnosticsController extends \OPNsense\Base\IndexController $this->view->title = gettext("Diagnostics: General"); $this->view->pick('OPNsense/Quagga/diagnosticsgeneral'); } + public function logAction() + { + $this->view->title = gettext("Diagnostics: Log"); + $this->view->pick('OPNsense/Quagga/log'); + } } diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/general.xml b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/general.xml index 814783edb..00c3f64ee 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/general.xml +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/general.xml @@ -1,8 +1,32 @@
general.enabled - + checkbox This will activate the routing service. + + general.enablelogfile + + checkbox + If you check this, a log file will be written to disk. + + + general.logfilelevel + + dropdown + This is the detail level of the log. A higher level means more data is logged. + + + general.enablesyslog + + checkbox + Syslog is a service which is made to collect log messages from different software and maybe to a central logging server. Check this box if you have such a setup. + + + general.sysloglevel + + dropdown + This is the detail level of the log. A higher level means more data is logged. +
diff --git a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml index 31bb3778f..5bb1c1ddc 100644 --- a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml +++ b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml @@ -6,5 +6,43 @@ 0 Y + + 0 + Y + + + Y + N + notifications + + Critical + Emergencies + Errors + Alerts + Warnings + Notifications + Informational + Debugging + + + + 0 + Y + + + Y + N + notifications + + Critical + Emergencies + Errors + Alerts + Warnings + Notifications + Informational + Debugging + + diff --git a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/Menu/Menu.xml b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/Menu/Menu.xml index 721bfc81e..d7da7259a 100644 --- a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/Menu/Menu.xml +++ b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/Menu/Menu.xml @@ -11,6 +11,7 @@ + diff --git a/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/log.volt b/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/log.volt new file mode 100644 index 000000000..50d35691c --- /dev/null +++ b/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/log.volt @@ -0,0 +1,24 @@ +
+ + + + + + + + + +
{{ lang._('Date') }}{{ lang._('Time') }}{{ lang._('Service') }}{{ lang._('Message') }}
+
+ + + diff --git a/net/quagga/src/opnsense/scripts/quagga/quagga.rb b/net/quagga/src/opnsense/scripts/quagga/quagga.rb index 9a386e84d..c507c97c1 100755 --- a/net/quagga/src/opnsense/scripts/quagga/quagga.rb +++ b/net/quagga/src/opnsense/scripts/quagga/quagga.rb @@ -119,7 +119,7 @@ class General if line.length > 10 code, network, ad, metric, via, direct, interface, time = line.scan(entry_regex).first code = code.split('').map {|c| {short: c, long: meanings[c]}} - entries << {code: code, network: (network || direct), ad: ad, metric: metric, interface: interface, time: time } + entries << {code: code, network: (network || direct), ad: ad, via: via, metric: metric, interface: interface, time: time } end end entries @@ -128,6 +128,15 @@ class General def routes6 routes(true) end + + def log + File.read('/var/log/quagga.log').lines.select {|l| l.strip.length > 10}.map do |line| + date, time, service, message = line.split(' ', 4) + date = date.split('/').reverse.join(".") # format dd.mm.yyyy + service = service.split(':').first if service + {date: date, time:time, service: service, message: message } + end + end end class OSPF @@ -433,7 +442,7 @@ class OSPFv3 @vtysh = sh end - def overview + def overview lines = @vtysh.execute("show ipv6 ospf6").lines overview = {} while line = lines.shift&.strip @@ -647,7 +656,7 @@ end require 'optparse' options = {} -supported_sections = %w{general ospf} + OptionParser.new do |opts| opts.banner = "Usage: #{__FILE__} -s section [section specific params]" #### OSPFv2 @@ -689,6 +698,9 @@ OptionParser.new do |opts| opts.on("-6", "--general-routes6", "Print Routing Table (IPv6)") do |od| options[:general_routes6] = od end + opts.on("-l", "--general-log", "Print Logs") do |od| + options[:general_log] = od + end ### BGP opts.on("-B", "--bgp-overview", "Print an overview of BGP") do |od| options[:bgp_overview] = od diff --git a/net/quagga/src/opnsense/scripts/quagga/setup.sh b/net/quagga/src/opnsense/scripts/quagga/setup.sh index 0c6d492f2..b89b136df 100755 --- a/net/quagga/src/opnsense/scripts/quagga/setup.sh +++ b/net/quagga/src/opnsense/scripts/quagga/setup.sh @@ -14,3 +14,8 @@ chmod 750 /usr/local/etc/quagga # ensure that quagga can read the configuration files chown -R $user:$group /usr/local/etc/quagga chown -R $user:$group /var/run/quagga + +# logfile (if used) +touch /var/log/quagga.log +chown $user:$group /var/log/quagga.log + diff --git a/net/quagga/src/opnsense/service/conf/actions.d/actions_quagga.conf b/net/quagga/src/opnsense/service/conf/actions.d/actions_quagga.conf index 7dca79606..6e5b72587 100644 --- a/net/quagga/src/opnsense/service/conf/actions.d/actions_quagga.conf +++ b/net/quagga/src/opnsense/service/conf/actions.d/actions_quagga.conf @@ -112,6 +112,13 @@ parameters: type:script_output message: Print IPv6 Routing Table +[general-log] +command:/usr/local/opnsense/scripts/quagga/quagga.rb --general-log +parameters: +type:script_output +message: Print IPv6 Routing Table + + [general-runningconfig] command:/usr/local/bin/vtysh -c "show run" parameters: diff --git a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf index 3783dfaba..a1085dd9a 100644 --- a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf +++ b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf @@ -4,6 +4,14 @@ ! Zebra configuration saved from vty ! 2017/03/03 20:21:04 ! +{% if helpers.exists('OPNsense.quagga.general') %} +{% if helpers.exists('OPNsense.quagga.general.enablelogfile') and OPNsense.quagga.general.enablelogfile == '1' %} +log file /var/log/quagga.log {{ OPNsense.quagga.general.logfilelevel }} +{% endif %} +{% if helpers.exists('OPNsense.quagga.general.enablesyslog') and OPNsense.quagga.general.enablesyslog == '1' %} +log syslog {{ OPNsense.quagga.general.sysloglevel }} +{% endif %} +{% endif %} ! ! ! diff --git a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf index c852d7781..20594ac19 100644 --- a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf +++ b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf @@ -7,6 +7,14 @@ ! Zebra configuration saved from vty ! 2017/03/03 20:21:04 ! +{% if helpers.exists('OPNsense.quagga.general') %} +{% if helpers.exists('OPNsense.quagga.general.enablelogfile') and OPNsense.quagga.general.enablelogfile == '1' %} +log file /var/log/quagga.log {{ OPNsense.quagga.general.logfilelevel }} +{% endif %} +{% if helpers.exists('OPNsense.quagga.general.enablesyslog') and OPNsense.quagga.general.enablesyslog == '1' %} +log syslog {{ OPNsense.quagga.general.sysloglevel }} +{% endif %} +{% endif %} ! ! ! diff --git a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf index c10c5ac11..0f2b9faed 100644 --- a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf +++ b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf @@ -7,6 +7,14 @@ ! Zebra configuration saved from vty ! 2017/03/03 20:21:04 ! +{% if helpers.exists('OPNsense.quagga.general') %} +{% if helpers.exists('OPNsense.quagga.general.enablelogfile') and OPNsense.quagga.general.enablelogfile == '1' %} +log file /var/log/quagga.log {{ OPNsense.quagga.general.logfilelevel }} +{% endif %} +{% if helpers.exists('OPNsense.quagga.general.enablesyslog') and OPNsense.quagga.general.enablesyslog == '1' %} +log syslog {{ OPNsense.quagga.general.sysloglevel }} +{% endif %} +{% endif %} ! ! ! diff --git a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ripd.conf b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ripd.conf index 5e784b300..1ba199403 100644 --- a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ripd.conf +++ b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ripd.conf @@ -4,6 +4,14 @@ ! Zebra configuration saved from vty ! 2017/03/26 22:40:16 ! +{% if helpers.exists('OPNsense.quagga.general') %} +{% if helpers.exists('OPNsense.quagga.general.enablelogfile') and OPNsense.quagga.general.enablelogfile == '1' %} +log file /var/log/quagga.log {{ OPNsense.quagga.general.logfilelevel }} +{% endif %} +{% if helpers.exists('OPNsense.quagga.general.enablesyslog') and OPNsense.quagga.general.enablesyslog == '1' %} +log syslog {{ OPNsense.quagga.general.sysloglevel }} +{% endif %} +{% endif %} ! router zebra no redistribute rip diff --git a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/zebra.conf b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/zebra.conf index 1ee6ba8f6..fb9535338 100644 --- a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/zebra.conf +++ b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/zebra.conf @@ -1,7 +1,14 @@ +{% if helpers.exists('OPNsense.quagga.general') %} ! ! Zebra configuration saved from vty ! 2017/03/03 20:21:04 ! +{% if helpers.exists('OPNsense.quagga.general.enablelogfile') and OPNsense.quagga.general.enablelogfile == '1' %} +log file /var/log/quagga.log {{ OPNsense.quagga.general.logfilelevel }} +{% endif %} +{% if helpers.exists('OPNsense.quagga.general.enablesyslog') and OPNsense.quagga.general.enablesyslog == '1' %} +log syslog {{ OPNsense.quagga.general.sysloglevel }} +{% endif %} ! ! ! @@ -12,3 +19,4 @@ ipv6 forwarding ! line vty ! +{% endif %}