blob: a24962570657d6dd61b70212ec2a71c2d868f69c [file] [log] [blame]
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -08001# Copyright 2014 OpenStack Foundation
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000016import urllib
17
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000018from tempest.common import service_client
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080019from tempest.openstack.common import jsonutils as json
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000020
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080021
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000022class TelemetryClientJSON(service_client.ServiceClient):
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080023
Ken'ichi Ohmichid5dba1c2015-01-23 02:23:22 +000024 version = '2'
25 uri_prefix = "v2"
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080026
27 def deserialize(self, body):
28 return json.loads(body.replace("\n", ""))
29
30 def serialize(self, body):
31 return json.dumps(body)
32
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080033 def add_sample(self, sample_list, meter_name, meter_unit, volume,
34 sample_type, resource_id, **kwargs):
35 sample = {"counter_name": meter_name, "counter_unit": meter_unit,
36 "counter_volume": volume, "counter_type": sample_type,
37 "resource_id": resource_id}
38 for key in kwargs:
39 sample[key] = kwargs[key]
40
41 sample_list.append(self.serialize(sample))
42 return sample_list
43
44 def create_sample(self, meter_name, sample_list):
45 uri = "%s/meters/%s" % (self.uri_prefix, meter_name)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000046 body = self.serialize(sample_list)
47 resp, body = self.post(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -050048 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000049 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050050 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000051
52 def helper_list(self, uri, query=None, period=None):
53 uri_dict = {}
54 if query:
55 uri_dict = {'q.field': query[0],
56 'q.op': query[1],
57 'q.value': query[2]}
58 if period:
59 uri_dict['period'] = period
60 if uri_dict:
61 uri += "?%s" % urllib.urlencode(uri_dict)
62 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050063 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000064 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050065 return service_client.ResponseBodyList(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000066
67 def list_resources(self, query=None):
68 uri = '%s/resources' % self.uri_prefix
69 return self.helper_list(uri, query)
70
71 def list_meters(self, query=None):
72 uri = '%s/meters' % self.uri_prefix
73 return self.helper_list(uri, query)
74
75 def list_alarms(self, query=None):
76 uri = '%s/alarms' % self.uri_prefix
77 return self.helper_list(uri, query)
78
79 def list_statistics(self, meter, period=None, query=None):
80 uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter)
81 return self.helper_list(uri, query, period)
82
83 def list_samples(self, meter_id, query=None):
84 uri = '%s/meters/%s' % (self.uri_prefix, meter_id)
85 return self.helper_list(uri, query)
86
87 def get_resource(self, resource_id):
88 uri = '%s/resources/%s' % (self.uri_prefix, resource_id)
89 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050090 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000091 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050092 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000093
94 def get_alarm(self, alarm_id):
95 uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
96 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050097 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000098 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050099 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000100
101 def delete_alarm(self, alarm_id):
102 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
103 resp, body = self.delete(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500104 self.expected_success(204, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000105 if body:
106 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500107 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000108
109 def create_alarm(self, **kwargs):
110 uri = "%s/alarms" % self.uri_prefix
111 body = self.serialize(kwargs)
112 resp, body = self.post(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500113 self.expected_success(201, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000114 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500115 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000116
117 def update_alarm(self, alarm_id, **kwargs):
118 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
119 body = self.serialize(kwargs)
120 resp, body = self.put(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500121 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000122 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500123 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000124
125 def alarm_get_state(self, alarm_id):
126 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
127 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500128 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000129 body = self.deserialize(body)
David Kranzd7e97b42015-02-16 09:37:31 -0500130 return service_client.ResponseBodyData(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000131
132 def alarm_set_state(self, alarm_id, state):
133 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
134 body = self.serialize(state)
135 resp, body = self.put(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500136 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000137 body = self.deserialize(body)
David Kranzd7e97b42015-02-16 09:37:31 -0500138 return service_client.ResponseBodyData(resp, body)