Last active
November 26, 2019 07:13
-
-
Save jjmaestro/5774063 to your computer and use it in GitHub Desktop.
whisper-calculator.py:
Calculates the size of the whisper storage for the given retention (in frequency:history format)
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 python | |
# -*- coding: utf-8 -*- | |
def archive_to_bytes(archive): | |
def to_seconds(s): | |
SECONDS_IN_A = { | |
's': 1, | |
'm': 1 * 60, | |
'h': 1 * 60 * 60, | |
'd': 1 * 60 * 60 * 24, | |
'y': 1 * 60 * 60 * 24 * 365, | |
} | |
return int(s[:-1]) * SECONDS_IN_A[s[-1]] | |
archive = [map(to_seconds, point.split(':')) | |
for point in args.archive.split(',')] | |
SIZE_METADATA = 2 * 4 + 4 + 4 # 16 [!2LfL] | |
SIZE_ARCHIVE_INFO = 3 * 4 # 12 [!3L]+ | |
SIZE_POINT = 4 + 8 # 12 [!Ld]+ | |
size = 0 | |
for resolution, retention in archive: | |
size += SIZE_ARCHIVE_INFO + SIZE_POINT * retention/resolution | |
if size: | |
size += SIZE_METADATA | |
return size | |
if __name__ == '__main__': | |
import argparse | |
parser = argparse.ArgumentParser( | |
description="Calculates the size of the whisper storage for the given \ | |
archive (in resolution:retention format, e.g. 1m:24h,5m:3m)" | |
) | |
parser.add_argument( | |
'archive', | |
help="Archive in storage-schemas.conf format (resolution:retention)" | |
) | |
args = parser.parse_args() | |
print "{} >> {} bytes".format(args.archive, archive_to_bytes(args.archive)) |
Very nice :)
Would you try to pull request to get into whisper contrib ?
See : https://github.com/graphite-project/whisper/tree/master/contrib
Thanks for your script, it came handy today!
Note : I just forked it to add support for weeks.
I got this error running Python 2.6.6
Traceback (most recent call last):
File "/export/home/mark-c/bin/whisper-calculator.py", line 48, in <module>
print "{} >> {} bytes".format(args.archive, archive_to_bytes(args.archive))
ValueError: zero length field name in format
To resolve this I added indices to the format tokens (as older versions of Python require) on line 48 to read:
print "{0} >> {1} bytes".format(args.archive, archive_to_bytes(args.archive))
Just made a simple UI for it:
http://alex-mercer.github.io/whisper-calculator/
@m30m Where's the UI gone? I used to use that lots :(
@m30m please check, very useful tool, shame it is not available any more
Still available here: http://m30m.github.io/whisper-calculator/
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just made the script executable (chmod 755 :)