From 3b038c8e0a3c70fb48ced52f8af2782b2d6a8e2c Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Mon, 7 Sep 2009 11:46:27 +0000 Subject: Added cron move functionality, added default value for period. --- alpine-baselayout.roles | 4 ++-- cron-controller.lua | 4 ++++ cron-listjobs-html.lsp | 28 ++++++++++++++++++++++---- cron-model.lua | 52 +++++++++++++++++++++++++++++++++++++++---------- cron-movejob-html.lsp | 1 + 5 files changed, 73 insertions(+), 16 deletions(-) create mode 120000 cron-movejob-html.lsp diff --git a/alpine-baselayout.roles b/alpine-baselayout.roles index 7c54f1c..d72cd66 100644 --- a/alpine-baselayout.roles +++ b/alpine-baselayout.roles @@ -1,5 +1,5 @@ GUEST=health:system,hostname:read USER=cron:status,cron:startstop,health:storage,health:proc,health:network,health:modules,health:networkstats,interfaces:status,interfaces:read,interfaces:restart,logfiles:status,logfiles:view,logfiles:download,logfiles:tail,modules:status,skins:update,skins:read,syslog:status,syslog:loginfo,syslog:startstop,rc:status EDITOR=cron:listjobs,hostname:edit,interfaces:delete,interfaces:create,interfaces:update,interfaces:ifup,interfaces:ifdown,logfiles:delete,syslog:config,rc:edit -EXPERT=cron:editjob,cron:deletejob,cron:createjob,cron:expert,syslog:expert,interfaces:editintfile,modules:edit,modules:reload -ADMIN=cron:status,cron:startstop,cron:listjobs,cron:editjob,cron:deletejob,cron:createjob,cron:expert,health:system,hostname:read,health:storage,health:proc,health:network,health:modules,health:networkstats,interfaces:status,interfaces:read,interfaces:restart,logfiles:status,logfiles:view,logfiles:download,logfiles:tail,modules:status,skins:update,skins:read,syslog:status,syslog:loginfo,syslog:startstop,rc:status,hostname:edit,interfaces:delete,interfaces:create,interfaces:update,interfaces:ifup,interfaces:ifdown,logfiles:delete,syslog:config,rc:edit,syslog:expert,interfaces:editintfile,modules:edit,modules:reload,password:edit +EXPERT=cron:editjob,cron:deletejob,cron:movejob,cron:createjob,cron:expert,syslog:expert,interfaces:editintfile,modules:edit,modules:reload +ADMIN=cron:status,cron:startstop,cron:listjobs,cron:editjob,cron:deletejob,cron:movejob,cron:createjob,cron:expert,health:system,hostname:read,health:storage,health:proc,health:network,health:modules,health:networkstats,interfaces:status,interfaces:read,interfaces:restart,logfiles:status,logfiles:view,logfiles:download,logfiles:tail,modules:status,skins:update,skins:read,syslog:status,syslog:loginfo,syslog:startstop,rc:status,hostname:edit,interfaces:delete,interfaces:create,interfaces:update,interfaces:ifup,interfaces:ifdown,logfiles:delete,syslog:config,rc:edit,syslog:expert,interfaces:editintfile,modules:edit,modules:reload,password:edit diff --git a/cron-controller.lua b/cron-controller.lua index 9d6fe7b..a420cc9 100644 --- a/cron-controller.lua +++ b/cron-controller.lua @@ -25,6 +25,10 @@ function deletejob(self) return self:redirect_to_referrer(self.model.delete_job(self.clientdata.name)) end +function movejob(self) + return controllerfunctions.handle_form(self, self.model.get_move_job, self.model.move_job, self.clientdata, "Move", "Move Job", "Job Moved") +end + function createjob(self) return controllerfunctions.handle_form(self, self.model.create_new_job, self.model.create_job, self.clientdata, "Create", "Create New Job", "New Job Created") end diff --git a/cron-listjobs-html.lsp b/cron-listjobs-html.lsp index d9705e0..1968bad 100644 --- a/cron-listjobs-html.lsp +++ b/cron-listjobs-html.lsp @@ -1,13 +1,30 @@ <% local view, viewlibrary, page_info, session = ... %> <% require("viewfunctions") %> -<% displaycommandresults({"editjob", "deletejob"}, session) %> +<% displaycommandresults({"editjob", "deletejob", "movejob"}, session) %> <% displaycommandresults({"createjob"}, session, true) %> <% if viewlibrary and viewlibrary.dispatch_component then viewlibrary.dispatch_component("status") end %> +<% -- set up the form for the move action +local formstart = '
' +formstart = formstart .. '\n\n
' +local function createmoveform(name) + io.write(formstart, name, formend) +end +%> +

