diff options
author | Ted Trask <ttrask01@yahoo.com> | 2008-10-11 12:57:42 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2008-10-11 12:57:42 +0000 |
commit | ea59dcbdbed15ca5bd60f50cd8107451e74928dd (patch) | |
tree | 4f2103a8f01953cdc8d201cbc22c585a42a3a5cd | |
parent | ecdbb8c4d4a9aa37f6c3e1ece96f0cf7f3c8fd6b (diff) | |
download | acf-alpine-baselayout-ea59dcbdbed15ca5bd60f50cd8107451e74928dd.tar.bz2 acf-alpine-baselayout-ea59dcbdbed15ca5bd60f50cd8107451e74928dd.tar.xz |
Added rc controller to alpine-baselayout and rc functionality to processinfo library. Changed status Enabled/Disabled to Running/Stopped. Added links to status pages to install package and schedule autostart.
git-svn-id: svn://svn.alpinelinux.org/acf/alpine-baselayout/trunk@1552 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | alpine-baselayout.roles | 4 | ||||
-rw-r--r-- | rc-controller.lua | 15 | ||||
-rw-r--r-- | rc-edit-html.lsp | 11 | ||||
-rw-r--r-- | rc-model.lua | 59 | ||||
-rw-r--r-- | rc-status-html.lsp | 40 |
6 files changed, 128 insertions, 2 deletions
@@ -11,6 +11,7 @@ APP_DIST=\ logfiles* \ syslog* \ skins* \ + rc* \ EXTRA_DIST=README Makefile config.mk diff --git a/alpine-baselayout.roles b/alpine-baselayout.roles index adc0e41..24d0207 100644 --- a/alpine-baselayout.roles +++ b/alpine-baselayout.roles @@ -1,5 +1,5 @@ CREATE=interfaces:create,interfaces:editintfile -READ=health:storage,health:proc,health:network,health:modules,health:networkstats,interfaces:status,interfaces:read,logfiles:status,logfiles:view,logfiles:download,logfiles:tail,syslog:status,syslog:loginfo -UPDATE=interfaces:update,interfaces:ifup,interfaces:ifdown,skins:update,skins:read,syslog:startstop,syslog:config,syslog:expert +READ=health:storage,health:proc,health:network,health:modules,health:networkstats,interfaces:status,interfaces:read,logfiles:status,logfiles:view,logfiles:download,logfiles:tail,syslog:status,syslog:loginfo,rc:status +UPDATE=interfaces:update,interfaces:ifup,interfaces:ifdown,skins:update,skins:read,syslog:startstop,syslog:config,syslog:expert,rc:edit DELETE=interfaces:delete,logfiles:delete ALL=health:system,hostname:read diff --git a/rc-controller.lua b/rc-controller.lua new file mode 100644 index 0000000..3c00c41 --- /dev/null +++ b/rc-controller.lua @@ -0,0 +1,15 @@ +module (..., package.seeall) + +require("controllerfunctions") + +default_action = "status" + +status = function(self) + return self.model.status() +end + +edit = function(self) + return controllerfunctions.handle_form(self, + function() return self.model.read_sequence(self.clientdata.servicename) end, + self.model.update_sequence, self.clientdata, "Save", "Edit Startup Sequence") +end diff --git a/rc-edit-html.lsp b/rc-edit-html.lsp new file mode 100644 index 0000000..0c1896d --- /dev/null +++ b/rc-edit-html.lsp @@ -0,0 +1,11 @@ +<% local form, viewlibrary, page_info = ... +require("viewfunctions") +%> + +<H1><%= form.label %></H1> +<% + form.action = page_info.script .. page_info.prefix .. page_info.controller .. "/" .. page_info.action + form.value.servicename.contenteditable = false + local order = {"servicename", "sequence", "kill", "system"} + displayform(form, order) +%> diff --git a/rc-model.lua b/rc-model.lua new file mode 100644 index 0000000..189d381 --- /dev/null +++ b/rc-model.lua @@ -0,0 +1,59 @@ +module (..., package.seeall) + +require("processinfo") +require("validator") + +local config + +status = function() + config = config or processinfo.read_startupsequence() + return cfe({ type="structure", value=config, label="Startup Sequence Status" }) +end + +read_sequence = function(servicename) + local value = {} + value.servicename = cfe({ value=servicename or "", label="Service Name" }) + value.sequence = cfe({ label="Startup Sequence" }) + value.kill = cfe({ type="boolean", value=false, label="Add kill link for shutdown" }) + value.system = cfe({ type="boolean", value=false, label="System init service" }) + + -- read in the value for the servicename + config = config or processinfo.read_startupsequence() + for i,conf in ipairs(config) do + if conf.servicename == servicename then + value.sequence.value = conf.sequence + value.kill.value = conf.kill + value.system.value = conf.system + break + end + end + + return cfe({ type="group", value=value, label="Service Startup Sequence"}) +end + + +update_sequence = function(sequence) + local success = false + sequence.value.servicename.errtxt = "Invalid service" + for name in posix.files("/etc/init.d") do + if name == sequence.value.servicename.value then + success = true + sequence.value.servicename.errtxt = nil + end + end + if sequence.value.sequence.value ~= "" and not validator.is_integer_in_range(sequence.value.sequence.value, 1, 99) then + success = false + sequence.value.sequence.errtxt = "Invalid sequence number" + end + if success then + if sequence.value.sequence.value == "" then + sequence.descr, sequence.errtxt = processinfo.delete_startupsequence(sequence.value.servicename.value) + else + sequence.descr, sequence.errtxt = processinfo.add_startupsequence(sequence.value.servicename.value, sequence.value.sequence.value, sequence.value.kill.value, sequence.value.system.value) + end + else + sequence.errtxt = "Failed to set sequence" + end + + return sequence +end diff --git a/rc-status-html.lsp b/rc-status-html.lsp new file mode 100644 index 0000000..1ea448a --- /dev/null +++ b/rc-status-html.lsp @@ -0,0 +1,40 @@ +<% local view, viewlibrary, page_info, session = ... %> +<% require("viewfunctions") %> + +<% if session.editresult then %> + <H1>Command Result</H1> + <% if session.editresult.errtxt then io.write('<P CLASS="error">' .. string.gsub(session.editresult.errtxt, "\n", "<BR>") .. "</P>\n") end + if session.editresult.descr then io.write('<P CLASS="descr">' .. string.gsub(session.editresult.descr, "\n", "<BR>") .. "</P>\n") end + for name,val in pairs(session.editresult.value) do + if val.errtxt then io.write('<P CLASS="error">' .. string.gsub(val.errtxt, "\n", "<BR>") .. "</P>\n") end + end + session.editresult = nil +end %> + +<H1><%= view.label %></H1> +<TABLE> +<TR><TD class='header'>Service Name</TD><TD class='header'>Sequence</TD> +<TD class='header'>Kill on shutdown</TD><TD class='header'>System init service</TD> +<% if session.permissions[page_info.controller].edit then %> +<TD class='header'>Update</TD> +<% end %> +</TR> +<% +for i,item in ipairs(view.value) do %> + <TR> + <% if session.permissions[page_info.controller].edit then + local result = viewlibrary.dispatch_component(page_info.controller.."/edit", {servicename=item.servicename}, true) + for name,val in pairs(result.value) do val.name=name end + if result.value.kill.value then result.value.kill.checked = "" end + if result.value.system.value then result.value.system.checked = "" end %> + <form action="<%= page_info.script .. page_info.prefix .. page_info.controller .. "/edit" %>" method="POST"> + <TD><%= item.servicename %><%= html.form.hidden(result.value.servicename) %></TD><TD><%= html.form.text(result.value.sequence) %></TD> + <TD><%= html.form.checkbox(result.value.kill) %></TD><TD><%= html.form.checkbox(result.value.system) %></TD> + <TD><input class="submit" type="submit" name="<%= result.option %>" value="<%= result.submit or result.option %>"></TD> + </form></TR> + <% else %> + <TD><%= item.servicename %></TD><TD><%= item.sequence %></TD> + <TD><%= item.kill %></TD><TD><%= item.system %></TD></TR> + <% end %> +<% end %> +</TABLE> |