[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:43 UTC 2013


The following commit has been merged in the master branch:
commit aca6b585e77e4d276e1db79c625ddaac29e9279b
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Tue Mar 19 17:51:03 2013 -0700

    Implement ListMetrics
    
    Fixes TOOLS-264

diff --git a/bin/euwatch-list-metrics b/bin/euwatch-list-metrics
new file mode 100755
index 0000000..1b643a3
--- /dev/null
+++ b/bin/euwatch-list-metrics
@@ -0,0 +1,6 @@
+#!/usr/bin/python -tt
+
+import euca2ools.commands.monitoring.listmetrics
+
+if __name__ == '__main__':
+    euca2ools.commands.monitoring.listmetrics.ListMetrics.run()
diff --git a/euca2ools/commands/monitoring/listmetrics.py b/euca2ools/commands/monitoring/listmetrics.py
new file mode 100644
index 0000000..eaeed9b
--- /dev/null
+++ b/euca2ools/commands/monitoring/listmetrics.py
@@ -0,0 +1,83 @@
+# Software License Agreement (BSD License)
+#
+# Copyright (c) 2013, Eucalyptus Systems, Inc.
+# All rights reserved.
+#
+# Redistribution and use of this software in source and binary forms, with or
+# without modification, are permitted provided that the following conditions
+# are met:
+#
+#   Redistributions of source code must retain the above
+#   copyright notice, this list of conditions and the
+#   following disclaimer.
+#
+#   Redistributions in binary form must reproduce the above
+#   copyright notice, this list of conditions and the
+#   following disclaimer in the documentation and/or other
+#   materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# 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 requestbuilder import Arg
+from requestbuilder.mixins import TabifyingCommand
+from requestbuilder.response import PaginatedResponse
+
+
+def dimension_filter(dim_as_str):
+    try:
+        name, val = dim_as_str.split('=', 1)
+        return {'Name': key, 'Value': val}
+    except ValueError:
+        raise argparse.ArgumentTypeError('dimension filter "{0}" must have '
+                                         'form KEY=VALUE'.format(dim_as_str))
+
+
+class ListMetrics(CloudWatchRequest, TabifyingCommand):
+    DESCRIPTION = 'Show a list of monitoring metrics'
+    ARGS = [Arg('-d', '--dimensions', dest='Dimensions.member',
+                metavar='KEY1=VALUE1,KEY2=VALUE2,...',
+                type=delimited_list(dimension_filter),
+                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']
+
+    def main(self):
+        return PaginatedResponse(self, (None,), ('Metrics,'))
+
+    def prepare_for_page(self, page):
+        self.params['NextToken'] = page
+
+    def get_next_page(self, response):
+        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)

-- 
managing cloud instances for Eucalyptus



More information about the pkg-eucalyptus-commits mailing list