initial commit
This commit is contained in:
138
docker.py
Normal file
138
docker.py
Normal file
@@ -0,0 +1,138 @@
|
||||
import subprocess
|
||||
import json
|
||||
|
||||
def health():
|
||||
result = subprocess.run(['docker', 'ps', '-a', '--format', 'json', '--no-trunc'], stdout=subprocess.PIPE)
|
||||
result = str(result.stdout)[:-1].replace("b'", "").replace('\\"', '').replace('\\', '').replace("u003e", ">").split('{"Command"')
|
||||
|
||||
ret_dict = {}
|
||||
|
||||
for container in result:
|
||||
if container != "":
|
||||
j = '{"Command"'+container[:-1]
|
||||
data = json.loads(j)
|
||||
ret_dict[data["Names"]] = {}
|
||||
if data["State"] == "running":
|
||||
ret_dict[data["Names"]]["status"] = 1
|
||||
else:
|
||||
ret_dict[data["Names"]]["status"] = 0
|
||||
if "unhealthy" in data["Status"]:
|
||||
ret_dict[data["Names"]]["health"] = 3
|
||||
elif "Restarting" in data["Status"]:
|
||||
ret_dict[data["Names"]]["health"] = 2
|
||||
elif "healthy" in data["Status"]:
|
||||
ret_dict[data["Names"]]["health"] = 0
|
||||
elif "starting" in data["Status"]:
|
||||
ret_dict[data["Names"]]["health"] = 1
|
||||
else:
|
||||
ret_dict[data["Names"]]["health"] = -1
|
||||
|
||||
|
||||
return ret_dict
|
||||
|
||||
def _sizeConv(value):
|
||||
number = ""
|
||||
for d in value:
|
||||
if d.isdigit():
|
||||
number += d
|
||||
elif d == '.':
|
||||
number += d
|
||||
else:
|
||||
continue
|
||||
number = float(number)
|
||||
if "TB" in value:
|
||||
return number * 10**12
|
||||
elif "GB" in value:
|
||||
return number * 10**9
|
||||
elif "MB" in value:
|
||||
return number * 10**6
|
||||
elif "KB" in value:
|
||||
return number * 10**3
|
||||
else:
|
||||
return number
|
||||
|
||||
def getSize():
|
||||
result = subprocess.run(['docker', 'system', 'df', '--format', 'json'], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-1].split('\n')
|
||||
|
||||
size = {}
|
||||
|
||||
for line in result:
|
||||
a = json.loads(line)
|
||||
size[a["Type"]] = {}
|
||||
size[a["Type"]]["used"] = _sizeConv(a["Size"])
|
||||
size[a["Type"]]["reclaimable"] = _sizeConv(a["Reclaimable"].split(" ")[0])
|
||||
size[a["Type"]]["count_total"] = a["TotalCount"]
|
||||
size[a["Type"]]["count_active"] = a["Active"]
|
||||
|
||||
return size
|
||||
|
||||
def getInfo():
|
||||
docker = {}
|
||||
|
||||
result = subprocess.run(['docker', 'system', 'info', '--format', 'json'], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')[:-1]
|
||||
info = json.loads(result)
|
||||
|
||||
docker["version"] = info["ServerVersion"]
|
||||
|
||||
result = subprocess.run(['docker', 'system', 'df', '-v', '--format', 'json'], stdout=subprocess.PIPE)
|
||||
result = result.stdout.decode('utf-8')
|
||||
info = json.loads(result)
|
||||
|
||||
docker["images"] = {}
|
||||
docker["containers"] = {}
|
||||
docker["volumes"] = {}
|
||||
docker["buildcache"] = {}
|
||||
|
||||
for image in info["Images"]:
|
||||
docker["images"][image["ID"]] = {}
|
||||
docker["images"][image["ID"]]["containers"] = image["Containers"]
|
||||
docker["images"][image["ID"]]["created"] = image["CreatedSince"]
|
||||
docker["images"][image["ID"]]["repository"] = image["Repository"]
|
||||
docker["images"][image["ID"]]["size"] = _sizeConv(image["Size"])
|
||||
docker["images"][image["ID"]]["unique_size"] = image["UniqueSize"]
|
||||
|
||||
for container in info["Containers"]:
|
||||
docker["containers"][container["ID"]] = {}
|
||||
docker["containers"][container["ID"]]["created"] = container["CreatedAt"]
|
||||
docker["containers"][container["ID"]]["image"] = container["Image"]
|
||||
docker["containers"][container["ID"]]["volumes"] = container["LocalVolumes"]
|
||||
docker["containers"][container["ID"]]["mounts"] = container["Mounts"]
|
||||
try:
|
||||
docker["containers"][container["ID"]]["name"] = container["Names"]
|
||||
except:
|
||||
docker["containers"][container["ID"]]["name"] = ""
|
||||
try:
|
||||
docker["containers"][container["ID"]]["networks"] = container["Networks"]
|
||||
except:
|
||||
docker["containers"][container["ID"]]["networks"] = ""
|
||||
docker["containers"][container["ID"]]["runtime"] = container["RunningFor"]
|
||||
docker["containers"][container["ID"]]["state"] = container["State"]
|
||||
docker["containers"][container["ID"]]["size"] = _sizeConv(container["Size"])
|
||||
docker["containers"][container["ID"]]["status"] = container["Status"]
|
||||
|
||||
for volume in info["Volumes"]:
|
||||
docker["volumes"][volume["Name"]] = {}
|
||||
docker["volumes"][volume["Name"]]["driver"] = volume["Driver"]
|
||||
docker["volumes"][volume["Name"]]["links"] = volume["Links"]
|
||||
docker["volumes"][volume["Name"]]["mountpoint"] = volume["Mountpoint"]
|
||||
docker["volumes"][volume["Name"]]["size"] = _sizeConv(volume["Size"])
|
||||
|
||||
for build in info["BuildCache"]:
|
||||
docker["buildcache"][build["ID"]] = {}
|
||||
docker["buildcache"][build["ID"]]["type"] = build["CacheType"]
|
||||
docker["buildcache"][build["ID"]]["created"] = build["CreatedSince"]
|
||||
docker["buildcache"][build["ID"]]["in_use"] = build["InUse"]
|
||||
docker["buildcache"][build["ID"]]["last_use"] = build["LastUsedSince"]
|
||||
docker["buildcache"][build["ID"]]["shared"] = build["Shared"]
|
||||
docker["buildcache"][build["ID"]]["size"] = _sizeConv(build["Size"])
|
||||
docker["buildcache"][build["ID"]]["use_count"] = build["UsageCount"]
|
||||
|
||||
return docker
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(json.dumps(getSize()))
|
||||
print(json.dumps(getInfo()))
|
||||
|
||||
#print(health())
|
||||
Reference in New Issue
Block a user