blob: 0c019084e465947cd238eef804689c047147766f [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
Doug Hellmann583ce2c2015-03-11 14:55:46 +000018from oslo_serialization import jsonutils as json
19
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000020from tempest.common import service_client
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000021
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080022
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000023class TelemetryClientJSON(service_client.ServiceClient):
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080024
Ken'ichi Ohmichid5dba1c2015-01-23 02:23:22 +000025 version = '2'
26 uri_prefix = "v2"
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080027
28 def deserialize(self, body):
29 return json.loads(body.replace("\n", ""))
30
31 def serialize(self, body):
32 return json.dumps(body)
33
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080034 def add_sample(self, sample_list, meter_name, meter_unit, volume,
35 sample_type, resource_id, **kwargs):
36 sample = {"counter_name": meter_name, "counter_unit": meter_unit,
37 "counter_volume": volume, "counter_type": sample_type,
38 "resource_id": resource_id}
39 for key in kwargs:
40 sample[key] = kwargs[key]
41
42 sample_list.append(self.serialize(sample))
43 return sample_list
44
45 def create_sample(self, meter_name, sample_list):
46 uri = "%s/meters/%s" % (self.uri_prefix, meter_name)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000047 body = self.serialize(sample_list)
48 resp, body = self.post(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -050049 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000050 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050051 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000052
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000053 def _helper_list(self, uri, query=None, period=None):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000054 uri_dict = {}
55 if query:
56 uri_dict = {'q.field': query[0],
57 'q.op': query[1],
58 'q.value': query[2]}
59 if period:
60 uri_dict['period'] = period
61 if uri_dict:
62 uri += "?%s" % urllib.urlencode(uri_dict)
63 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050064 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000065 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050066 return service_client.ResponseBodyList(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000067
68 def list_resources(self, query=None):
69 uri = '%s/resources' % self.uri_prefix
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000070 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000071
72 def list_meters(self, query=None):
73 uri = '%s/meters' % self.uri_prefix
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000074 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000075
76 def list_alarms(self, query=None):
77 uri = '%s/alarms' % self.uri_prefix
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000078 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000079
80 def list_statistics(self, meter, period=None, query=None):
81 uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter)
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000082 return self._helper_list(uri, query, period)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000083
84 def list_samples(self, meter_id, query=None):
85 uri = '%s/meters/%s' % (self.uri_prefix, meter_id)
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000086 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000087
Ken'ichi Ohmichie5cdc722015-04-07 23:44:26 +000088 def show_resource(self, resource_id):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000089 uri = '%s/resources/%s' % (self.uri_prefix, resource_id)
90 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050091 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000092 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050093 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000094
Ken'ichi Ohmichie5cdc722015-04-07 23:44:26 +000095 def show_alarm(self, alarm_id):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000096 uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
97 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050098 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000099 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500100 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000101
102 def delete_alarm(self, alarm_id):
103 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
104 resp, body = self.delete(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500105 self.expected_success(204, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000106 if body:
107 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500108 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000109
110 def create_alarm(self, **kwargs):
111 uri = "%s/alarms" % self.uri_prefix
112 body = self.serialize(kwargs)
113 resp, body = self.post(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500114 self.expected_success(201, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000115 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500116 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000117
118 def update_alarm(self, alarm_id, **kwargs):
119 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
120 body = self.serialize(kwargs)
121 resp, body = self.put(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500122 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000123 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500124 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000125
Ken'ichi Ohmichie5cdc722015-04-07 23:44:26 +0000126 def show_alarm_state(self, alarm_id):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000127 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
128 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500129 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000130 body = self.deserialize(body)
David Kranzd7e97b42015-02-16 09:37:31 -0500131 return service_client.ResponseBodyData(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000132
133 def alarm_set_state(self, alarm_id, state):
134 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
135 body = self.serialize(state)
136 resp, body = self.put(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500137 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000138 body = self.deserialize(body)
David Kranzd7e97b42015-02-16 09:37:31 -0500139 return service_client.ResponseBodyData(resp, body)