Cron Jobs

<% for i,tabl in ipairs(view.value) do %>

<%= html.html_escape(tabl.period) %>

@@ -16,16 +33,19 @@ No jobs <% else %> - - + + + <% for i,job in ipairs(tabl.jobs) do %> + - <% end %>
ActionJobJobAction
<%= html.html_escape(string.gsub(job, "^.*/", "")) %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editjob?name="..job.."&redir="..page_info.orig_action, label="Edit "} %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletejob?name="..job, label="Delete "} %> + + <% createmoveform(job, tabl.period) %> <%= html.html_escape(string.gsub(job, "^.*/", "")) %>
diff --git a/cron-model.lua b/cron-model.lua index c5ccf7b..46f4b16 100644 --- a/cron-model.lua +++ b/cron-model.lua @@ -18,7 +18,7 @@ local function list_periods() if not periods then periods = {} local file = fs.read_file(configfile) or "" - for dir in string.gmatch(file, "/etc/periodic/(%S+)") do + for dir in string.gmatch(file, baseurl.."(%S+)") do periods[#periods+1] = dir end --[[ local reverseperiods = {} @@ -34,6 +34,20 @@ local function list_periods() return periods end +local function list_jobs() + local jobs = {} + local alljobs = {} + for i,period in ipairs(list_periods()) do + local temp = {period=period, jobs={}} + for file in fs.find("[^.]+", baseurl..period) do + table.insert(temp.jobs, file) + table.insert(alljobs, file) + end + jobs[#jobs+1] = temp + end + return jobs, alljobs +end + local function validate_filename(name) local success = false for i,per in ipairs(list_periods()) do @@ -57,15 +71,7 @@ function getstatus() end function listjobs() - local jobs = {} - for i,period in ipairs(list_periods()) do - local temp = {period=period, jobs={}} - for file in fs.find("[^.]+", baseurl..period) do - table.insert(temp.jobs, file) - end - jobs[#jobs+1] = temp - end - return cfe({ type="structure", value=jobs, label="Cron Jobs" }) + return cfe({ type="structure", value=list_jobs(), label="Cron Jobs" }) end function read_job(filename) @@ -86,10 +92,36 @@ function delete_job(filename) return retval end +function get_move_job() + local move = {} + move.name = cfe({ type="select", label="Name", option=select(2, list_jobs()) }) + move.period = cfe({ type="select", label="Period", option=list_periods() }) + move.name.value = move.name.option[1] or "" + move.period.value = move.period.option[1] or "" + return cfe({ type="group", value=move, label="Move Job" }) +end + +function move_job(move) + local success = modelfunctions.validateselect(move.value.name) + success = modelfunctions.validateselect(move.value.period) and success + + if success then + local newpath = baseurl .. move.value.period.value .. "/" .. basename(move.value.name.value) + fs.move_file(move.value.name.value, newpath) + move.value.name.option = select(2, list_jobs()) + move.value.name.value = newpath + else + move.errtxt = "Failed to move job" + end + + return move +end + function create_new_job() local newjob = {} newjob.name = cfe({ label="Name" }) newjob.period = cfe({ type="select", label="Period", option=list_periods() }) + newjob.period.value = newjob.period.option[1] or "" return cfe({ type="group", value=newjob, label="Create New Job" }) end diff --git a/cron-movejob-html.lsp b/cron-movejob-html.lsp new file mode 120000 index 0000000..4b6b762 --- /dev/null +++ b/cron-movejob-html.lsp @@ -0,0 +1 @@ +../form-html.lsp \ No newline at end of file -- cgit v1.2.3