kimai2/visu.py
2020-08-13 13:50:56 -07:00

45 lines
1.2 KiB
Python
Executable File

#!/bin/python3
# python3 ./visu.py | sudo docker run --rm -i vladgolubev/dot2png > file.png && xviewer file.png
import re
conns = []
layer = ""
def parseLine(line, actual_layer):
from_re = re.match("FROM (.*) AS (.*)", line)
if from_re:
actual_layer = from_re.group(2)
if ":" in from_re.group(1):
conns.append("\"" + from_re.group(1) + "\" [shape=box]")
conn = "\"" + from_re.group(1) + "\" -> \"" + from_re.group(2) + "\""
if not conn in conns:
conns.append(conn)
copy_re = re.match("COPY --from=([a-z-_]*)", line)
if copy_re:
conn = "\"" + copy_re.group(1) + "\" -> \"" + actual_layer + "\"[style=dashed]"
if not conn in conns:
conns.append(conn)
return actual_layer
file = open("Dockerfile", "r")
conns.append("digraph {")
# conns.append("rankdir=LR;")
line = file.readline()
while line:
line = file.readline()
if "${BASE}" in line:
layer = parseLine(line.replace("${BASE}", "fpm-alpine"), layer)
layer = parseLine(line.replace("${BASE}", "apache-debian"), layer)
else:
layer = parseLine(line, layer)
conns.append("}")
for line in conns:
print(line)