diff options
author | Ted Trask <ttrask01@yahoo.com> | 2015-12-30 18:42:53 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2015-12-30 18:42:53 +0000 |
commit | 4f44e5c5e066f9ac287151e5b1f0fa515367d613 (patch) | |
tree | af3e9fea6b1791bb2fd6d1e5bffd0bc33e993dbf | |
parent | f33a6b6abf83196308b99c8f10ce36b6c7d53bfe (diff) | |
download | acf-alpine-baselayout-4f44e5c5e066f9ac287151e5b1f0fa515367d613.tar.bz2 acf-alpine-baselayout-4f44e5c5e066f9ac287151e5b1f0fa515367d613.tar.xz |
Clean up model.get code for listing files and determining if in use
-rw-r--r-- | logfiles-model.lua | 82 |
1 files changed, 32 insertions, 50 deletions
diff --git a/logfiles-model.lua b/logfiles-model.lua index 29233d7..df35f0c 100644 --- a/logfiles-model.lua +++ b/logfiles-model.lua @@ -6,23 +6,15 @@ modelfunctions = require("modelfunctions") fs = require("acf.fs") format = require("acf.format") --- Function to get detailed information on a specific file. -local function file_info ( path ) - -- Check if file is in use - local file = path - local st = posix.stat(file) - while st.type == "link" do - file = posix.readlink(file) - st = posix.stat(file) - end - local size = st.size or "0" - local lastmod = st.mtime or "---" - local fileinuseresult = modelfunctions.run_executable({"fuser", path}) or "unknown" - fileinuseresult = (fileinuseresult ~= "") - return lastmod,size,fileinuseresult +-- These folders (and their subfolders) are going to be listed +local logfilepaths = {"/var/log"} + +local function is_file_in_use(path) + return (modelfunctions.run_executable({"fuser", path}) or "unknown") ~= "" end -- Function to recursively insert all filenames in a dir into an array +-- Links are followed and only actual files are listed local function recursedir(path, filearray) filearray = filearray or {} local k,v @@ -38,7 +30,7 @@ local function recursedir(path, filearray) end if st and st.type == "directory" then recursedir(file, filearray) - elseif st then + elseif st and st.type == "regular" then table.insert(filearray, file) end end @@ -47,28 +39,14 @@ local function recursedir(path, filearray) end -- Function to list available files for view/delete -local function list_files ( ... ) - local listed_files = {} - local open_files = {} +local function list_files() local files = {} - local k,v -- Generate a single table with all the files - for k,v in pairs{...} do - recursedir(v, files) + for i,p in pairs(logfilepaths) do + recursedir(p, files) end - -- Loop through each file and present its info - for k,v in pairs(files) do - -- Get info on this specific file and put it in a table - local lastmod,size,fileinuseresult = file_info(v) - local filename = cfe({ value=v, label="File name" }) - local size = cfe({ value=size, label="File size" }) - local mtime = cfe({ value=lastmod, label="File date" }) - local inuse = cfe({ type="boolean", value=fileinuseresult, label="File in use" }) - table.insert ( listed_files , cfe({ type="group", value={filename=filename, size=size, mtime=mtime, - inuse=inuse, label="File details"} }) ) - end - table.sort(listed_files, function (a,b) return (a.value.filename.value < b.value.filename.value) end ) - return cfe({ type="list", value=listed_files, label="Log Files" }) + table.sort(files) + return files end local do_grep = function(filecontent, grep) @@ -90,9 +68,8 @@ mymodule.get_filedetails = function(self, clientdata) self.handle_clientdata(retval, clientdata) local success = false - local available_files = mymodule.get() - for i,file in ipairs(available_files.value) do - if file.value.filename.value == retval.value.filename.value then + for i,file in ipairs(list_files()) do + if file == retval.value.filename.value then success = true break end @@ -133,9 +110,8 @@ mymodule.tail = function(self, clientdata) retval.value.filecontent = cfe({ type="longtext", label="File content" }) retval.value.filename.errtxt = "File not found" - local available_files = mymodule.get() - for i,file in ipairs(available_files.value) do - if ( file.value.filename.value == retval.value.filename.value ) then + for i,file in ipairs(list_files()) do + if ( file == retval.value.filename.value ) then retval.value.filename.errtxt = nil local f = io.open(retval.value.filename.value) if tonumber(retval.value.offset.value) then @@ -161,17 +137,24 @@ mymodule.tail = function(self, clientdata) end mymodule.get = function () - -- These folders (and their subfolers) are going to be listed - return list_files("/var/log") + -- Loop through each file and present its info + local listed_files = {} + for i,file in pairs(list_files()) do + -- Get info on this specific file and put it in a table + local st = posix.stat(file) + local filename = cfe({ value=file, label="File name" }) + local size = cfe({ value=st.size, label="File size" }) + local mtime = cfe({ value=st.mtime, label="File date" }) + local inuse = cfe({ type="boolean", value=is_file_in_use(file), label="File in use" }) + table.insert ( listed_files , cfe({ type="group", value={filename=filename, size=size, mtime=mtime, + inuse=inuse, label="File details"} }) ) + end + table.sort(listed_files, function (a,b) return (a.value.filename.value < b.value.filename.value) end ) + return cfe({ type="list", value=listed_files, label="Log Files" }) end mymodule.get_delete = function() - local filename = cfe({ type="select", label="File name", option={} }) - -- Get a list of files that could be deleted - local available_files = mymodule.get() - for i,file in ipairs(available_files.value) do - filename.option[#filename.option+1] = file.value.filename.value - end + local filename = cfe({ type="select", label="File name", option=list_files() }) return cfe({ type="group", value={filename=filename}, label="Delete logfile" }) end @@ -181,9 +164,8 @@ mymodule.delete = function (self, filetodelete) local success = modelfunctions.validateselect(filetodelete.value.filename) if success then - local lastmod,size,fileinuseresult = file_info(filetodelete.value.filename.value) -- Check if file is deletable (or in use) - if fileinuseresult then + if is_file_in_use(filetodelete.value.filename.value) then success = false filetodelete.value.filename.errtxt = "File in use" else |