summaryrefslogtreecommitdiffstats
path: root/syslog-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'syslog-model.lua')
-rw-r--r--syslog-model.lua165
1 files changed, 43 insertions, 122 deletions
diff --git a/syslog-model.lua b/syslog-model.lua
index 88700e2..1d402d3 100644
--- a/syslog-model.lua
+++ b/syslog-model.lua
@@ -1,8 +1,11 @@
module(..., package.seeall)
require("fs")
-require("posix")
require("procps")
+require("getopts")
+require("format")
+
+local configfile = "/etc/conf.d/syslog"
local function get_version()
local cmd = "/sbin/apk_version -v -s busybox | cut -d ' ' -f 1"
@@ -12,104 +15,53 @@ local function get_version()
return cmd_output_result
end
-local is_running = function( process )
- local statusreport = nil
- if procps.pidof(process) then
- statusreport = "Yes"
- end
- return statusreport
-end
-
-local function readopts(optname)
- local opts = {}
- local line
- local f = io.open("/etc/conf.d/syslog", "r")
- if (f == nil) then
- return nil
- end
- for line in f:lines() do
- local optstr = string.match(line, "^" .. optname .. "=\"?(.*)%\"+")
- if optstr then
- local option = ""
- local optvalue = ""
- opts["org"]=optstr
- for j = 1, string.len(optstr) do
- if (string.sub(optstr, j, j) == "-") then
- option=string.sub(optstr, j, j+1)
- for k = j+1, string.len(optstr) do
- if (string.sub(optstr, k, k) == "-") then
- opts[option] = string.match(string.sub(optstr, j+2, k-1),"^%s*(.*)%s?")
- break
- end
- if (k == string.len(optstr)) then
- opts[option] = string.match(string.sub(optstr, j+2, k),"^%s*(.*)%s?")
- break
- end
-
- end
- end
- end
- end
- end
- return opts
-end
-
-local function file_info ( path )
- local filedetails = posix.stat(path)
- filedetails["owner"]=rawget((posix.getpasswd(filedetails["uid"])),"name")
- filedetails["group"]=rawget((posix.getgroup(filedetails["gid"])),"name")
- filedetails["atimelong"]=os.date("%c", filedetails["atime"])
- filedetails["mtimelong"]=os.date("%c", filedetails["mtime"])
- filedetails["path"]=path
- filedetails["name"]=basename(path)
-
- if ( filedetails["size"] > 1073741824 ) then
- filedetails["size"]=((filedetails["size"]/1073741824) - (filedetails["size"]/1073741824%0.1)) .. "G"
- elseif ( filedetails["size"] > 1048576 ) then
- filedetails["size"]=((filedetails["size"]/1048576) - (filedetails["size"]/1048576%0.1)) .. "M"
- elseif ( filedetails["size"] > 1024 ) then
- filedetails["size"]=((filedetails["size"]/1024) - (filedetails["size"]/1024%0.1)) .. "k"
- else
- filedetails["size"]=filedetails["size"]
+local function getloglevels()
+ local loglevels = {}
+ for i=1,8 do
+ table.insert(loglevels,i)
end
- return filedetails
-
+ return loglevels
end
-- ################################################################################
--- EXPERIMENTAL LOCAL FUNCTIONS
-
-
--- ################################################################################
-- PUBLIC FUNCTIONS
function getstatus()
- local opts = readopts("SYSLOGD_OPTS")
+ local opts = getconfig()
local status = {}
status.version = get_version()
- status.enabled = is_running("syslogd")
- status.logfile = opts["-O"] or "/var/log/messages"
- status.remote = opts["-R"]
+ status.enabled = procps.pidof("syslogd")
+ if not ((opts["SYSLOGD_OPTS"]["-R"] ~= "") and not (opts["SYSLOGD_OPTS"]["-L"])) then
+ status.logfile = opts["SYSLOGD_OPTS"]["-O"]
+ end
+ if (opts["SYSLOGD_OPTS"]["-R"]) and (opts["SYSLOGD_OPTS"]["-R"] ~= "") then
+ status.remote = opts["SYSLOGD_OPTS"]["-R"]
+ end
return status
end
function get_filedetails()
local filedetails = {}
- local path = "/etc/conf.d/syslog"
- filedetails.details = file_info(path)
+ local path = configfile
+ filedetails.details = fs.stat(path)
filedetails.content = fs.read_file(path)
return filedetails
end
function getconfig()
- local opts = readopts("SYSLOGD_OPTS")
- local config = {}
- config.debug = opts
- config.logfile = cfe({value=opts["-O"], type="text", option="", errtxt="" ,label="Log to given file", })
- config.loglevel = cfe({value=opts["-l"], type="radio", option="", errtxt="", helptxt="(1=Quiet, 5=Noisy, Default=Not specifyed any loglevel in the config)", label="Set local log level", })
- config.smallog = cfe({value=opts["-S"], type="select", option="", errtxt="", label="Smaller logging output", })
- config.maxsize = cfe({value=opts["-s"], type="text", option="", errtxt="", label="Max size (KB) before rotate", })
- config.logrotate = cfe({value=opts["-b"], type="text", option="", errtxt="", label="Number of rotated logs to keep", })
- config.remote = cfe({value=opts["-R"], type="text", option="", errtxt="", label="Log to IP or hostname on PORT", })
- return config
+ local errors = {}
+ errors["SYSLOGD_OPTS"] = {}
+ errors["KLOGD_OPTS"] = {}
+ local config = getopts.getoptsfromfile(configfile)
+ config["SYSLOGD_OPTS"]["-O"] = config["SYSLOGD_OPTS"]["-O"] or "/var/log/messages"
+ config["SYSLOGD_OPTS"]["-l_list"] = getloglevels()
+ config["SYSLOGD_OPTS"]["-R"] = config["SYSLOGD_OPTS"]["-R"] or ""
+ if (config["SYSLOGD_OPTS"]["-l"]) and
+ ((tonumber(config["SYSLOGD_OPTS"]["-l"]) == nil) or (tonumber(config["SYSLOGD_OPTS"]["-l"]) > 8)) then
+ errors["SYSLOGD_OPTS"]["-l"] = "Log value is out of range. Please select one of the above."
+ else
+ config["SYSLOGD_OPTS"]["-l"] = config["SYSLOGD_OPTS"]["-l"] or 8
+ end
+
+ return config, errors
end
service_control = function ( self, srvcmd )
@@ -132,46 +84,15 @@ service_control = function ( self, srvcmd )
return retval
end
--- ################################################################################
--- OTHER FUNCTIONS
-
--- we actually need root permissions to get the process list
---[[
-priv = {}
-function priv.is_enabled()
- return (pidof.pidof("syslogd"))
+function setconfigs(self,value)
+ --TODO: Validate so that user cant add values with '-'
end
-
-function priv.enable(opts)
- if opts and opts.remote then
- local f = io.open("/etc/conf.d/syslog", "w")
- if f == nil then
- return nil
- end
- f:write("# this file was written by and will be overwritten by acf\n")
- f:write("SYSLOGD_OPTS=\"-R "..opts.remote.."\"")
- f:close()
- end
- os.system("/etc/init.d/syslogd restart; rc_add -k -s 20 syslog")
+function update_filecontent (self, modifications)
+ local path = configfile
+ local file_result,err = fs.write_file(path, format.dostounix(modifications))
+ return file_result, err
end
---]]
---[[
--- this func does not need privileges
-local function readopts()
- local opts = {}
- local line
- local f = io.open("/etc/conf.d/syslog", "r")
- if f == nil then
- return nil
- end
- for line in f:lines() do
- local optstr = string.match(line, "^SYSLOGD_OPTS=\"?(.*)\"?")
- if optstr then
- opts.remote = string.match(optstr, "-R%s*(.*)%s*.*$")
- opts.optstr = optstr
- end
- end
- return opts
-end
---]]
+-- ################################################################################
+-- OTHER FUNCTIONS
+