Skip to content

Instantly share code, notes, and snippets.

@jjmaestro
Last active November 26, 2019 07:13
Show Gist options
  • Save jjmaestro/5774063 to your computer and use it in GitHub Desktop.
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)
#!/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))
@jjmaestro
Copy link
Author

Just made the script executable (chmod 755 :)

@arnaudmm
Copy link

arnaudmm commented Aug 1, 2014

Very nice :)
Would you try to pull request to get into whisper contrib ?
See : https://github.com/graphite-project/whisper/tree/master/contrib

@ndemengel
Copy link

Thanks for your script, it came handy today!

Note : I just forked it to add support for weeks.

@mrmanc
Copy link

mrmanc commented Oct 6, 2015

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))

@m30m
Copy link

m30m commented Mar 22, 2016

Just made a simple UI for it:
http://alex-mercer.github.io/whisper-calculator/

@andrewgee
Copy link

@m30m Where's the UI gone? I used to use that lots :(

@sokratisg
Copy link

@m30m please check, very useful tool, shame it is not available any more

@bjorand
Copy link

bjorand commented Sep 6, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment