summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2015-12-30 18:42:53 +0000
committerTed Trask <ttrask01@yahoo.com>2015-12-30 18:42:53 +0000
commit4f44e5c5e066f9ac287151e5b1f0fa515367d613 (patch)
treeaf3e9fea6b1791bb2fd6d1e5bffd0bc33e993dbf
parentf33a6b6abf83196308b99c8f10ce36b6c7d53bfe (diff)
downloadacf-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.lua82
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