luci-app-dockerman: cbi/volumes refactoring and update coding style
authorFlorian Eckert <fe@dev.tdt.de>
Wed, 22 Jul 2020 12:48:47 +0000 (14:48 +0200)
committerFlorian Eckert <fe@dev.tdt.de>
Tue, 28 Jul 2020 12:16:14 +0000 (14:16 +0200)
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
applications/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua

index 1685027203263d2246898501dd40e11c45d43bd5..4a1c905a1e4be3f006b8e529a4c26de32d46cb4c 100644 (file)
@@ -3,114 +3,141 @@ LuCI - Lua Configuration Interface
 Copyright 2019 lisaac <https://github.com/lisaac/luci-app-dockerman>
 ]]--
 
-require "luci.util"
-local uci = luci.model.uci.cursor()
+
 local docker = require "luci.model.docker"
 local dk = docker.new()
 
-local containers, volumes
-local res = dk.volumes:list()
-if res.code <300 then volumes = res.body.Volumes else return end
-res = dk.containers:list({query = {all=true}})
-if res.code <300 then containers = res.body else return end
+local m, s, o
+
+local res, containers, volumes
 
 function get_volumes()
-  local data = {}
-  for i, v in ipairs(volumes) do
-    -- local index = v.CreatedAt .. v.Name
-    local index = v.Name
-    data[index]={}
-    data[index]["_selected"] = 0
-    data[index]["_nameraw"] = v.Name
-    data[index]["_name"] = v.Name:sub(1,12)
-    for ci,cv in ipairs(containers) do
-      if cv.Mounts and type(cv.Mounts) ~= "table" then break end
-      for vi, vv in ipairs(cv.Mounts) do
-        if v.Name == vv.Name then
-          data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "")..
-          '<a href='..luci.dispatcher.build_url("admin/docker/container/"..cv.Id)..' class="dockerman_link" title="'..translate("Container detail")..'">'.. cv.Names[1]:sub(2)..'</a>'
-        end
-      end
-    end
-    data[index]["_driver"] = v.Driver
-    data[index]["_mountpoint"] = nil
-    for v1 in v.Mountpoint:gmatch('[^/]+') do
-      if v1 == index then 
-        data[index]["_mountpoint"] = data[index]["_mountpoint"] .."/" .. v1:sub(1,12) .. "..."
-      else
-        data[index]["_mountpoint"] = (data[index]["_mountpoint"] and data[index]["_mountpoint"] or "").."/".. v1
-      end
-    end
-    data[index]["_created"] = v.CreatedAt
-  end
-  return data
+       local data = {}
+       for i, v in ipairs(volumes) do
+               local index = v.Name
+               data[index]={}
+               data[index]["_selected"] = 0
+               data[index]["_nameraw"] = v.Name
+               data[index]["_name"] = v.Name:sub(1,12)
+
+               for ci,cv in ipairs(containers) do
+                       if cv.Mounts and type(cv.Mounts) ~= "table" then
+                               break
+                       end
+                       for vi, vv in ipairs(cv.Mounts) do
+                               if v.Name == vv.Name then
+                                       data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "")..
+                                       '<a href='..luci.dispatcher.build_url("admin/docker/container/"..cv.Id)..' class="dockerman_link" title="'..translate("Container detail")..'">'.. cv.Names[1]:sub(2)..'</a>'
+                               end
+                       end
+               end
+               data[index]["_driver"] = v.Driver
+               data[index]["_mountpoint"] = nil
+
+               for v1 in v.Mountpoint:gmatch('[^/]+') do
+                       if v1 == index then 
+                               data[index]["_mountpoint"] = data[index]["_mountpoint"] .."/" .. v1:sub(1,12) .. "..."
+                       else
+                               data[index]["_mountpoint"] = (data[index]["_mountpoint"] and data[index]["_mountpoint"] or "").."/".. v1
+                       end
+               end
+               data[index]["_created"] = v.CreatedAt
+       end
+
+       return data
+end
+
+res = dk.volumes:list()
+if res.code <300 then
+       volumes = res.body.Volumes
+else
+       return
+end
+
+res = dk.containers:list({
+       query = {
+               all=true
+       }
+})
+if res.code <300 then
+       containers = res.body
+else
+       return
 end
 
 local volume_list = get_volumes()
 
--- m = Map("docker", translate("Docker"))
 m = SimpleForm("docker", translate("Docker"))
 m.submit=false
 m.reset=false
 
+s = m:section(Table, volume_list, translate("Volumes"))
 
