Hello community,
here is the log from the commit of package python-ceilometerclient for openSUSE:Factory checked in at 2013-10-02 13:32:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ceilometerclient (Old)
and /work/SRC/openSUSE:Factory/.python-ceilometerclient.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ceilometerclient"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ceilometerclient/python-ceilometerclient.changes 2013-09-26 07:13:14.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-ceilometerclient.new/python-ceilometerclient.changes 2013-10-02 13:32:33.000000000 +0200
@@ -1,0 +2,12 @@
+Mon Sep 30 23:38:38 UTC 2013 - opensuse-cloud@opensuse.org
+
+- Update to version 1.0.5.2:
+ + Help messages: specify which options are required
+
+-------------------------------------------------------------------
+Thu Sep 26 10:11:49 UTC 2013 - opensuse-cloud@opensuse.org
+
+- Update to version 1.0.5.1:
+ + Improve the CM shell client alarm visualisation
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-ceilometerclient.spec ++++++
--- /var/tmp/diff_new_pack.45aJpR/_old 2013-10-02 13:32:34.000000000 +0200
+++ /var/tmp/diff_new_pack.45aJpR/_new 2013-10-02 13:32:34.000000000 +0200
@@ -20,7 +20,7 @@
%define component ceilometerclient
Name: python-%{component}
-Version: 1.0.3.11
+Version: 1.0.5.2
Release: 0
Url: https://github.com/openstack/python-ceilometerclient
Summary: OpenStack Metering (Ceilometer) API Client
@@ -71,7 +71,7 @@
This package contains testsuite files for %{name}.
%prep
-%setup -q -n python-ceilometerclient-1.0.3.11.g2610d6c
+%setup -q -n python-ceilometerclient-1.0.5.2.gb961738
%openstack_cleanup_prep
echo %{version} > ceilometerclient/versioninfo
++++++ python-ceilometerclient-master.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ceilometerclient-1.0.3.11.g2610d6c/ChangeLog new/python-ceilometerclient-1.0.5.2.gb961738/ChangeLog
--- old/python-ceilometerclient-1.0.3.11.g2610d6c/ChangeLog 2013-09-23 21:22:05.000000000 +0200
+++ new/python-ceilometerclient-1.0.5.2.gb961738/ChangeLog 2013-09-30 18:22:39.000000000 +0200
@@ -1,3 +1,36 @@
+commit b961738765976e77711d909eec1ecc402fa8a484
+Author: Cyril Roelandt
+Date: Wed Sep 25 12:49:58 2013 +0000
+
+ Help messages: specify which options are required
+
+ Closes-Bug: #1223283
+
+ Change-Id: I080fa73bd45a1f9f442dbcdfa65fdc24e30521da
+
+commit ce01f564651bee07f91be8dc7f6dfca561216625
+Author: Mehdi Abaakouk
+Date: Tue Sep 24 11:09:05 2013 +0200
+
+ Improve the CM shell client alarm visualisation
+
+ This change aim to get a better alarm representation in shell.
+
+ In alarm-list:
+ * it add a short sentence to describe the alarm rule
+ * it remove project_id/user_id because it always show the same id for
+ all alarm for end-user
+
+ In alarm-show, it show alarm rule attributes as alarm properties instead
+ of a unparsable json in the rule property.
+
+ example of short sentence for column 'Alarm condition':
+ * combinated states (AND) of 8babd6a2-c457-42d0-9eb5-cdfb3cb50203,
+ d0e11a94-8f59-48a9-8f6d-b0d68aaac8d0
+ * cpu_util >= 50.0 during 1 x 60s
+
+ Change-Id: If4df2dc08f9f4cb7796fd98308c7d62e311d1138
+
commit 2610d6c144e0d81cd94a6f18eb899443ce7d64fb
Merge: 05e4355 5616563
Author: Jenkins
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ceilometerclient-1.0.3.11.g2610d6c/PKG-INFO new/python-ceilometerclient-1.0.5.2.gb961738/PKG-INFO
--- old/python-ceilometerclient-1.0.3.11.g2610d6c/PKG-INFO 2013-09-23 21:22:05.000000000 +0200
+++ new/python-ceilometerclient-1.0.5.2.gb961738/PKG-INFO 2013-09-30 18:22:40.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: python-ceilometerclient
-Version: 1.0.3.11.g2610d6c
+Version: 1.0.5.2.gb961738
Summary: OpenStack Metering API Client Library
Home-page: http://www.openstack.org/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ceilometerclient-1.0.3.11.g2610d6c/ceilometerclient/common/utils.py new/python-ceilometerclient-1.0.5.2.gb961738/ceilometerclient/common/utils.py
--- old/python-ceilometerclient-1.0.3.11.g2610d6c/ceilometerclient/common/utils.py 2013-09-23 21:21:36.000000000 +0200
+++ new/python-ceilometerclient-1.0.5.2.gb961738/ceilometerclient/common/utils.py 2013-09-30 18:21:46.000000000 +0200
@@ -27,6 +27,13 @@
# Decorator for cli-args
def arg(*args, **kwargs):
def _decorator(func):
+ if 'help' in kwargs:
+ if 'default' in kwargs:
+ kwargs['help'] += " Defaults to %s." % kwargs['default']
+ required = kwargs.get('required', False)
+ if required:
+ kwargs['help'] += " Required."
+
# Because of the sematics of decorator composition if we just append
# to the options list positional options will appear to be backwards.
func.__dict__.setdefault('arguments', []).insert(0, (args, kwargs))
@@ -63,17 +70,19 @@
# convert dict to str to check length
if isinstance(v, dict):
v = str(v)
- if wrap > 0:
- v = textwrap.fill(str(v), wrap)
# if value has a newline, add in multiple rows
# e.g. fault with stacktrace
if v and isinstance(v, basestring) and r'\n' in v:
lines = v.strip().split(r'\n')
col1 = k
for line in lines:
+ if wrap > 0:
+ line = textwrap.fill(str(line), wrap)
pt.add_row([col1, line])
col1 = ''
else:
+ if wrap > 0:
+ v = textwrap.fill(str(v), wrap)
pt.add_row([k, v])
print pt.get_string()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ceilometerclient-1.0.3.11.g2610d6c/ceilometerclient/tests/test_utils.py new/python-ceilometerclient-1.0.5.2.gb961738/ceilometerclient/tests/test_utils.py
--- old/python-ceilometerclient-1.0.3.11.g2610d6c/ceilometerclient/tests/test_utils.py 2013-09-23 21:21:36.000000000 +0200
+++ new/python-ceilometerclient-1.0.5.2.gb961738/ceilometerclient/tests/test_utils.py 2013-09-30 18:21:46.000000000 +0200
@@ -74,3 +74,22 @@
'statictic': 'avg',
'comparison_operator': 'or'},
})
+
+ def test_arg(self):
+ @utils.arg(help="not_required_no_default.")
+ def not_required_no_default():
+ pass
+ _, args = not_required_no_default.__dict__['arguments'][0]
+ self.assertEqual(args['help'], "not_required_no_default.")
+
+ @utils.arg(required=True, help="required_no_default.")
+ def required_no_default():
+ pass
+ _, args = required_no_default.__dict__['arguments'][0]
+ self.assertEqual(args['help'], "required_no_default. Required.")
+
+ @utils.arg(default=42, help="not_required_default.")
+ def not_required_default():
+ pass
+ _, args = not_required_default.__dict__['arguments'][0]
+ self.assertEqual(args['help'], "not_required_default. Defaults to 42.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ceilometerclient-1.0.3.11.g2610d6c/ceilometerclient/v2/shell.py new/python-ceilometerclient-1.0.5.2.gb961738/ceilometerclient/v2/shell.py
--- old/python-ceilometerclient-1.0.3.11.g2610d6c/ceilometerclient/v2/shell.py 2013-09-23 21:21:36.000000000 +0200
+++ new/python-ceilometerclient-1.0.5.2.gb961738/ceilometerclient/v2/shell.py 2013-09-30 18:21:46.000000000 +0200
@@ -28,11 +28,14 @@
ALARM_OPERATORS = ['lt', 'le', 'eq', 'ne', 'ge', 'gt']
ALARM_COMBINATION_OPERATORS = ['and', 'or']
STATISTICS = ['max', 'min', 'avg', 'sum', 'count']
+OPERATORS_STRING = dict(gt='>', ge='>=',
+ lt='<', le="<=",
+ eq='==', ne='!=')
@utils.arg('-q', '--query', metavar='<QUERY>',
help='key[op]value; list.')
-@utils.arg('-m', '--meter', metavar='<NAME>',
+@utils.arg('-m', '--meter', metavar='<NAME>', required=True,
help='Name of meter to show samples for.')
@utils.arg('-p', '--period', metavar='<PERIOD>',
help='Period in seconds over which to group samples.')
@@ -41,8 +44,6 @@
fields = {'meter_name': args.meter,
'q': options.cli_to_array(args.query),
'period': args.period}
- if args.meter is None:
- raise exc.CommandError('Meter name not provided (-m <meter name>)')
try:
statistics = cc.statistics.list(**fields)
except exc.HTTPNotFound:
@@ -59,14 +60,12 @@
@utils.arg('-q', '--query', metavar='<QUERY>',
help='key[op]value; list.')
-@utils.arg('-m', '--meter', metavar='<NAME>',
+@utils.arg('-m', '--meter', metavar='<NAME>', required=True,
help='Name of meter to show samples for.')
def do_sample_list(cc, args):
'''List the samples for this meters.'''
fields = {'meter_name': args.meter,
'q': options.cli_to_array(args.query)}
- if args.meter is None:
- raise exc.CommandError('Meter name not provided (-m <meter name>)')
try:
samples = cc.samples.list(**fields)
except exc.HTTPNotFound:
@@ -86,15 +85,15 @@
@utils.arg('--user-id', metavar='',
help='User to associate with sample '
'(only settable by admin users)')
-@utils.arg('-r', '--resource-id', metavar='',
+@utils.arg('-r', '--resource-id', metavar='', required=True,
help='ID of the resource.')
@utils.arg('-m', '--meter-name', metavar='',
help='the meter name')
-@utils.arg('--meter-type', metavar='',
+@utils.arg('--meter-type', metavar='', required=True,
help='the meter type')
-@utils.arg('--meter-unit', metavar='',
+@utils.arg('--meter-unit', metavar='', required=True,
help='the meter unit')
-@utils.arg('--sample-volume', metavar='',
+@utils.arg('--sample-volume', metavar='', required=True,
help='The sample volume')
@utils.arg('--resource-metadata', metavar='',
help='resource metadata')
@@ -128,6 +127,28 @@
sortby=0)
+def alarm_rule_formatter(alarm):
+ if alarm.type == 'threshold':
+ return ('%(meter_name)s %(comparison_operator)s '
+ '%(threshold)s during %(evaluation_periods)s x %(period)ss' %
+ {
+ 'meter_name': alarm.rule['meter_name'],
+ 'threshold': alarm.rule['threshold'],
+ 'evaluation_periods': alarm.rule['evaluation_periods'],
+ 'period': alarm.rule['period'],
+ 'comparison_operator': OPERATORS_STRING.get(
+ alarm.rule['comparison_operator'])
+ })
+ elif alarm.type == 'combination':
+ return ('combinated states (%(operator)s) of %(alarms)s' % {
+ 'operator': alarm.rule['operator'].upper(),
+ 'alarms': ", ".join(alarm.rule['alarm_ids'])})
+ else:
+ # just dump all
+ return "\n".join(["%s: %s" % (f, v)
+ for f, v in alarm.rule.iteritems()])
+
+
@utils.arg('-q', '--query', metavar='<QUERY>',
help='key[op]value; list.')
def do_alarm_list(cc, args={}):
@@ -135,29 +156,38 @@
alarms = cc.alarms.list(q=options.cli_to_array(args.query))
# omit action initially to keep output width sane
# (can switch over to vertical formatting when available from CLIFF)
- field_labels = ['Name', 'Description', 'State', 'Enabled', 'Continuous',
- 'Alarm ID', 'User ID', 'Project ID']
- fields = ['name', 'description', 'state', 'enabled', 'repeat_actions',
- 'alarm_id', 'user_id', 'project_id']
+ field_labels = ['Alarm ID', 'Name', 'State', 'Enabled', 'Continuous',
+ 'Alarm condition']
+ fields = ['alarm_id', 'name', 'state', 'enabled', 'repeat_actions',
+ 'rule']
utils.print_list(alarms, fields, field_labels,
- sortby=0)
+ formatters={'rule': alarm_rule_formatter}, sortby=0)
+
+
+def alarm_query_formater(alarm):
+ qs = []
+ for q in alarm.rule['query']:
+ qs.append('%s %s %s' % (
+ q['field'], OPERATORS_STRING.get(q['op']), q['value']))
+ return r' AND\n'.join(qs)
def _display_alarm(alarm):
- fields = ['name', 'description', 'type', 'rule',
+ fields = ['name', 'description', 'type',
'state', 'enabled', 'alarm_id', 'user_id', 'project_id',
'alarm_actions', 'ok_actions', 'insufficient_data_actions',
'repeat_actions']
data = dict([(f, getattr(alarm, f, '')) for f in fields])
+ data.update(alarm.rule)
+ if alarm.type == 'threshold':
+ data['query'] = alarm_query_formater(alarm)
utils.print_dict(data, wrap=72)
-@utils.arg('-a', '--alarm_id', metavar='',
+@utils.arg('-a', '--alarm_id', metavar='', required=True,
help='ID of the alarm to show.')
def do_alarm_show(cc, args={}):
'''Show an alarm.'''
- if args.alarm_id is None:
- raise exc.CommandError('Alarm ID not provided (-a <alarm id>)')
try:
alarm = cc.alarms.get(args.alarm_id)
except exc.HTTPNotFound:
@@ -380,8 +410,6 @@
help='ID of the alarm to delete.')
def do_alarm_delete(cc, args={}):
'''Delete an alarm.'''
- if args.alarm_id is None:
- raise exc.CommandError('Alarm ID not provided (-a <alarm id>)')
try:
cc.alarms.delete(args.alarm_id)
except exc.HTTPNotFound:
@@ -426,12 +454,10 @@
sortby=1)
-@utils.arg('-r', '--resource_id', metavar='',
+@utils.arg('-r', '--resource_id', metavar='', required=True,
help='ID of the resource to show.')
def do_resource_show(cc, args={}):
'''Show the resource.'''
- if args.resource_id is None:
- raise exc.CommandError('Resource id not provided (-r <resource id>)')
try:
resource = cc.resources.get(args.resource_id)
except exc.HTTPNotFound:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-ceilometerclient-1.0.3.11.g2610d6c/python_ceilometerclient.egg-info/PKG-INFO new/python-ceilometerclient-1.0.5.2.gb961738/python_ceilometerclient.egg-info/PKG-INFO
--- old/python-ceilometerclient-1.0.3.11.g2610d6c/python_ceilometerclient.egg-info/PKG-INFO 2013-09-23 21:22:05.000000000 +0200
+++ new/python-ceilometerclient-1.0.5.2.gb961738/python_ceilometerclient.egg-info/PKG-INFO 2013-09-30 18:22:39.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: python-ceilometerclient
-Version: 1.0.3.11.g2610d6c
+Version: 1.0.5.2.gb961738
Summary: OpenStack Metering API Client Library
Home-page: http://www.openstack.org/
Author: OpenStack
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org