blob: a184a77958bf4cefa310d5588b0b497fbf1fdf59 [file] [log] [blame]
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -08001# Copyright 2013 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
16import abc
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080017import urllib
18
Matthew Treinish96e9e882014-06-09 18:37:19 -040019import six
20
Matthew Treinish684d8992014-01-30 16:27:40 +000021from tempest import config
22
23CONF = config.CONF
24
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080025
26@six.add_metaclass(abc.ABCMeta)
27class TelemetryClientBase(object):
28
29 """
30 Tempest REST client for Ceilometer V2 API.
31 Implements the following basic Ceilometer abstractions:
32 resources
33 meters
34 alarms
35 queries
36 statistics
37 """
38
Andrea Frittoli8bbdb162014-01-06 11:06:13 +000039 def __init__(self, auth_provider):
40 self.rest_client = self.get_rest_client(auth_provider)
Matthew Treinish684d8992014-01-30 16:27:40 +000041 self.rest_client.service = CONF.telemetry.catalog_type
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080042 self.version = '2'
43 self.uri_prefix = "v%s" % self.version
44
45 @abc.abstractmethod
Andrea Frittoli8bbdb162014-01-06 11:06:13 +000046 def get_rest_client(self, auth_provider):
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080047 """
48 :param config:
49 :param username:
50 :param password:
51 :param auth_url:
52 :param tenant_name:
53 :return: RestClient
54 """
55
56 @abc.abstractmethod
57 def deserialize(self, body):
58 """
59 :param body:
60 :return: Deserialize body
61 """
62
63 @abc.abstractmethod
64 def serialize(self, body):
65 """
66 :param body:
67 :return: Serialize body
68 """
69
70 def post(self, uri, body):
71 body = self.serialize(body)
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020072 resp, body = self.rest_client.post(uri, body)
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080073 body = self.deserialize(body)
74 return resp, body
75
76 def put(self, uri, body):
nayna-patela4c56c92014-03-24 12:16:52 +000077 body = self.serialize(body)
78 resp, body = self.rest_client.put(uri, body)
79 body = self.deserialize(body)
80 return resp, body
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080081
82 def get(self, uri):
Valeriy Ponomaryov88686d82014-02-16 12:24:51 +020083 resp, body = self.rest_client.get(uri)
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -080084 body = self.deserialize(body)
85 return resp, body
86
87 def delete(self, uri):
88 resp, body = self.rest_client.delete(uri)
89 if body:
90 body = self.deserialize(body)
91 return resp, body
92
93 def helper_list(self, uri, query=None, period=None):
94 uri_dict = {}
95 if query:
96 uri_dict = {'q.field': query[0],
97 'q.op': query[1],
98 'q.value': query[2]}
99 if period:
100 uri_dict['period'] = period
101 if uri_dict:
102 uri += "?%s" % urllib.urlencode(uri_dict)
103 return self.get(uri)
104
Andrey Pavlovee04b7c2014-06-30 15:51:00 +0400105 def list_resources(self, query=None):
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800106 uri = '%s/resources' % self.uri_prefix
Andrey Pavlovee04b7c2014-06-30 15:51:00 +0400107 return self.helper_list(uri, query)
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800108
Andrey Pavlovee04b7c2014-06-30 15:51:00 +0400109 def list_meters(self, query=None):
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800110 uri = '%s/meters' % self.uri_prefix
Andrey Pavlovee04b7c2014-06-30 15:51:00 +0400111 return self.helper_list(uri, query)
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800112
Andrey Pavlovee04b7c2014-06-30 15:51:00 +0400113 def list_alarms(self, query=None):
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800114 uri = '%s/alarms' % self.uri_prefix
Andrey Pavlovee04b7c2014-06-30 15:51:00 +0400115 return self.helper_list(uri, query)
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800116
117 def list_statistics(self, meter, period=None, query=None):
118 uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter)
119 return self.helper_list(uri, query, period)
120
121 def list_samples(self, meter_id, query=None):
122 uri = '%s/meters/%s' % (self.uri_prefix, meter_id)
123 return self.helper_list(uri, query)
124
125 def get_resource(self, resource_id):
126 uri = '%s/resources/%s' % (self.uri_prefix, resource_id)
127 return self.get(uri)
128
129 def get_alarm(self, alarm_id):
vrovachev95a16cc2014-02-04 15:29:48 +0400130 uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
Nikolay Pliashechnikovb053aab2013-11-05 06:06:44 -0800131 return self.get(uri)
132
133 def delete_alarm(self, alarm_id):
134 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
135 return self.delete(uri)
vrovachev95a16cc2014-02-04 15:29:48 +0400136
137 def create_alarm(self, **kwargs):
138 uri = "%s/alarms" % self.uri_prefix
139 return self.post(uri, kwargs)
nayna-patela4c56c92014-03-24 12:16:52 +0000140
141 def update_alarm(self, alarm_id, **kwargs):
142 uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
143 return self.put(uri, kwargs)
144
145 def alarm_get_state(self, alarm_id):
146 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
147 return self.get(uri)
148
149 def alarm_set_state(self, alarm_id, state):
150 uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
151 return self.put(uri, state)