-volume_table = m:section(Table, volume_list, translate("Volumes"))
+o = s:option(Flag, "_selected","")
+o.disabled = 0
+o.enabled = 1
+o.default = 0
+o.write = function(self, section, value)
+       volume_list[section]._selected = value
+end
 
-volume_selecter = volume_table:option(Flag, "_selected","")
-volume_selecter.disabled = 0
-volume_selecter.enabled = 1
-volume_selecter.default = 0
+o = s:option(DummyValue, "_name", translate("Name"))
 
-volume_id = volume_table:option(DummyValue, "_name", translate("Name"))
-volume_table:option(DummyValue, "_driver", translate("Driver"))
-volume_table:option(DummyValue, "_containers", translate("Containers")).rawhtml = true
-volume_table:option(DummyValue, "_mountpoint", translate("Mount Point"))
-volume_table:option(DummyValue, "_created", translate("Created"))
-volume_selecter.write = function(self, section, value)
-  volume_list[section]._selected = value
+o = s:option(DummyValue, "_driver", translate("Driver"))
+
+o = s:option(DummyValue, "_containers", translate("Containers"))
+o.rawhtml = true
+
+o = s:option(DummyValue, "_mountpoint", translate("Mount Point"))
+
+o = s:option(DummyValue, "_created", translate("Created"))
+
+s = m:section(SimpleSection)
+s.template = "dockerman/apply_widget"
+s.err=docker:read_status()
+s.err=s.err and s.err:gsub("\n","<br>"):gsub(" ","&nbsp;")
+if s.err then
+       docker:clear_status()
 end
 
-docker_status = m:section(SimpleSection)
-docker_status.template = "dockerman/apply_widget"
-docker_status.err=docker:read_status()
-docker_status.err=docker_status.err and docker_status.err:gsub("\n","<br>"):gsub(" ","&nbsp;")
-if docker_status.err then docker:clear_status() end
-
-action = m:section(Table,{{}})
-action.notitle=true
-action.rowcolors=false
-action.template="cbi/nullsection"
-btnremove = action:option(Button, "remove")
-btnremove.inputtitle= translate("Remove")
-btnremove.template = "dockerman/cbi/inlinebutton"
-btnremove.inputstyle = "remove"
-btnremove.forcewrite = true
-btnremove.write = function(self, section)
-  local volume_selected = {}
-  -- 遍历table中sectionid
-  local volume_table_sids = volume_table:cfgsections()
-  for _, volume_table_sid in ipairs(volume_table_sids) do
-    -- 得到选中项的名字
-    if volume_list[volume_table_sid]._selected == 1 then
-      -- volume_selected[#volume_selected+1] = volume_id:cfgvalue(volume_table_sid)
-      volume_selected[#volume_selected+1] = volume_table_sid
-    end
-  end
-  if next(volume_selected) ~= nil then
-    local success = true
-    docker:clear_status()
-    for _,vol in ipairs(volume_selected) do
-      docker:append_status("Volumes: " .. "remove" .. " " .. vol .. "...")
-      local msg = dk.volumes["remove"](dk, {id = vol})
-      if msg.code ~= 204 then
-        docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n")
-        success = false
-      else
-        docker:append_status("done\n")
-      end
-    end
-    if success then docker:clear_status() end
-    luci.http.redirect(luci.dispatcher.build_url("admin/docker/volumes"))
-  end
+s = m:section(Table,{{}})
+s.notitle=true
+s.rowcolors=false
+s.template="cbi/nullsection"
+
+o = s:option(Button, "remove")
+o.inputtitle= translate("Remove")
+o.template = "dockerman/cbi/inlinebutton"
+o.inputstyle = "remove"
+o.forcewrite = true
+o.write = function(self, section)
+       local volume_selected = {}
+
+       for _, volume_table_sid in ipairs(volume_list) do
+               if volume_list[volume_table_sid]._selected == 1 then
+                       volume_selected[#volume_selected+1] = volume_table_sid
+               end
+       end
+
+       if next(volume_selected) ~= nil then
+               local success = true
+               docker:clear_status()
+               for _,vol in ipairs(volume_selected) do
+                       docker:append_status("Volumes: " .. "remove" .. " " .. vol .. "...")
+                       local msg = dk.volumes["remove"](dk, {id = vol})
+                       if msg.code ~= 204 then
+                               docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n")
+                               success = false
+                       else
+                               docker:append_status("done\n")
+                       end
+               end
+
+               if success then
+                       docker:clear_status()
+               end
+               luci.http.redirect(luci.dispatcher.build_url("admin/docker/volumes"))
+       end
 end
+
 return m