54 lines
1.4 KiB
Python
Executable File
54 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# This script extracts all plans from its stdin, invokes dot on them
|
|
# to make a multi-page pdf / open to display them
|
|
#
|
|
import os
|
|
import fileinput
|
|
|
|
files = []
|
|
|
|
in_graphviz = False
|
|
|
|
# Note we combine multiple digraphs
|
|
for line in fileinput.input():
|
|
line = line.strip()
|
|
|
|
if line.startswith("// Begin DataFusion GraphViz Plan"):
|
|
filename = "/tmp/plan{}.ps".format(len(files))
|
|
files.append(filename)
|
|
f = open(filename, "w")
|
|
in_graphviz = True
|
|
|
|
if in_graphviz:
|
|
f.write(line)
|
|
f.write("\n")
|
|
|
|
if line.startswith("// End DataFusion GraphViz Plan"):
|
|
in_graphviz = False
|
|
f = None
|
|
|
|
# try to ensure any open is closed
|
|
f = None
|
|
|
|
|
|
# TODO make this not mac specific
|
|
if len(files) > 0:
|
|
#print("Found files: {}".format(files))
|
|
print("Found {} graphs, converting to ps".format(len(files)))
|
|
# convert them to ps files
|
|
ps_files = []
|
|
for file in files:
|
|
output_file = "{}.pdf".format(file)
|
|
os.system("dot -Tpdf < {} > {}.pdf".format(file, output_file))
|
|
ps_files.append(output_file)
|
|
|
|
# combine all the postscript files together
|
|
cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=/tmp/plan.pdf {}".format(" ".join(ps_files))
|
|
|
|
print("Running command:", cmd)
|
|
os.system(cmd)
|
|
|
|
print("Opening with system viewer")
|
|
os.system('open /tmp/plan.pdf')
|