summaryrefslogtreecommitdiff
path: root/ceilometerclient/v2/shell.py
diff options
context:
space:
mode:
authorZhiQiang Fan <aji.zqfan@gmail.com>2014-11-02 10:25:19 +0800
committerZhiQiang Fan <zhiqiang.fan@huawei.com>2015-02-05 11:17:02 +0800
commit1831bc1160f65e13e1bc0a8b72bbe2a1f4c8dfd0 (patch)
treed2e676859acb67124699ad8daca969ebe9c0be19 /ceilometerclient/v2/shell.py
parent945f9a392a725c2cae494dcb36cd77d75225718a (diff)
downloadpython-ceilometerclient-1831bc1160f65e13e1bc0a8b72bbe2a1f4c8dfd0.tar.gz
Add Sample API support
Sample API has been implemented in Ceilometer for a long time, but CLI is lack of such support, this patch implements Sample CLI. Implements blueprint cli-samples-api Change-Id: I67152c636526dad3ec27e06058ff73ad969ae2b9 DocImpact
Diffstat (limited to 'ceilometerclient/v2/shell.py')
-rw-r--r--ceilometerclient/v2/shell.py45
1 files changed, 40 insertions, 5 deletions
diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py
index 7cab85e..145d542 100644
--- a/ceilometerclient/v2/shell.py
+++ b/ceilometerclient/v2/shell.py
@@ -124,12 +124,19 @@ def do_statistics(cc, args):
@utils.arg('-q', '--query', metavar='<QUERY>',
help='key[op]data_type::value; list. data_type is optional, '
'but if supplied must be string, integer, float, or boolean.')
-@utils.arg('-m', '--meter', metavar='<NAME>', required=True,
+@utils.arg('-m', '--meter', metavar='<NAME>',
action=NotEmptyAction, help='Name of meter to show samples for.')
@utils.arg('-l', '--limit', metavar='<NUMBER>',
help='Maximum number of samples to return.')
def do_sample_list(cc, args):
- """List the samples for a meter."""
+ """List the samples (return OldSample objects if -m/--meter is set)."""
+ if not args.meter:
+ return _do_sample_list(cc, args)
+ else:
+ return _do_old_sample_list(cc, args)
+
+
+def _do_old_sample_list(cc, args):
fields = {'meter_name': args.meter,
'q': options.cli_to_array(args.query),
'limit': args.limit}
@@ -142,8 +149,36 @@ def do_sample_list(cc, args):
'Timestamp']
fields = ['resource_id', 'counter_name', 'counter_type',
'counter_volume', 'counter_unit', 'timestamp']
- utils.print_list(samples, fields, field_labels,
- sortby=None)
+ utils.print_list(samples, fields, field_labels, sortby=None)
+
+
+def _do_sample_list(cc, args):
+ fields = {
+ 'q': options.cli_to_array(args.query),
+ 'limit': args.limit
+ }
+ samples = cc.new_samples.list(**fields)
+ field_labels = ['ID', 'Resource ID', 'Name', 'Type', 'Volume', 'Unit',
+ 'Timestamp']
+ fields = ['id', 'resource_id', 'meter', 'type', 'volume', 'unit',
+ 'timestamp']
+ utils.print_list(samples, fields, field_labels, sortby=None)
+
+
+@utils.arg('sample_id', metavar='<SAMPLE_ID>', action=NotEmptyAction,
+ help='ID (aka message ID) of the sample to show.')
+def do_sample_show(cc, args):
+ '''Show an sample.'''
+ sample = cc.samples.get(args.sample_id)
+
+ if sample is None:
+ raise exc.CommandError('Sample not found: %s' % args.sample_id)
+
+ fields = ['id', 'meter', 'volume', 'type', 'unit', 'source',
+ 'resource_id', 'user_id', 'project_id',
+ 'timestamp', 'recorded_at', 'metadata']
+ data = dict((f, getattr(sample, f, '')) for f in fields)
+ utils.print_dict(data, wrap=72)
@utils.arg('--project-id', metavar='<PROJECT_ID>',
@@ -181,7 +216,7 @@ def do_sample_create(cc, args={}):
fields[k] = json.loads(v)
else:
fields[arg_to_field_mapping.get(k, k)] = v
- sample = cc.samples.create(**fields)
+ sample = cc.old_samples.create(**fields)
fields = ['counter_name', 'user_id', 'resource_id',
'timestamp', 'message_id', 'source', 'counter_unit',
'counter_volume', 'project_id', 'resource_metadata',