summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua
blob: 0c2dbd365ec916d679c3f77ca0e99c6189a5bd5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
--[[
LuCI - Lua Configuration Interface
Copyright 2019 lisaac <https://github.com/lisaac/luci-app-dockerman>
]]--

require "luci.util"
local docker = require "luci.model.docker"
local uci = require "luci.model.uci"

function byte_format(byte)
  local suff = {"B", "KB", "MB", "GB", "TB"}
  for i=1, 5 do
    if byte > 1024 and i < 5 then
      byte = byte / 1024
    else
      return string.format("%.2f %s", byte, suff[i])
    end
  end
end

local map_dockerman = Map("dockerman", translate("Docker"), translate("DockerMan is a Simple Docker manager client for LuCI, If you have any issue please visit:") .. " ".. [[<a href="https://github.com/lisaac/luci-app-dockerman" target="_blank">]] ..translate("Github") .. [[</a>]])
local docker_info_table = {}
-- docker_info_table['0OperatingSystem'] = {_key=translate("Operating System"),_value='-'}
-- docker_info_table['1Architecture'] = {_key=translate("Architecture"),_value='-'}
-- docker_info_table['2KernelVersion'] = {_key=translate("Kernel Version"),_value='-'}
docker_info_table['3ServerVersion'] = {_key=translate("Docker Version"),_value='-'}
docker_info_table['4ApiVersion'] = {_key=translate("Api Version"),_value='-'}
docker_info_table['5NCPU'] = {_key=translate("CPUs"),_value='-'}
docker_info_table['6MemTotal'] = {_key=translate("Total Memory"),_value='-'}
docker_info_table['7DockerRootDir'] = {_key=translate("Docker Root Dir"),_value='-'}
docker_info_table['8IndexServerAddress'] = {_key=translate("Index Server Address"),_value='-'}
docker_info_table['9RegistryMirrors'] = {_key=translate("Registry Mirrors"),_value='-'}

