diff options
author | Mika Havela <mika.havela@gmail.com> | 2008-01-09 12:27:39 +0000 |
---|---|---|
committer | Mika Havela <mika.havela@gmail.com> | 2008-01-09 12:27:39 +0000 |
commit | 9ad995cea4060451485664a102657dfe82258dc8 (patch) | |
tree | a7d82dce97c313c445fce9bccba0890d87a28460 | |
parent | 8b44052f3210ffaca4b4e51506b5eec295f16fda (diff) | |
download | acf-alpine-baselayout-9ad995cea4060451485664a102657dfe82258dc8.tar.bz2 acf-alpine-baselayout-9ad995cea4060451485664a102657dfe82258dc8.tar.xz |
Showing current config starting to work (still some problems with RegExpr in model). Saving changes still doesn't work.
git-svn-id: svn://svn.alpinelinux.org/acf/alpine-baselayout/trunk@519 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r-- | syslog-config-html.lsp | 38 | ||||
-rw-r--r-- | syslog-controller.lua | 41 | ||||
-rw-r--r-- | syslog-model.lua | 99 | ||||
-rw-r--r-- | syslog-status-html.lsp | 13 |
4 files changed, 143 insertions, 48 deletions
diff --git a/syslog-config-html.lsp b/syslog-config-html.lsp index 0ced54f..b32d323 100644 --- a/syslog-config-html.lsp +++ b/syslog-config-html.lsp @@ -1,9 +1,9 @@ -<? ctl = ... ?> +<? view = ... ?> <h1>System logging</h1> <h2>System info</h2> <form> <DT>Process status</DT> -<DD><?= ctl.status ?></DD> +<DD><?= view.status.status ?></DD> <DT>Daemon control</DT> <dd><form action="" method="POST"> @@ -12,45 +12,52 @@ <input type=submit name="srvcmd" value="restart" class="submit"></form> </dd> +<? if (view.srvcmdresult) then ?> +<dt>Previous action</dt> +<dd><pre><?= view.srvcmdresult ?></pre></dd> +<? end ?> + <H2>Configuration</H2> <H3>General settings</H3> <DT>Log to given file</DT> -<DD><input type="text" class="text" name="smallerlogg"/> +<DD><input type="text" class="text" name="smallerlogg" value="<?= view.config.logfile ?>"/> <P>(default=/var/log/messages)</P></DD> <DT>Set local log level</DT> -<DD><input class="radio" type="radio" name="loglevel" value="1">1 -<input class="radio" type="radio" name="loglevel" value="2">2 -<input class="radio" type="radio" name="loglevel" value="3">3 -<input class="radio" type="radio" name="loglevel" value="4">4 -<input class="radio" type="radio" name="loglevel" value="5">5 -<p>(1=Quiet, 5=Noisy)</P> +<DD><input class="radio" type="radio" name="loglevel" value="1" <? if (tostring(view.config.loglevel) == "1") then io.write('checked') end ?>>1 +<input class="radio" type="radio" name="loglevel" value="2" <? if (tostring(view.config.loglevel) == "2") then io.write('checked') end ?>>2 +<input class="radio" type="radio" name="loglevel" value="3" <? if (tostring(view.config.loglevel) == "3") then io.write('checked') end ?>>3 +<input class="radio" type="radio" name="loglevel" value="4" <? if (tostring(view.config.loglevel) == "4") then io.write('checked') end ?>>4 +<input class="radio" type="radio" name="loglevel" value="5" <? if (tostring(view.config.loglevel) == "5") then io.write('checked') end ?>>5 +<input class="radio" type="radio" name="loglevel" value="" <? if (tostring(view.config.loglevel) == "") then io.write('checked') end ?>>Default +<p>(1=Quiet, 5=Noisy, Default=Not specifyed any loglevel in the config)</P> </DD> <DT>Smaller logging output</DT> -<DD><input type="checkbox" name="smallerlogg"/></DD> +<DD><input type="checkbox" name="smallog" <? if (view.config.smallog) then io.write('checked') end ?>/></DD> <H3>Save logs for a longer period</H3> <DT>Max size (KB) before rotate</DT> -<DD><input type="text" class="text" name="smallerlogg"/> +<DD><input type="text" class="text" name="maxsize" value="<?= view.config.maxsize ?>"/> <p>(default=200KB, 0=off)</p> </DD> <DT>Number of rotated logs to keep</DT> -<DD><input type="text" class="text" name="smallerlogg"/> +<DD><input type="text" class="text" name="logrotate" value="<?= view.config.logrotate ?>"/> <p>(default=1, max=99, 0=purge)</p> </DD> <H3>Remote logging</H3> -<DT>Log to IP or hostname on PORT</DT><DD><input type="text" class="text" value="<?= ctl.host ?>" name="host"/> +<DT>Log to IP or hostname on PORT</DT> +<DD><input type="text" class="text" name="host" value="<?= view.config.remote ?>"/> <P>(default PORT=514/UDP)</P></DD> <H2>Save above settings</H2> -<DT>Apply settings</DT> -<DD><input class="submit" type="submit" value="Apply"/></DD> +<DT>Save settings</DT> +<DD><input class="submit" type="submit" value="Save"/></DD> </form> @@ -61,3 +68,4 @@ require("debugs") io.write(debugs.variables(view)) --]] ?> + diff --git a/syslog-controller.lua b/syslog-controller.lua index 76089fb..8869fec 100644 --- a/syslog-controller.lua +++ b/syslog-controller.lua @@ -1,41 +1,30 @@ - module(..., package.seeall) ---require("privsep") -require("join") - --- those should go into acf.conf -local user="nobody" -local group="nobody" - --- drop privileges and put privileged model funcs in self.priv mvc = {} function mvc.on_load(self) --- self.priv = privsep.drop_privs(user, group, self.model.priv) end function status(self) + return self.model.getstatus() end + function config(self) - local ctl = {} - local opts = self.model.readopts() --- ctl.pidlist = self.priv.is_enabled() - if pidlist then - ctl.status = "enabled" - else - ctl.status = "Disabled" + local srvcmdresult = nil + local srvcmd = self.clientdata.srvcmd + if (srvcmd ~= nil) then + srvcmdresult = self.model:service_control(srvcmd) + if (srvcmd == "stop") or (srvcmd == "restart") then + posix.sleep(3) -- Wait for the process to start|stop + else + posix.sleep(1) -- Wait for the process to start|stop + end end - ctl.opts = opts - if opts and opts.remote then - ctl.remote = "checked" - ctl.host = opts.remote - else - ctl.remote = "" - ctl.host = "" - end - return ctl + + return { status = self.model.getstatus(), srvcmdresult=srvcmdresult, config= self.model.getconfig() } end + function expert(self) + return {status="Work in progress!"} end diff --git a/syslog-model.lua b/syslog-model.lua index af41c70..3413ccd 100644 --- a/syslog-model.lua +++ b/syslog-model.lua @@ -3,6 +3,101 @@ module(..., package.seeall) --require("pidof") require("split") +local function get_version() + local cmd = "/sbin/apk_version -v -s busybox | cut -d ' ' -f 1" + local cmd_output = io.popen( cmd ) + local cmd_output_result = cmd_output:read("*a") or "" + cmd_output:close() + return cmd_output_result +end + +local is_running = function( process ) + local statusreport = nil + local cmdoutput = {} + local cmd, error = io.popen("pidof " .. process ,r) + local cmdoutput = string.gsub(cmd:read("*a"), "%s", "") + cmd:close() + if (cmdoutput ~= "") then + statusreport = "Running" + else + statusreport = "Stopped" + end + return statusreport +end + +-- ################################################################################ +-- EXPERIMENTAL LOCAL FUNCTIONS + +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 t = {} + for k, v in string.gmatch(optstr, "(-%S+)%s+(%S+)") do + opts[k] = v + end + end + end + return opts +end + +-- ################################################################################ +-- PUBLIC FUNCTIONS + +function getstatus() + local opts = readopts("SYSLOGD_OPTS") + local status = {} + local version = get_version() + status.version = version + local isrunning = is_running("syslogd") + status.status = isrunning + status.logfile = opts["-O"] or "/var/log/messages" + status.remote = opts["-R"] + return status +end + +function getconfig() + local opts = readopts("SYSLOGD_OPTS") + local config = {} + config.debug = opts + config.logfile = opts["-O"] or "" + config.loglevel = opts["-l"] or "" + config.smallog = opts["-S"] --FIXME: DOESNT WORK!!! + config.maxsize = opts["-s"] or "" + config.logrotate = opts["-b"] or "" + config.remote = opts["-R"] or "" + return config +end + +service_control = function ( self, srvcmd ) + local srvcmd = string.lower(srvcmd) + local retval = "" + local line = "" + if (srvcmd == "start") or (srvcmd == "stop") or (srvcmd == "restart") then + local file = io.popen( "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin /etc/init.d/syslog " .. srvcmd .. " 2>&1" ) + if file ~= nil then + line = file:read( "*l" ) + while line ~= nil do + retval = retval .. "\n" .. line + line = file:read( "*l" ) + end + file:close() + end + else + retval = "Unknown command!" + end + return retval +end + +-- ################################################################################ +-- OTHER FUNCTIONS + -- we actually need root permissions to get the process list --[[ priv = {} @@ -25,7 +120,7 @@ end --]] -- this func does not need privileges -function readopts() +local function readopts() local opts = {} local line local f = io.open("/etc/conf.d/syslog", "r") @@ -41,5 +136,3 @@ function readopts() end return opts end - - diff --git a/syslog-status-html.lsp b/syslog-status-html.lsp index 32cb67e..62d497f 100644 --- a/syslog-status-html.lsp +++ b/syslog-status-html.lsp @@ -5,20 +5,25 @@ <h2>SYSTEM INFO</h2> <dt>Program version</dt> -<dd>(Don't think this can be displayed)</dd> +<dd><?= view.version ?></dd> <dt>Process status</dt> -<dd>[running|stopped]</dd> +<dd><?= view.status ?></dd> +<? if (view.logfile) then ?> <dt>Logfile</dt> -<dd>[/var/log/messages] (Hidden if -R and not -L)</dd> +<dd><?= view.logfile ?></dd> +<? end ?> +<? if (view.remote) then ?> <dt>Remote logging to</dt> -<dd>[1.2.3.4:514] (Hidden if not appliable)</dd> +<dd><?= view.remote ?></dd> +<? end ?> <? --[[ DEBUG INFORMATION +view = ... require("debugs") io.write(debugs.variables(view)) --]] |