[pkg-eucalyptus-commits] [SCM] managing cloud instances for Eucalyptus branch, master, updated. 3.0.0-alpha3-257-g1da8e3a
Garrett Holmstrom
gholms at fedoraproject.org
Sun Jun 16 02:30:45 UTC 2013
The following commit has been merged in the master branch:
commit 9f0ae969fe9cabff30c721aaa67e7dce17d2bf0e
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date: Wed Mar 20 17:55:10 2013 -0700
Implement DescribeAlarmsForMetric
Fixes TOOLS-260
diff --git a/bin/euwatch-describe-alarms-for-metric b/bin/euwatch-describe-alarms-for-metric
new file mode 100755
index 0000000..295078f
--- /dev/null
+++ b/bin/euwatch-describe-alarms-for-metric
@@ -0,0 +1,6 @@
+#!/usr/bin/python -tt
+
+import euca2ools.commands.monitoring.describealarmsformetric
+
+if __name__ == '__main__':
+ euca2ools.commands.monitoring.describealarmsformetric.DescribeAlarmsForMetric.run()
diff --git a/euca2ools/commands/monitoring/__init__.py b/euca2ools/commands/monitoring/__init__.py
index 7acaeb5..694ccd7 100644
--- a/euca2ools/commands/monitoring/__init__.py
+++ b/euca2ools/commands/monitoring/__init__.py
@@ -67,3 +67,36 @@ class CloudWatchRequest(requestbuilder.request.AWSQueryRequest):
return response_dict[useful_keys[0]]
else:
return response_dict
+
+ def print_alarm(self, alarm):
+ bits = [alarm.get('AlarmName')]
+ if self.args['show_long']:
+ bits.append(alarm.get('AlarmDescription'))
+ bits.append(alarm.get('StateValue'))
+ if self.args['show_long']:
+ bits.append(alarm.get('StateReason'))
+ bits.append(alarm.get('StateReasonData'))
+ bits.append(alarm.get('ActionsEnabled'))
+ bits.append(','.join(alarm.get('OKActions', [])))
+ bits.append(','.join(alarm.get('AlarmActions', [])))
+ if self.args['show_long']:
+ bits.append(','.join(alarm.get('InsufficientDataActions', [])))
+ bits.append(alarm.get('Namespace'))
+ bits.append(alarm.get('MetricName'))
+ if self.args['show_long']:
+ dimensions = []
+ for dimension in alarm.get('Dimensions', []):
+ dimensions.append('{0}={1}'.format(dimension.get('Name'),
+ dimension.get('Value')))
+ if len(dimensions) > 0:
+ bits.append('{{{0}}}'.format(','.join(dimensions)))
+ else:
+ bits.append(None)
+ bits.append(alarm.get('Period'))
+ bits.append(alarm.get('Statistic'))
+ if self.args['show_long']:
+ bits.append(alarm.get('Unit'))
+ bits.append(alarm.get('EvaluationPeriods'))
+ bits.append(alarm.get('ComparisonOperator'))
+ bits.append(alarm.get('Threshold'))
+ print self.tabify(bits)
diff --git a/euca2ools/commands/monitoring/describealarms.py b/euca2ools/commands/monitoring/describealarms.py
index 3a39ab1..d28aaba 100644
--- a/euca2ools/commands/monitoring/describealarms.py
+++ b/euca2ools/commands/monitoring/describealarms.py
@@ -64,34 +64,4 @@ class DescribeAlarms(CloudWatchRequest, TabifyingCommand):
def print_result(self, result):
for alarm in result.get('MetricAlarms', []):
- bits = [alarm.get('AlarmName')]
- if self.args['show_long']:
- bits.append(alarm.get('AlarmDescription'))
- bits.append(alarm.get('StateValue'))
- if self.args['show_long']:
- bits.append(alarm.get('StateReason'))
- bits.append(alarm.get('StateReasonData'))
- bits.append(alarm.get('ActionsEnabled'))
- bits.append(','.join(alarm.get('OKActions', [])))
- bits.append(','.join(alarm.get('AlarmActions', [])))
- if self.args['show_long']:
- bits.append(','.join(alarm.get('InsufficientDataActions', [])))
- bits.append(alarm.get('Namespace'))
- bits.append(alarm.get('MetricName'))
- if self.args['show_long']:
- dimensions = []
- for dimension in alarm.get('Dimensions', []):
- dimensions.append('{0}={1}'.format(dimension.get('Name'),
- dimension.get('Value')))
- if len(dimensions) > 0:
- bits.append('{{{0}}}'.format(','.join(dimensions)))
- else:
- bits.append(None)
- bits.append(alarm.get('Period'))
- bits.append(alarm.get('Statistic'))
- if self.args['show_long']:
- bits.append(alarm.get('Unit'))
- bits.append(alarm.get('EvaluationPeriods'))
- bits.append(alarm.get('ComparisonOperator'))
- bits.append(alarm.get('Threshold'))
- print self.tabify(bits)
+ self.print_alarm(alarm)
diff --git a/euca2ools/commands/monitoring/listmetrics.py b/euca2ools/commands/monitoring/describealarmsformetric.py
similarity index 56%
copy from euca2ools/commands/monitoring/listmetrics.py
copy to euca2ools/commands/monitoring/describealarmsformetric.py
index fb26ede..952399b 100644
--- a/euca2ools/commands/monitoring/listmetrics.py
+++ b/euca2ools/commands/monitoring/describealarmsformetric.py
@@ -28,6 +28,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
+import argparse
from euca2ools.commands.argtypes import delimited_list
from euca2ools.commands.monitoring import CloudWatchRequest
from euca2ools.commands.monitoring.argtypes import cloudwatch_dimension
@@ -36,20 +37,34 @@ from requestbuilder.mixins import TabifyingCommand
from requestbuilder.response import PaginatedResponse
-class ListMetrics(CloudWatchRequest, TabifyingCommand):
- DESCRIPTION = 'Show a list of monitoring metrics'
- ARGS = [Arg('-d', '--dimensions', dest='Dimensions.member',
+class DescribeAlarmsForMetric(CloudWatchRequest, TabifyingCommand):
+ DESCRIPTION = ('Describe alarms for a single metric.\n\nNote that all '
+ "of an alarm's metrics must match exactly to obtain any "
+ 'results.')
+ ARGS = [Arg('--metric-name', dest='MetricName', metavar='METRIC',
+ required=True, help='name of the metric (required)'),
+ Arg('--namespace', dest='Namespace', metavar='NAMESPACE',
+ required=True, help='namespace of the metric (required)'),
+ # --alarm-description is supported by the tool, but not the service
+ Arg('--alarm-description', route_to=None, help=argparse.SUPPRESS),
+ Arg('--dimensions', dest='Dimensions.member',
metavar='KEY1=VALUE1,KEY2=VALUE2,...',
type=delimited_list(',', item_type=cloudwatch_dimension),
- help='limit results to metrics with specific dimensions'),
- Arg('-m', '--metric-name', dest='MetricName', metavar='METRIC',
- help='limit results to a specific metric'),
- Arg('-n', '--namespace', dest='Namespace', metavar='NAMESPACE',
- help='limit results to metrics in a specific namespace')]
- LIST_TAGS = ['Metrics', 'Dimensions']
+ help='dimensions of the metric'),
+ Arg('--period', dest='Period', metavar='SECONDS',
+ help='period over which statistics are applied'),
+ Arg('--show-long', action='store_true', route_to=None,
+ help="show all of the alarms' info"),
+ Arg('--statistic', dest='Statistic', choices=('Average', 'Maximum',
+ 'Minimum', 'SampleCount', 'Sum'),
+ help='statistic of the metric on which to trigger alarms'),
+ Arg('--unit', dest='Unit',
+ help='unit of measurement for statistics')]
+ LIST_TAGS = ['MetricAlarms', 'AlarmActions', 'Dimensions',
+ 'InsufficientDataActions', 'OKActions']
def main(self):
- return PaginatedResponse(self, (None,), ('Metrics,'))
+ return PaginatedResponse(self, (None,), ('MetricAlarms',))
def prepare_for_page(self, page):
self.params['NextToken'] = page
@@ -58,17 +73,5 @@ class ListMetrics(CloudWatchRequest, TabifyingCommand):
return response.get('NextToken') or None
def print_result(self, result):
- out_lines = []
- for metric in sorted(result.get('Metrics', [])):
- if len(metric.get('Dimensions', [])) > 0:
- formatted_dims = ['{0}={1}'.format(dimension.get('Name'),
- dimension.get('Value'))
- for dimension in metric['Dimensions']]
- out_lines.append((metric.get('MetricName'),
- metric.get('Namespace'),
- '{{{0}}}'.format(','.join(formatted_dims))))
- else:
- out_lines.append((metric.get('MetricName'),
- metric.get('Namespace'), None))
- for out_line in sorted(out_lines):
- print self.tabify(out_line)
+ for alarm in result.get('MetricAlarms', []):
+ self.print_alarm(alarm)
--
managing cloud instances for Eucalyptus
More information about the pkg-eucalyptus-commits
mailing list