Mercurial > repos > shellac > guppy_basecaller
diff env/bin/cwutil @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/bin/cwutil Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -#!/Users/pldms/Development/Projects/2020/david-matthews-galaxy/guppy_basecaller/env/bin/python3 -# Author: Chris Moyer <cmoyer@newstex.com> -# Description: CloudWatch Utility -# For listing stats, creating alarms, and managing -# other CloudWatch aspects - -import boto -cw = boto.connect_cloudwatch() - -from datetime import datetime, timedelta - -def _parse_time(time_string): - """Internal function to parse a time string""" - -def _parse_dict(d_string): - result = {} - if d_string: - for d in d_string.split(","): - d = d.split(":") - result[d[0]] = d[1] - return result - -def ls(namespace=None): - """ - List metrics, optionally filtering by a specific namespace - namespace: Optional Namespace to filter on - """ - print "%-10s %-50s %s" % ("Namespace", "Metric Name", "Dimensions") - print "-"*80 - for m in cw.list_metrics(): - if namespace is None or namespace.upper() in m.namespace: - print "%-10s %-50s %s" % (m.namespace, m.name, m.dimensions) - -def stats(namespace, metric_name, dimensions=None, statistics="Average", start_time=None, end_time=None, period=60, unit=None): - """ - Lists the statistics for a specific metric - namespace: The namespace to use, usually "AWS/EC2", "AWS/SQS", etc. - metric_name: The name of the metric to track, pulled from `ls` - dimensions: The dimensions to use, formatted as Name:Value (such as QueueName:myQueue) - statistics: The statistics to measure, defaults to "Average" - 'Minimum', 'Maximum', 'Sum', 'Average', 'SampleCount' - start_time: Start time, default to now - 1 day - end_time: End time, default to now - period: Period/interval for counts, default to 60 minutes - unit: Unit to track, default depends on what metric is being tracked - """ - - # Parse the dimensions - dimensions = _parse_dict(dimensions) - - # Parse the times - if end_time: - end_time = _parse_time(end_time) - else: - end_time = datetime.utcnow() - if start_time: - start_time = _parse_time(start_time) - else: - start_time = datetime.utcnow() - timedelta(days=1) - - print "%-30s %s" % ('Timestamp', statistics) - print "-"*50 - data = {} - for m in cw.get_metric_statistics(int(period), start_time, end_time, metric_name, namespace, statistics, dimensions, unit): - data[m['Timestamp']] = m[statistics] - keys = data.keys() - keys.sort() - for k in keys: - print "%-30s %s" % (k, data[k]) - -def put(namespace, metric_name, dimensions=None, value=None, unit=None, statistics=None, timestamp=None): - """ - Publish custom metrics - namespace: The namespace to use; values starting with "AWS/" are reserved - metric_name: The name of the metric to update - dimensions: The dimensions to use, formatted as Name:Value (such as QueueName:myQueue) - value: The value to store, mutually exclusive with `statistics` - statistics: The statistics to store, mutually exclusive with `value` - (must specify all of "Minimum", "Maximum", "Sum", "SampleCount") - timestamp: The timestamp of this measurement, default is current server time - unit: Unit to track, default depends on what metric is being tracked - """ - - def simplify(lst): - return lst[0] if len(lst) == 1 else lst - - print cw.put_metric_data(namespace, simplify(metric_name.split(';')), - dimensions = simplify(map(_parse_dict, dimensions.split(';'))) if dimensions else None, - value = simplify(value.split(';')) if value else None, - statistics = simplify(map(_parse_dict, statistics.split(';'))) if statistics else None, - timestamp = simplify(timestamp.split(';')) if timestamp else None, - unit = simplify(unit.split(';')) if unit else None) - -def help(fnc=None): - """ - Print help message, optionally about a specific function - """ - import inspect - self = sys.modules['__main__'] - if fnc: - try: - cmd = getattr(self, fnc) - except: - cmd = None - if not inspect.isfunction(cmd): - print "No function named: %s found" % fnc - sys.exit(2) - (args, varargs, varkw, defaults) = inspect.getargspec(cmd) - print cmd.__doc__ - print "Usage: %s %s" % (fnc, " ".join([ "[%s]" % a for a in args])) - else: - print "Usage: cwutil [command]" - for cname in dir(self): - if not cname.startswith("_") and not cname == "cmd": - cmd = getattr(self, cname) - if inspect.isfunction(cmd): - doc = cmd.__doc__ - print "\t%s - %s" % (cname, doc) - sys.exit(1) - - -if __name__ == "__main__": - import sys - self = sys.modules['__main__'] - if len(sys.argv) >= 2: - try: - cmd = getattr(self, sys.argv[1]) - except: - cmd = None - args = sys.argv[2:] - else: - cmd = help - args = [] - if not cmd: - cmd = help - try: - cmd(*args) - except TypeError as e: - print e - help(cmd.__name__)