summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Havela <mika.havela@gmail.com>2008-01-09 12:27:39 +0000
committerMika Havela <mika.havela@gmail.com>2008-01-09 12:27:39 +0000
commit9ad995cea4060451485664a102657dfe82258dc8 (patch)
treea7d82dce97c313c445fce9bccba0890d87a28460
parent8b44052f3210ffaca4b4e51506b5eec295f16fda (diff)
downloadacf-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.lsp38
-rw-r--r--syslog-controller.lua41
-rw-r--r--syslog-model.lua99
-rw-r--r--syslog-status-html.lsp13
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))
--]]