Created
February 9, 2017 03:36
-
-
Save bbengfort/12f29fd1fa0652ffabfb5d24d76d7b1d to your computer and use it in GitHub Desktop.
Visualizing chunks spit out by FluidFS offsets.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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