module(..., package.seeall) -- Load libraries require("fs") require("procps") require("getopts") require("format") require("posix") require("daemoncontrol") require("validator") require("processinfo") -- Set variables local configfile = "/etc/conf.d/dnscache" local processname = "dnscache" local packagename = "dnscache" local baseurl = "/etc/dnscache/" local descr = { } -- ################################################################################ -- LOCAL FUNCTIONS local function process_status_text(procname) local t = procps.pidof(procname) if (t) and (#t > 0) then return "Enabled" else return "Disabled" end end local function humanreadable(value) local myvalue = tonumber(value) if not (myvalue) then return false end if ( myvalue > 1073741824 ) then myvalue=((myvalue/1073741824) - (myvalue/1073741824%0.1)) .. "G" elseif ( myvalue > 1048576 ) then myvalue=((myvalue/1048576) - (myvalue/1048576%0.1)) .. "M" elseif ( myvalue > 1024 ) then myvalue=((myvalue/1024) - (myvalue/1024%0.1)) .. "k" end return myvalue end -- ################################################################################ -- PUBLIC FUNCTIONS function startstop_service ( self, action ) local cmd = action.value local cmdresult,cmdmessage,cmderror,cmdaction = daemoncontrol.daemoncontrol(processname, cmd) action.descr=cmdmessage action.errtxt=cmderror return cmdresult,action end function getstatus() local status = {} local config = getconfig() local value, errtxt = processinfo.package_version(packagename) status.version = cfe({ name = "version", label="Program version", value=value, errtxt=errtxt, }) status.status = cfe({ name="status", label="Program status", value=process_status_text(processname), }) local autostart_sequense, autostart_errtxt = processinfo.process_botsequence(processname) status.autostart = cfe({ name="autostart", label="Autostart sequence", value=autostart_sequense, errtxt=autostart_errtxt, }) status.ip = cfe({ name="ip", label="Listening on", value=config.IP, }) status.cachesize = cfe({ name="cachesize", label="Cache size", value=humanreadable(config.CACHESIZE), }) return status end function get_logfile () local file = {} local cmdtxt = "grep ".. processname .. " /var/log/messages" local cmd, error = io.popen(cmdtxt ,r) local cmdoutput = cmd:read("*a") cmd:close() file["filename"] = cfe({ name="filename", label="File name", value=cmdtxt, }) file["filecontent"] = cfe({ type="longtext", name="filecontent", label="File content", value=cmdoutput, }) return file end function getconfig() if (fs.is_file(configfile)) then return getopts.getoptsfromfile(configfile) end return false end function get_filedetails(self,num) local path if (num == "2") then path = configfile2 else path = configfile end local file = {} local filedetails = {} local config = {} local filenameerrtxt if (path) and (fs.is_file(path)) then filedetails = fs.stat(path) config = getconfig(path) else config = {} config.filename = {} config["filename"]["errtxt"]="Config file '".. path .. "' is missing!" end file["filename" .. (num or "")] = cfe({ name="filename" .. (num or ""), label="File name", value=path, errtxt=filenameerrtxt }) file["filesize" .. (num or "")] = cfe({ name="filesize" .. (num or ""), label="File size", value=filedetails.size or 0, }) file["mtime" .. (num or "")] = cfe({ name="mtime" .. (num or ""), label="File date", value=filedetails.mtime or "---", }) file["filecontent" .. (num or "")] = cfe({ type="longtext", name="filecontent" .. (num or ""), label="File content", value=fs.read_file(path), }) -- Sum all errors into one cfe local sumerrors = "" for k,v in pairs(config) do if (config[k]) and (config[k]["errtxt"]) and (config[k]["errtxt"] ~= "") then sumerrors = sumerrors .. config[k]["errtxt"] .. "\n" end end if (sumerrors ~= "") then file["sumerrors" .. (num or "")] = cfe ({ name="sumerrors" .. (num or ""), label = "Configuration errors", errtxt = string.match(sumerrors, "(.-)\n$"), }) end return file end function update_filecontent (self, modifications) local path = configfile local file_result,err = fs.write_file(path, format.dostounix(modifications)) return file_result end