From 860b229fe00998d2dd2d020d7dc847f99e709c26 Mon Sep 17 00:00:00 2001
From: Daniil Baturin <daniil@baturin.org>
Date: Mon, 14 May 2018 06:10:04 +0200
Subject: T564: initial implementation of the DNS forwarding op mode commands.

---
 Makefile                                      |  1 +
 op-mode-definitions/dns-forwarding.xml        | 39 +++++++++++++++++++++++++++
 src/op-mode/vyos-dns-forwarding-statistics.py | 24 +++++++++++++++++
 src/op-mode/vyos-restart-dns-forwarding.sh    |  8 ++++++
 4 files changed, 72 insertions(+)
 create mode 100644 op-mode-definitions/dns-forwarding.xml
 create mode 100755 src/op-mode/vyos-dns-forwarding-statistics.py
 create mode 100755 src/op-mode/vyos-restart-dns-forwarding.sh

diff --git a/Makefile b/Makefile
index ad7107d3d..c328d6a8d 100644
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,7 @@ op_mode_definitions:
 
 	# XXX: delete top level op mode node.def's that now live in other packages
 	rm -f $(OP_TMPL_DIR)/show/node.def
+	rm -f $(OP_TMPL_DIR)/show/dns/node.def
 	rm -f $(OP_TMPL_DIR)/reset/node.def
 	rm -f $(OP_TMPL_DIR)/restart/node.def
 
diff --git a/op-mode-definitions/dns-forwarding.xml b/op-mode-definitions/dns-forwarding.xml
new file mode 100644
index 000000000..96fa1a6f4
--- /dev/null
+++ b/op-mode-definitions/dns-forwarding.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+
+<interfaceDefinition>
+  <node name="show">
+    <children>
+      <node name="dns">
+        <children>
+          <node name="forwarding">
+            <properties>
+              <help>Show DNS forwarding information</help>
+            </properties>
+            <children>
+              <leafNode name="statistics">
+                <properties>
+                  <help>Show DNS forwarding statistics</help>
+                </properties>
+                <command>${vyos_bindir}/vyos-dns-forwarding-statistics.py</command>
+              </leafNode>
+            </children>
+          </node>
+        </children>
+      </node>
+    </children>
+  </node>
+  <node name="restart">
+    <children>
+      <node name="dns">
+        <children>
+          <leafNode name="forwarding">
+            <properties>
+              <help>Restart DNS forwarding service</help>
+            </properties>
+            <command>${vyos_bindir}/vyos-restart-dns-forwarding.sh</command>
+          </leafNode>
+         </children>
+      </node>
+    </children>
+  </node>
+</interfaceDefinition>
diff --git a/src/op-mode/vyos-dns-forwarding-statistics.py b/src/op-mode/vyos-dns-forwarding-statistics.py
new file mode 100755
index 000000000..3d1e30aee
--- /dev/null
+++ b/src/op-mode/vyos-dns-forwarding-statistics.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+
+import subprocess
+import jinja2
+
+PDNS_CMD='/usr/bin/rec_control'
+
+OUT_TMPL_SRC = """
+DNS forwarding statistics:
+
+Cache entries: {{ cache_entries -}}
+Cache size: {{ cache_size }} kbytes
+
+"""
+
+
+if __name__ == '__main__':
+    data = {}
+
+    data['cache_entries'] = subprocess.check_output([PDNS_CMD, 'get cache-entries']).decode()
+    data['cache_size'] = "{0:.2f}".format( int(subprocess.check_output([PDNS_CMD, 'get cache-bytes']).decode()) / 1024 )
+
+    tmpl = jinja2.Template(OUT_TMPL_SRC)
+    print(tmpl.render(data))
diff --git a/src/op-mode/vyos-restart-dns-forwarding.sh b/src/op-mode/vyos-restart-dns-forwarding.sh
new file mode 100755
index 000000000..12106fcc1
--- /dev/null
+++ b/src/op-mode/vyos-restart-dns-forwarding.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if cli-shell-api exists service dns forwarding; then
+    echo "Restarting the DNS forwarding service"
+    systemctl restart pdns-recursor
+else
+    echo "DNS forwarding is not configured"
+fi
-- 
cgit v1.2.3