fix a bug in the parsing of /proc/mounts (from Natanael Copa
<nc...@alpinelinux.org>)

remove lxc subdir in cgroup paths

remove extraneous debug printfs

remove extra call to stats_clear

Tested lxc-top, and apitest.lua on both lua 5.1 and 5.2

Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
---
 configure.ac            | 10 +++++++++-
 src/lua-lxc/Makefile.am |  4 ++--
 src/lua-lxc/lxc.lua     | 50 ++++++++++++++++++++++---------------------------
 src/lxc/lxc-top         | 14 ++++++++++----
 4 files changed, 43 insertions(+), 35 deletions(-)

diff --git a/configure.ac b/configure.ac
index df9a44b..f6f067d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -164,9 +164,17 @@ AC_ARG_ENABLE([lua],
 AM_CONDITIONAL([ENABLE_LUA], [test "x$enable_lua" = "xyes"])
 
 AM_COND_IF([ENABLE_LUA],
-       [PKG_CHECK_MODULES([LUA], [$LUAPKGCONFIG >= 5.1],[],[AC_MSG_ERROR([You 
must install lua-devel for lua 5.1])])
+       [AC_CHECK_PROG([LUA],[lua],[lua],[no])
+       PKG_CHECK_MODULES([LUADEVEL], [$LUAPKGCONFIG >= 
5.1],[],[AC_MSG_ERROR([You must install lua-devel])])
        AC_DEFINE_UNQUOTED([ENABLE_LUA], 1, [Lua is available])])
 
+AS_IF([test "x$LUA" != "xno"],
+       [AC_MSG_CHECKING([for lua version])
+       LUA_VERSION=`$LUA -e 'print(_VERSION)' | awk '{print $2}'`
+       AC_MSG_RESULT([$LUA_VERSION])
+       AC_SUBST([LUA_VERSION])])
+
+
 # Optional test binaries
 AC_ARG_ENABLE([tests],
        [AC_HELP_STRING([--enable-tests], [build test/example binaries])],
diff --git a/src/lua-lxc/Makefile.am b/src/lua-lxc/Makefile.am
index 82dbae8..137fcda 100644
--- a/src/lua-lxc/Makefile.am
+++ b/src/lua-lxc/Makefile.am
@@ -1,7 +1,7 @@
 if ENABLE_LUA
 
-luadir=$(datadir)/lua/5.1
-sodir=$(libdir)/lua/5.1/lxc
+luadir=$(datadir)/lua/$(LUA_VERSION)
+sodir=$(libdir)/lua/$(LUA_VERSION)/lxc
 
 lua_SCRIPTS=lxc.lua
 
diff --git a/src/lua-lxc/lxc.lua b/src/lua-lxc/lxc.lua
index b48eb76..c04906e 100755
--- a/src/lua-lxc/lxc.lua
+++ b/src/lua-lxc/lxc.lua
@@ -32,6 +32,11 @@ local lxc_path
 local cgroup_path
 local log_level = 3
 
+-- lua 5.1 compat
+if table.unpack == nil then
+    table.unpack = unpack
+end
+
 -- the following two functions can be useful for debugging
 function printf(...)
     local function wrapper(...) io.write(string.format(...)) end
@@ -89,6 +94,9 @@ function cgroup_path_get()
        while true do
            local c
            line = f:read()
+           if line == nil then
+               break
+           end
            c = line:split(" ", 6)
            if (c[1] == "cgroup") then
                cgroup_path = dirname(c[2])
@@ -262,7 +270,7 @@ end
 -- methods for stats collection from various cgroup files
 -- read integers at given coordinates from a cgroup file
 function container:stat_get_ints(controller, item, coords)
-    local f = 
io.open(cgroup_path.."/"..controller.."/lxc/"..self.ctname.."/"..item, "r")
+    local f = 
io.open(cgroup_path.."/"..controller.."/"..self.ctname.."/"..item, "r")
     local lines = {}
     local result = {}
 
@@ -283,12 +291,12 @@ function container:stat_get_ints(controller, item, coords)
            table.insert(result, val)
        end
     end
-    return unpack(result)
+    return table.unpack(result)
 end
 
 -- read an integer from a cgroup file
 function container:stat_get_int(controller, item)
-    local f = 
io.open(cgroup_path.."/"..controller.."/lxc/"..self.ctname.."/"..item, "r")
+    local f = 
io.open(cgroup_path.."/"..controller.."/"..self.ctname.."/"..item, "r")
     if (not f) then
        return 0
     end
@@ -302,19 +310,17 @@ end
 
 function container:stat_match_get_int(controller, item, match, column)
     local val
-    local f = 
io.open(cgroup_path.."/"..controller.."/lxc/"..self.ctname.."/"..item, "r")
+    local f = 
io.open(cgroup_path.."/"..controller.."/"..self.ctname.."/"..item, "r")
     if (not f) then
        return 0
     end
 
     for line in f:lines() do
-       printf("matching line:%s with match:%s\n", line, match)
        if (string.find(line, match)) then
            local col
 
            col = line:split(" ", 80)
            val = tonumber(col[column]) or 0
-           printf("found line!! val:%d\n", val)
        end
     end
     f:close()
@@ -389,34 +395,22 @@ end
 -- return running containers found in cgroup fs
 function containers_running(names_only)
     local containers = {}
-    local attr
-
-    -- the lxc directory won't exist if no containers has ever been started
-    attr = lfs.attributes(cgroup_path .. "/cpu/lxc")
-    if (not attr) then
-       return containers
-    end
+    local names = containers_configured(true)
 
-    for file in lfs.dir(cgroup_path .. "/cpu/lxc") do
-       if (file ~= "." and file ~= "..")
-       then
-           local pathfile = cgroup_path .. "/cpu/lxc/" .. file
-           local attr = lfs.attributes(pathfile)
-
-           if (attr.mode == "directory") then
+    for _,name in ipairs(names) do
+       local ct = container:new(name)
+       if ct:running() then
+               -- note, this is a "mixed" table, ie both dictionary and list
+               table.insert(containers, name)
                if (names_only) then
-                   -- note, this is a "mixed" table, ie both dictionary and 
list
-                   containers[file] = true
-                   table.insert(containers, file)
+                   containers[name] = true
+                   ct = nil
                else
-                   local ct = container:new(file)
-                   -- note, this is a "mixed" table, ie both dictionary and 
list
-                   containers[file] = ct
-                   table.insert(containers, file)
+                   containers[name] = ct
                end
-           end
        end
     end
+    
     table.sort(containers, function (a,b) return (a < b) end)
     return containers
 end
diff --git a/src/lxc/lxc-top b/src/lxc/lxc-top
index 31aaecf..969f1f7 100755
--- a/src/lxc/lxc-top
+++ b/src/lxc/lxc-top
@@ -97,9 +97,16 @@ end
 
 function usleep(n)
     if (n ~= 0) then
-       ret = os.execute("usleep " .. tonumber(n))
-       if (ret ~= 0) then
-           os.exit(0)
+       local ret = os.execute("usleep " .. tonumber(n))
+       if (string.sub(_VERSION, 5) == "5.2") then
+           if (ret == nil) then
+               os.exit(0)
+           end
+       end
+       if (string.sub(_VERSION, 5) == "5.1") then
+           if (ret ~= 0) then
+               os.exit(0)
+           end
        end
     end
 end
@@ -138,7 +145,6 @@ end
 function container_list_update()
     local now_running
 
-    lxc.stats_clear(stats_total)
     now_running = lxc.containers_running(true)
 
     -- check for newly started containers
-- 
1.8.1.4




------------------------------------------------------------------------------
Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
Discover the easy way to master current and previous Microsoft technologies
and advance your career. Get an incredible 1,500+ hours of step-by-step
tutorial videos with LearnDevNow. Subscribe today and save!
http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to