Mercurial > hg > Lemuriformes
comparison lemuriformes/table_size.py @ 17:4793f99b73e0
[lemuriformes] utility functions
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Sun, 10 Dec 2017 17:42:52 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 16:9b1bb9eee962 | 17:4793f99b73e0 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 # -*- coding: utf-8 -*- | |
| 3 | |
| 4 """ | |
| 5 monitor SQL table size | |
| 6 """ | |
| 7 | |
| 8 import argparse | |
| 9 import csv | |
| 10 import os | |
| 11 import sys | |
| 12 import time | |
| 13 from .cli import ConfigurationParser | |
| 14 from .url2sql import url2sql | |
| 15 | |
| 16 | |
| 17 def main(args=sys.argv[1:]): | |
| 18 """CLI""" | |
| 19 | |
| 20 # parse command line | |
| 21 parser = ConfigurationParser(description=__doc__) | |
| 22 parser.add_argument('database', type=url2sql, | |
| 23 help="URL of SQL database to connect to") | |
| 24 parser.add_argument('table', | |
| 25 help="table to read sizes of") | |
| 26 parser.add_argument('-o', '--output', dest='output', | |
| 27 type=argparse.FileType('a'), default=sys.stdout, | |
| 28 help="CSV output file; stdout by default") | |
| 29 parser.add_argument('-w', '--wait', dest='wait', | |
| 30 type=float, default=60., | |
| 31 help="how long to wait between calls in seconds [DEFAULT: %(default)s]") | |
| 32 options = parser.parse_args(args) | |
| 33 | |
| 34 # ensure table is part of database | |
| 35 db = options.database | |
| 36 tables = db.tables() | |
| 37 if options.table not in tables: | |
| 38 parser.error("Table '{}' not in database tables: {}".format(options.table, | |
| 39 ', '.join(tables))) | |
| 40 | |
| 41 # instantiate writer | |
| 42 writer = csv.writer(options.output) | |
| 43 | |
| 44 # get initial data | |
| 45 previous = db.count(options.table) | |
| 46 end = time.time() | |
| 47 time.sleep(options.wait) | |
| 48 | |
| 49 while True: | |
| 50 try: | |
| 51 start = time.time() | |
| 52 count = db.count(options.table) | |
| 53 rate = (count - previous)/(start-end) | |
| 54 writer.writerow([start, count, rate]) | |
| 55 options.output.flush() | |
| 56 end = start | |
| 57 previous = count | |
| 58 time.sleep(options.wait - (time.time() - start)) | |
| 59 except KeyboardInterrupt: | |
| 60 break | |
| 61 | |
| 62 if __name__ == '__main__': | |
| 63 main() |