local s = map_dockerman:section(Table, docker_info_table)
s:option(DummyValue, "_key", translate("Info"))
s:option(DummyValue, "_value")
s = map_dockerman:section(SimpleSection)
s.containers_running = '-'
s.images_used = '-'
s.containers_total = '-'
s.images_total = '-'
s.networks_total = '-'
s.volumes_total = '-'
local containers_list
-- local socket = luci.model.uci.cursor():get("dockerman", "local", "socket_path")
if (require "luci.model.docker").new():_ping().code == 200 then
  local dk = docker.new()
  containers_list = dk.containers:list({query = {all=true}}).body
  local images_list = dk.images:list().body
  local vol = dk.volumes:list()
  local volumes_list = vol and vol.body and vol.body.Volumes or {}
  local networks_list = dk.networks:list().body or {}
  local docker_info = dk:info()
  -- docker_info_table['0OperatingSystem']._value = docker_info.body.OperatingSystem
  -- docker_info_table['1Architecture']._value = docker_info.body.Architecture
  -- docker_info_table['2KernelVersion']._value = docker_info.body.KernelVersion
  docker_info_table['3ServerVersion']._value = docker_info.body.ServerVersion
  docker_info_table['4ApiVersion']._value = docker_info.headers["Api-Version"]
  docker_info_table['5NCPU']._value = tostring(docker_info.body.NCPU)
  docker_info_table['6MemTotal']._value = byte_format(docker_info.body.MemTotal)
  if docker_info.body.DockerRootDir then
    local statvfs = nixio.fs.statvfs(docker_info.body.DockerRootDir)
    local size = statvfs and (statvfs.bavail * statvfs.bsize) or 0
    docker_info_table['7DockerRootDir']._value = docker_info.body.DockerRootDir .. " (" .. tostring(byte_format(size)) .. " " .. translate("Available") .. ")"
  end
  docker_info_table['8IndexServerAddress']._value = docker_info.body.IndexServerAddress
  for i, v in ipairs(docker_info.body.RegistryConfig.Mirrors) do
    docker_info_table['9RegistryMirrors']._value = docker_info_table['9RegistryMirrors']._value == "-" and v or (docker_info_table['9RegistryMirrors']._value .. ", " .. v)
  end

  s.images_used = 0
  for i, v in ipairs(images_list) do
    for ci,cv in ipairs(containers_list) do
      if v.Id == cv.ImageID then
        s.images_used = s.images_used + 1
        break
      end
    end
  end
  s.containers_running = tostring(docker_info.body.ContainersRunning)
  s.images_used = tostring(s.images_used)
  s.containers_total = tostring(docker_info.body.Containers)
  s.images_total = tostring(#images_list)
  s.networks_total = tostring(#networks_list)
  s.volumes_total = tostring(#volumes_list)
end
s.template = "dockerman/overview"

local section_dockerman = map_dockerman:section(NamedSection, "local", "section", translate("Setting"))
section_dockerman:tab("daemon", translate("Docker Daemon"))
section_dockerman:tab("ac", translate("Access Control"))
section_dockerman:tab("dockerman",  translate("DockerMan"))

local socket_path = section_dockerman:taboption("dockerman", Value, "socket_path", translate("Docker Socket Path"))
socket_path.default = "/var/run/docker.sock"
socket_path.placeholder = "/var/run/docker.sock"
socket_path.rmempty = false

local remote_endpoint = section_dockerman:taboption("dockerman", Flag, "remote_endpoint", translate("Remote Endpoint"), translate("Dockerman connect to remote endpoint"))
remote_endpoint.rmempty = false
remote_endpoint.enabled = "true"
remote_endpoint.disabled = "false"

local remote_host = section_dockerman:taboption("dockerman", Value, "remote_host", translate("Remote Host"))
remote_host.placeholder = "10.1.1.2"
-- remote_host:depends("remote_endpoint", "true")

local remote_port = section_dockerman:taboption("dockerman", Value, "remote_port", translate("Remote Port"))
remote_port.placeholder = "2375"
remote_port.default = "2375"
-- remote_port:depends("remote_endpoint", "true")

-- local status_path = section_dockerman:taboption("dockerman", Value, "status_path", translate("Action Status Tempfile Path"), translate("Where you want to save the docker status file"))
-- local debug = section_dockerman:taboption("dockerman", Flag, "debug", translate("Enable Debug"), translate("For debug, It shows all docker API actions of luci-app-dockerman in Debug Tempfile Path"))
-- debug.enabled="true"
-- debug.disabled="false"
-- local debug_path = section_dockerman:taboption("dockerman", Value, "debug_path", translate("Debug Tempfile Path"), translate("Where you want to save the debug tempfile"))

if nixio.fs.access("/usr/bin/dockerd") then
  local dockerd_enable = section_dockerman:taboption("daemon", Flag, "daemon_ea", translate("Enable"))
  dockerd_enable.enabled = "true"
  dockerd_enable.rmempty = true
  local data_root = section_dockerman:taboption("daemon", Value, "daemon_data_root", translate("Docker Root Dir"))
  data_root.placeholder = "/opt/docker/"
  local registry_mirrors = section_dockerman:taboption("daemon", DynamicList, "daemon_registry_mirrors", translate("Registry Mirrors"))
  registry_mirrors:value("https://hub-mirror.c.163.com", "https://hub-mirror.c.163.com")

  local log_level = section_dockerman:taboption("daemon", ListValue, "daemon_log_level", translate("Log Level"), translate('Set the logging level'))
  log_level:value("debug", "debug")
  log_level:value("info", "info")
  log_level:value("warn", "warn")
  log_level:value("error", "error")
  log_level:value("fatal", "fatal")
  local hosts = section_dockerman:taboption("daemon", DynamicList, "daemon_hosts", translate("Server Host"), translate('Daemon unix socket (unix:///var/run/docker.sock) or TCP Remote Hosts (tcp://0.0.0.0:2375), default: unix:///var/run/docker.sock'))
  hosts:value("unix:///var/run/docker.sock", "unix:///var/run/docker.sock")
  hosts:value("tcp://0.0.0.0:2375", "tcp://0.0.0.0:2375")
  hosts.rmempty = true
end
return map_dockerman