Skip to content

Instantly share code, notes, and snippets.

@bbengfort
Created February 9, 2017 03:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbengfort/12f29fd1fa0652ffabfb5d24d76d7b1d to your computer and use it in GitHub Desktop.
Save bbengfort/12f29fd1fa0652ffabfb5d24d76d7b1d to your computer and use it in GitHub Desktop.
Visualizing chunks spit out by FluidFS offsets.
#!/usr/bin/env python3
import re
import os
import argparse
from itertools import cycle
from collections import namedtuple
TURQUOISE = "rgba(26, 188, 156,0.45)"
EMERALD = "rgba(46, 204, 113,0.45)"
PETER_RIVER = "rgba(52, 152, 219,0.45)"
AMETHYST = "rgba(155, 89, 182,0.45)"
ASPHALT = "rgba(52, 73, 94,0.45)"
GREEN = "rgba(22, 160, 133,0.45)"
NEPHRITIS = "rgba(39, 174, 96,0.45)"
BELIZE = "rgba(41, 128, 185,0.45)"
WISTERIA = "rgba(142, 68, 173,0.45)"
MIDNIGHT = "rgba(44, 62, 80,0.45)"
SUN = "rgba(241, 196, 15,0.45)"
CARROT = "rgba(230, 126, 34,0.45)"
ALIZARIN = "rgba(231, 76, 60,0.45)"
CLOUDS = "rgba(236, 240, 241,0.45)"
CONCRETE = "rgba(149, 165, 166,0.45)"
ORANGE = "rgba(243, 156, 18,0.45)"
PUMPKIN = "rgba(211, 84, 0,0.45)"
POMEGRANATE = "rgba(192, 57, 43,0.45)"
SILVER = "rgba(189, 195, 199,0.45)"
ASBESTOS = "rgba(127, 140, 141,0.45)"
Chunk = namedtuple('Chunk', 'id,start,end')
offln = re.compile(r'^\s*Block (\d+): (\d+) to (\d+)$', re.I)
colors = cycle([ALIZARIN, SUN, TURQUOISE, AMETHYST])
tmpl = """
<html>
<head>
<title>Chunk Visualization</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<div class="container" style="margin: 20px 20px;">
<div class="row">
<div class="col-xs-12">
<div id="chunks" style="white-space: pre-wrap; color: #333; line-height: 1.15em; font-size: 16px;">{}</div>
</div>
</div>
</div>
</body>
</html>
"""
def read_chunks(path):
with open(path, 'r') as f:
for line in f:
match = offln.match(line)
if match:
yield Chunk(*map(int, match.groups()))
def make_chunk_html(src, offsets, output=None):
chunks = list(read_chunks(offsets))
with open(src, 'r') as f:
data = f.read()
# Right now just assume text data ...
html = ""
for chunk in chunks:
html += "<span style=\"background-color: {};\">{}</span>".format(
next(colors), data[chunk.start:chunk.end]
)
if output is None:
name, ext = os.path.splitext(src)
output = name + ".html"
html = tmpl.format(html)
with open(output, 'w') as f:
f.write(html)
print("chunks visualized at {}".format(output))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='FluidFS chunks visualizer')
args = (
(("src",), {
"nargs":1, "type":str, "help":"path to the source file",
}),
(("offsets",), {
"nargs":1, "type":str, "help":"path to the offsets file",
}),
(("-o", "--output"), {
"default":None, "type":str, "metavar": "PATH",
"help":"path to write html visualiztion to"
})
)
for pargs, kwargs in args:
parser.add_argument(*pargs, **kwargs)
args = parser.parse_args()
make_chunk_html(args.src[0], args.offsets[0], output=args.output)
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non mauris vel lacus accumsan interdum nec vitae sapien. Mauris molestie arcu ipsum, ac molestie magna finibus et. Nam non libero neque. Nam laoreet congue sagittis. Nunc a lorem risus. In tempor auctor vehicula. Duis ac mollis purus. Donec venenatis tristique tortor et ultricies. Fusce aliquet elementum blandit. Mauris a porta ipsum, vel porttitor odio. Duis non purus eu neque pretium finibus. Cras tempor libero eget lacus fringilla, eget ornare lectus elementum. Sed quis vulputate lorem, non mollis nisl.
Maecenas aliquet volutpat vehicula. Phasellus blandit velit lectus, vitae egestas dui tempor a. Maecenas commodo ipsum nec odio faucibus, aliquet condimentum neque luctus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus laoreet quam, ut dignissim massa pulvinar sit amet. Nulla facilisi. Nam eu tortor nec erat hendrerit consectetur sed sed justo. Fusce in vehicula erat, eu facilisis sem. Suspendisse tempor odio sed diam cursus, a pharetra turpis efficitur. In nec gravida mauris. Quisque auctor maximus mauris, finibus mollis leo condimentum vitae. Praesent non ligula non sapien vehicula tristique sed at felis.
Aliquam risus nisi, porta quis tincidunt sit amet, feugiat eget orci. Nullam dapibus, erat et eleifend hendrerit, sem nulla scelerisque lectus, eu mattis nunc nunc id libero. Suspendisse potenti. Nam scelerisque orci vel cursus iaculis. Donec imperdiet consequat turpis, vel ultrices sem aliquet et. Cras tellus nisl, cursus at libero vel, imperdiet congue odio. Pellentesque vel quam ex.
Curabitur ullamcorper, justo et posuere laoreet, eros nisl convallis ex, non vehicula mi turpis nec turpis. Quisque tempus nec tellus a suscipit. Nulla egestas egestas lorem. Donec blandit massa eu pellentesque ornare. Phasellus tincidunt scelerisque nisl, nec mollis quam iaculis ac. Pellentesque luctus sem justo, quis vulputate ipsum ornare congue. Vestibulum sodales, turpis ut rutrum blandit, sem odio luctus magna, in finibus eros sem eu nunc. Nunc venenatis nibh vitae luctus rhoncus. Vestibulum placerat luctus nibh lacinia pretium. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et interdum odio. Praesent eget mauris id magna tincidunt finibus sed aliquam neque.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed facilisis orci vehicula, accumsan purus ac, lobortis nunc. Praesent eu dolor semper, placerat elit ac, sodales nisi. Quisque faucibus enim sit amet libero tempor, at vulputate mi euismod. Donec sit amet eros et lectus tempus dignissim. Cras dictum gravida velit, ac mattis augue feugiat et. Morbi in luctus erat, id dapibus arcu. Aliquam erat volutpat. Aenean fringilla mollis magna. Phasellus sit amet purus at sapien viverra placerat. Fusce mattis pharetra nunc, eu maximus magna malesuada nec.
Duis sagittis risus a rutrum rutrum. Vivamus auctor nisl quis ante gravida, id sollicitudin diam aliquet. Etiam pulvinar mi sit amet enim blandit, sit amet consectetur sem condimentum. Ut vel elit sed metus aliquet consectetur quis nec dolor. Donec sed neque id sem egestas elementum ut non nulla. Nulla cursus mollis metus, nec auctor tellus vehicula ac. Quisque non risus et sem posuere efficitur. Nam tristique justo nulla, non accumsan lorem hendrerit quis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras elementum diam id nisl pharetra, ut sollicitudin nisl mattis. Aliquam mattis dolor aliquet bibendum pretium. Vivamus a imperdiet urna. Maecenas sollicitudin pellentesque sem a iaculis. Vestibulum pellentesque, odio a consectetur pulvinar, nibh elit pharetra leo, ac vestibulum massa sem sit amet ligula. Integer vitae dignissim turpis. Vivamus et scelerisque leo, ultricies ullamcorper lacus. Vivamus sit amet porta mauris. Vivamus pharetra quam vel est congue dapibus. Nulla sed turpis tincidunt nibh hendrerit mollis. Nullam euismod turpis id erat posuere sed.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non mauris vel lacus accumsan interdum nec vitae sapien. Mauris molestie arcu ipsum, ac molestie magna finibus et. Nam non libero neque. Nam laoreet congue sagittis. Nunc a lorem risus. In tempor auctor vehicula. Duis ac mollis purus. Donec venenatis tristique tortor et ultricies. Fusce aliquet elementum blandit. Mauris a porta ipsum, vel porttitor odio. Duis non purus eu neque pretium finibus. Cras tempor libero eget lacus fringilla, eget ornare lectus elementum. Sed quis vulputate lorem, non mollis nisl.
Duis efficitur ac sapien sit amet sollicitudin. Etiam ac luctus odio, sit amet imperdiet odio. Suspendisse laoreet id nunc sit amet eleifend. Nulla scelerisque varius finibus. Fusce dignissim dui justo, condimentum pulvinar ante volutpat sit amet. Morbi vitae sapien a orci elementum feugiat vitae eu sapien. Aliquam a venenatis nisl, sit amet sodales arcu. Phasellus non dictum sem.
Maecenas aliquet volutpat vehicula. Phasellus blandit velit lectus, vitae egestas dui tempor a. Maecenas commodo ipsum nec odio faucibus, aliquet condimentum neque luctus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce cursus laoreet quam, ut dignissim massa pulvinar sit amet. Nulla facilisi. Nam eu tortor nec erat hendrerit consectetur sed sed justo. Fusce in vehicula erat, eu facilisis sem. Suspendisse tempor odio sed diam cursus, a pharetra turpis efficitur. In nec gravida mauris. Quisque auctor maximus mauris, finibus mollis leo condimentum vitae. Praesent non ligula non sapien vehicula tristique sed at felis.
Aliquam risus nisi, porta quis tincidunt sit amet, feugiat eget orci. Nullam dapibus, erat et eleifend hendrerit, sem nulla scelerisque lectus, eu mattis nunc nunc id libero. Suspendisse potenti. Nam scelerisque orci vel cursus iaculis. Donec imperdiet consequat turpis, vel ultrices sem aliquet et. Cras tellus nisl, cursus at libero vel, imperdiet congue odio. Pellentesque vel quam ex.
Curabitur ullamcorper, justo et posuere laoreet, eros nisl convallis ex, non vehicula mi turpis nec turpis. Quisque tempus nec tellus a suscipit. Nulla egestas egestas lorem. Donec blandit massa eu pellentesque ornare. Phasellus tincidunt scelerisque nisl, nec mollis quam iaculis ac. Pellentesque luctus sem justo, quis vulputate ipsum ornare congue. Vestibulum sodales, turpis ut rutrum blandit, sem odio luctus magna, in finibus eros sem eu nunc. Nunc venenatis nibh vitae luctus rhoncus. Vestibulum placerat luctus nibh lacinia pretium. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et interdum odio. Praesent eget mauris id magna tincidunt finibus sed aliquam neque.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed facilisis orci vehicula, accumsan purus ac, lobortis nunc. Praesent eu dolor semper, placerat elit ac, sodales nisi. Quisque faucibus enim sit amet libero tempor, at vulputate mi euismod. Donec sit amet eros et lectus tempus dignissim. Cras dictum gravida velit, ac mattis augue feugiat et. Morbi in luctus erat, id dapibus arcu. Aliquam erat volutpat. Aenean fringilla mollis magna. Phasellus sit amet purus at sapien viverra placerat. Fusce mattis pharetra nunc, eu maximus magna malesuada nec.
Duis sagittis risus a rutrum rutrum. Vivamus auctor nisl quis ante gravida, id sollicitudin diam aliquet. Etiam pulvinar mi sit amet enim blandit, sit amet consectetur sem condimentum. Ut vel elit sed metus aliquet consectetur quis nec dolor. Donec sed neque id sem egestas elementum ut non nulla. Nulla cursus mollis metus, nec auctor tellus vehicula ac. Quisque non risus et sem posuere efficitur. Nam tristique justo nulla, non accumsan lorem hendrerit quis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras elementum diam id nisl pharetra, ut sollicitudin nisl mattis. Aliquam mattis dolor aliquet bibendum pretium. Vivamus a imperdiet urna. Maecenas sollicitudin pellentesque sem a iaculis. Vestibulum pellentesque, odio a consectetur pulvinar, nibh elit pharetra leo, ac vestibulum massa sem sit amet ligula. Integer vitae dignissim turpis. Vivamus et scelerisque leo, ultricies ullamcorper lacus. Vivamus sit amet porta mauris. Vivamus pharetra quam vel est congue dapibus. Nulla sed turpis tincidunt nibh hendrerit mollis. Nullam euismod turpis id erat posuere sed.
File 1 at /Users/benjamin/Desktop/chunks/lipsum.txt (Fixed)
Block 1: 0 to 512
Block 2: 512 to 1024
Block 3: 1024 to 1536
Block 4: 1536 to 2048
Block 5: 2048 to 2560
Block 6: 2560 to 3072
Block 7: 3072 to 3584
Block 8: 3584 to 4109
File 2 at /Users/benjamin/Desktop/chunks/lipsum.txt (Variable)
Block 1: 0 to 140
Block 2: 140 to 280
Block 3: 280 to 1159
Block 4: 1159 to 1335
Block 5: 1335 to 1602
Block 6: 1602 to 2218
Block 7: 2218 to 2314
Block 8: 2314 to 2552
Block 9: 2552 to 2700
Block 10: 2700 to 3724
Block 11: 3724 to 4109
File 3 at /Users/benjamin/Desktop/chunks/lipsum_insert.txt (Fixed)
Block 1: 0 to 512
Block 2: 512 to 1024
Block 3: 1024 to 1536
Block 4: 1536 to 2048
Block 5: 2048 to 2560
Block 6: 2560 to 3072
Block 7: 3072 to 3584
Block 8: 3584 to 4096
Block 9: 4096 to 4494
File 4 at /Users/benjamin/Desktop/chunks/lipsum_insert.txt (Variable)
Block 1: 0 to 140
Block 2: 140 to 280
Block 3: 280 to 1304
Block 4: 1304 to 1544
Block 5: 1544 to 1720
Block 6: 1720 to 1987
Block 7: 1987 to 2603
Block 8: 2603 to 2699
Block 9: 2699 to 2937
Block 10: 2937 to 3085
Block 11: 3085 to 4109
Block 12: 4109 to 4494
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment