summaryrefslogtreecommitdiff
path: root/ceilometerclient
diff options
context:
space:
mode:
authorAngus Salkeld <asalkeld@redhat.com>2013-07-18 09:41:16 +1000
committerAngus Salkeld <asalkeld@redhat.com>2013-07-18 09:41:16 +1000
commit3010ebcc75ea271c46351ef68d00482f0fbacb85 (patch)
treecf268c9da2143d601c20dbd12dc905c43f97a258 /ceilometerclient
parentefd67de3fae0be1893c5dbf60e3a29d40e5bdb0d (diff)
downloadpython-ceilometerclient-3010ebcc75ea271c46351ef68d00482f0fbacb85.tar.gz
Add support for creating samples
Change-Id: Ib33a5fd162d760efa23a2fc496c1d11d79484491
Diffstat (limited to 'ceilometerclient')
-rw-r--r--ceilometerclient/tests/v2/test_samples.py44
-rw-r--r--ceilometerclient/v2/samples.py29
-rw-r--r--ceilometerclient/v2/shell.py37
3 files changed, 93 insertions, 17 deletions
diff --git a/ceilometerclient/tests/v2/test_samples.py b/ceilometerclient/tests/v2/test_samples.py
index 934644f..a9da5fa 100644
--- a/ceilometerclient/tests/v2/test_samples.py
+++ b/ceilometerclient/tests/v2/test_samples.py
@@ -13,9 +13,26 @@
# License for the specific language governing permissions and limitations
# under the License.
+import copy
+
from ceilometerclient.tests import utils
import ceilometerclient.v2.samples
+GET_SAMPLE = {u'counter_name': u'instance',
+ u'user_id': u'user-id',
+ u'resource_id': u'resource-id',
+ u'timestamp': u'2012-07-02T10:40:00',
+ u'source': u'test_source',
+ u'message_id': u'54558a1c-6ef3-11e2-9875-5453ed1bbb5f',
+ u'counter_unit': u'',
+ u'counter_volume': 1.0,
+ u'project_id': u'project1',
+ u'resource_metadata': {u'tag': u'self.counter',
+ u'display_name': u'test-server'},
+ u'counter_type': u'cumulative'}
+CREATE_SAMPLE = copy.deepcopy(GET_SAMPLE)
+del CREATE_SAMPLE['message_id']
+del CREATE_SAMPLE['source']
base_url = '/v2/meters/instance'
args = 'q.op=&q.op=&q.value=foo&q.value=bar&q.field=resource_id&q.field=source'
@@ -24,20 +41,11 @@ fixtures = {
{
'GET': (
{},
- [
- {u'counter_name': u'instance',
- u'user_id': u'user-id',
- u'resource_id': u'resource-id',
- u'timestamp': u'2012-07-02T10:40:00',
- u'message_id': u'54558a1c-6ef3-11e2-9875-5453ed1bbb5f',
- u'source': u'test_source',
- u'counter_unit': u'',
- u'counter_volume': 1.0,
- u'project_id': u'project1',
- u'resource_metadata': {u'tag': u'self.counter',
- u'display_name': u'test-server'},
- u'counter_type': u'cumulative'},
- ]
+ [GET_SAMPLE]
+ ),
+ 'POST': (
+ {},
+ [CREATE_SAMPLE],
),
},
'%s?%s' % (base_url, args):
@@ -77,3 +85,11 @@ class SampleManagerTest(utils.BaseTestCase):
expect = [('GET', '%s?%s' % (base_url, args), {}, None)]
self.assertEqual(self.api.calls, expect)
self.assertEqual(len(samples), 0)
+
+ def test_create(self):
+ sample = self.mgr.create(**CREATE_SAMPLE)
+ expect = [
+ ('POST', '/v2/meters/instance', {}, [CREATE_SAMPLE]),
+ ]
+ self.assertEqual(self.api.calls, expect)
+ self.assertTrue(sample)
diff --git a/ceilometerclient/v2/samples.py b/ceilometerclient/v2/samples.py
index 11258a5..20ddbe7 100644
--- a/ceilometerclient/v2/samples.py
+++ b/ceilometerclient/v2/samples.py
@@ -14,6 +14,17 @@
from ceilometerclient.common import base
from ceilometerclient.v2 import options
+CREATION_ATTRIBUTES = ('source',
+ 'counter_name',
+ 'counter_type',
+ 'counter_unit',
+ 'counter_volume',
+ 'user_id',
+ 'project_id',
+ 'resource_id',
+ 'timestamp',
+ 'resource_metadata')
+
class Sample(base.Resource):
def __repr__(self):
@@ -23,8 +34,20 @@ class Sample(base.Resource):
class SampleManager(base.Manager):
resource_class = Sample
+ @staticmethod
+ def _path(counter_name=None):
+ return '/v2/meters/%s' % counter_name if counter_name else '/v2/meters'
+
def list(self, meter_name=None, q=None):
- path = '/v2/meters'
- if meter_name:
- path += '/' + meter_name
+ path = self._path(counter_name=meter_name)
return self._list(options.build_url(path, q))
+
+ def create(self, **kwargs):
+ new = dict((key, value) for (key, value) in kwargs.items()
+ if key in CREATION_ATTRIBUTES)
+ url = self._path(counter_name=kwargs['counter_name'])
+ resp, body = self.api.json_request('POST',
+ url,
+ body=[new])
+ if body:
+ return [Sample(self, b) for b in body]
diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py
index be68941..23246a2 100644
--- a/ceilometerclient/v2/shell.py
+++ b/ceilometerclient/v2/shell.py
@@ -16,6 +16,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
+
from ceilometerclient.common import utils
from ceilometerclient import exc
from ceilometerclient.v2 import options
@@ -76,6 +78,41 @@ def do_sample_list(cc, args):
sortby=0)
+@utils.arg('--project-id', metavar='<PROJECT_ID>',
+ help='Tenant to associate with alarm '
+ '(only settable by admin users)')
+@utils.arg('--user-id', metavar='<USER_ID>',
+ help='User to associate with alarm '
+ '(only settable by admin users)')
+@utils.arg('-r', '--resource-id', metavar='<RESOURCE_ID>',
+ help='ID of the resource.')
+@utils.arg('-m', '--meter-name', metavar='<METER_NAME>',
+ help='the meter name')
+@utils.arg('--meter-type', metavar='<METER_TYPE>',
+ help='the meter type')
+@utils.arg('--meter-unit', metavar='<METER_UNIT>',
+ help='the meter unit')
+@utils.arg('--sample-volume', metavar='<SAMPLE_VOLUME>',
+ help='The sample volume')
+@utils.arg('--resource-metadata', metavar='<RESOURCE_METADATA>',
+ help='resource metadata')
+def do_sample_create(cc, args={}):
+ '''Create a sample.'''
+ arg_to_field_mapping = {'meter_name': 'counter_name',
+ 'meter_unit': 'counter_unit',
+ 'meter_type': 'counter_type',
+ 'sample_volume': 'counter_volume'}
+ fields = {}
+ for var in vars(args).items():
+ k, v = var[0], var[1]
+ if v is not None:
+ if k == 'resource_metadata':
+ fields[k] = json.loads(v)
+ else:
+ fields[arg_to_field_mapping.get(k, k)] = v
+ cc.samples.create(**fields)
+
+
@utils.arg('-q', '--query', metavar='<QUERY>',
help='key[op]value; list.')
def do_meter_list(cc, args={}):