[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