#!/usr/bin/lua

require "os"
require "io"
require "uci"
local fs = require "nixio.fs"

if fs.access("/var/run/olsrd.pid") or fs.access("/var/run/olsrd4.pid") then
	local stamp, intv
	local x = uci.cursor()

	x:foreach("olsrd", "LoadPlugin",
		function(s)
			if s.library == "olsrd_watchdog" then
				if s.ignore == "1" then
					do return end
				end
				intv  = tonumber(s.interval)
				stamp = s.file
			end
		end)

	if intv and fs.access(stamp) then
		local systime = os.time()
		local wdgtime = tonumber(io.lines(stamp)())

		if not wdgtime or ( systime - wdgtime ) > ( intv * 2 ) then
			os.execute("logger -t 'OLSR watchdog' 'Process died - restarting!'")
			local tnls = io.popen("ip tunnel show | cut -d : -f 1")
			while true do
				tnl = tnls:read("*line")
				if tnl == nil then break end
				if string.find(tnl, "tnl_") == 1 then
					os.execute(string.format("logger -t 'OLSR watchdog' 'Deleting stale tunnel %s'", tnl))
					os.execute(string.format("ip link del %s", tnl))
				end
			end
			os.execute("/etc/init.d/olsrd restart")
		end
	end
end