From 4aaf7226430f480eb75e3653958d2f1f448fc186 Mon Sep 17 00:00:00 2001 From: Mika Havela Date: Thu, 24 Jan 2008 15:21:02 +0000 Subject: Expert-tab works. Statuspage works. Configpage shows current settings, but saving changes doesnt work (work in progress). git-svn-id: svn://svn.alpinelinux.org/acf/alpine-baselayout/trunk@640 ab2d0c66-481e-0410-8bed-d214d4d58bed --- syslog-model.lua | 165 +++++++++++++++---------------------------------------- 1 file changed, 43 insertions(+), 122 deletions(-) (limited to 'syslog-model.lua') 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 + -- cgit v1.2.3