blob: 1f181e3a66dff6b1d17ac737f1862ece42a3c808 [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
Doug Hellmann583ce2c2015-03-11 14:55:46 +000016from oslo_serialization import jsonutils as json
Matthew Treinish89128142015-04-23 10:44:30 -040017from six.moves.urllib import parse as urllib
Doug Hellmann583ce2c2015-03-11 14:55:46 +000018
Ken'ichi Ohmichi0e836652015-01-08 04:38:56 +000019from tempest.common import service_client
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000020
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080021
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000022class TelemetryClient(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
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000052 def _helper_list(self, uri, query=None, period=None):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000053 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
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000069 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000070
71 def list_meters(self, query=None):
72 uri = '%s/meters' % self.uri_prefix
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000073 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000074
75 def list_alarms(self, query=None):
76 uri = '%s/alarms' % self.uri_prefix
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000077 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000078
79 def list_statistics(self, meter, period=None, query=None):
80 uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter)
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000081 return self._helper_list(uri, query, period)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000082
83 def list_samples(self, meter_id, query=None):
84 uri = '%s/meters/%s' % (self.uri_prefix, meter_id)
Ken'ichi Ohmichi976a3292015-04-07 23:35:55 +000085 return self._helper_list(uri, query)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000086
gordon chungee23ddb2015-02-11 20:05:07 -050087 def list_events(self, query=None):
88 uri = '%s/events' % self.uri_prefix
89 return self._helper_list(uri, query)
90
Ken'ichi Ohmichie5cdc722015-04-07 23:44:26 +000091 def show_resource(self, resource_id):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000092 uri = '%s/resources/%s' % (self.uri_prefix, resource_id)
93 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -050094 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000095 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -050096 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000097
Ken'ichi Ohmichie5cdc722015-04-07 23:44:26 +000098 def show_alarm(self, alarm_id):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +000099 uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
100 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500101 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000102 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500103 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000104
105 def delete_alarm(self, alarm_id):
106 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
107 resp, body = self.delete(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500108 self.expected_success(204, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000109 if body:
110 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500111 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000112
113 def create_alarm(self, **kwargs):
114 uri = "%s/alarms" % self.uri_prefix
115 body = self.serialize(kwargs)
116 resp, body = self.post(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500117 self.expected_success(201, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000118 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500119 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000120
121 def update_alarm(self, alarm_id, **kwargs):
122 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
123 body = self.serialize(kwargs)
124 resp, body = self.put(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500125 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000126 body = self.deserialize(body)
David Kranz20d06f42015-02-09 14:54:15 -0500127 return service_client.ResponseBody(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000128
Ken'ichi Ohmichie5cdc722015-04-07 23:44:26 +0000129 def show_alarm_state(self, alarm_id):
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000130 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
131 resp, body = self.get(uri)
David Kranz20d06f42015-02-09 14:54:15 -0500132 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000133 body = self.deserialize(body)
David Kranzd7e97b42015-02-16 09:37:31 -0500134 return service_client.ResponseBodyData(resp, body)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000135
136 def alarm_set_state(self, alarm_id, state):
137 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
138 body = self.serialize(state)
139 resp, body = self.put(uri, body)
David Kranz20d06f42015-02-09 14:54:15 -0500140 self.expected_success(200, resp.status)
Ken'ichi Ohmichi553b6672014-12-22 01:37:47 +0000141 body = self.deserialize(body)
David Kranzd7e97b42015-02-16 09:37:31 -0500142 return service_client.ResponseBodyData(resp, body)