diff options
author | Steven Barth <steven@midlink.org> | 2008-05-27 14:40:41 +0000 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2008-05-27 14:40:41 +0000 |
commit | 882940a80782344e4a32479788b81da5c7e08621 (patch) | |
tree | d35628854a424761ee64db7bbab30a49fe1405ea | |
parent | a51bd49fbec162d2f50bb2f1015aad6f4fb1e352 (diff) |
* Added cache to createindex_plain
-rw-r--r-- | libs/web/luasrc/dispatcher.lua | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 175f0dcb0..e76169d38 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -34,6 +34,9 @@ local tree = {nodes={}} -- Index table local index = {} +-- Indexdump +local indexcache = "/tmp/.luciindex" + -- Global request object request = {} @@ -173,17 +176,44 @@ end -- Calls the index function of all available controllers function createindex_plain(path, suffix) + local cachetime = nil + local controllers = luci.util.combine( luci.fs.glob(path .. "*" .. suffix) or {}, luci.fs.glob(path .. "*/*" .. suffix) or {} ) + + if indexcache then + cachetime = luci.fs.mtime(indexcache) + + if not cachetime then + luci.fs.mkdir(indexcache) + luci.fs.chmod(indexcache, "a=,u=rwx") + end + end - for i,c in ipairs(controllers) do - c = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".") - stat, mod = pcall(require, c) - - if stat and mod and type(mod.index) == "function" then - index[c] = mod.index + if not cachetime or luci.fs.mtime(path) > cachetime then + for i,c in ipairs(controllers) do + c = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".") + stat, mod = pcall(require, c) + + if stat and mod and type(mod.index) == "function" then + index[c] = mod.index + + if indexcache then + luci.fs.writefile(indexcache .. "/" .. c, string.dump(mod.index)) + end + end + end + if indexcache then + luci.fs.unlink(indexcache .. "/.index") + luci.fs.writefile(indexcache .. "/.index", "") + end + else + for i,c in ipairs(luci.fs.dir(indexcache)) do + if c:sub(1) ~= "." then + index[c] = loadfile(indexcache .. "/" .. c) + end end end end |