blob: b0173ef21fc061bf7f5d25c44149e183b7618876 [file] [log] [blame]
Ryota MIBU9a3a74b2015-12-10 15:17:11 +09001# 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
16from oslo_serialization import jsonutils as json
17from six.moves.urllib import parse as urllib
18
19from tempest.common import service_client
Ryota MIBUd304d4b2015-12-10 15:46:12 +090020from tempest import config
21from tempest import manager
22
23
24CONF = config.CONF
Ryota MIBU9a3a74b2015-12-10 15:17:11 +090025
26
27class TelemetryClient(service_client.ServiceClient):
28
29 version = '2'
30 uri_prefix = "v2"
31
32 def deserialize(self, body):
33 return json.loads(body.replace("\n", ""))
34
35 def serialize(self, body):
36 return json.dumps(body)
37
38 def add_sample(self, sample_list, meter_name, meter_unit, volume,
39 sample_type, resource_id, **kwargs):
40 sample = {"counter_name": meter_name, "counter_unit": meter_unit,
41 "counter_volume": volume, "counter_type": sample_type,
42 "resource_id": resource_id}
43 for key in kwargs:
44 sample[key] = kwargs[key]
45
46 sample_list.append(self.serialize(sample))
47 return sample_list
48
49 def create_sample(self, meter_name, sample_list):
50 uri = "%s/meters/%s" % (self.uri_prefix, meter_name)
51 body = self.serialize(sample_list)
52 resp, body = self.post(uri, body)
53 self.expected_success(200, resp.status)
54 body = self.deserialize(body)
55 return service_client.ResponseBody(resp, body)
56
57 def _helper_list(self, uri, query=None, period=None):
58 uri_dict = {}
59 if query:
60 uri_dict = {'q.field': query[0],
61 'q.op': query[1],
62 'q.value': query[2]}
63 if period:
64 uri_dict['period'] = period
65 if uri_dict:
66 uri += "?%s" % urllib.urlencode(uri_dict)
67 resp, body = self.get(uri)
68 self.expected_success(200, resp.status)
69 body = self.deserialize(body)
70 return service_client.ResponseBodyList(resp, body)
71
72 def list_resources(self, query=None):
73 uri = '%s/resources' % self.uri_prefix
74 return self._helper_list(uri, query)
75
76 def list_meters(self, query=None):
77 uri = '%s/meters' % self.uri_prefix
78 return self._helper_list(uri, query)
79
80 def list_statistics(self, meter, period=None, query=None):
81 uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter)
82 return self._helper_list(uri, query, period)
83
84 def list_samples(self, meter_id, query=None):
85 uri = '%s/meters/%s' % (self.uri_prefix, meter_id)
86 return self._helper_list(uri, query)
87
88 def list_events(self, query=None):
89 uri = '%s/events' % self.uri_prefix
90 return self._helper_list(uri, query)
91
92 def show_resource(self, resource_id):
93 uri = '%s/resources/%s' % (self.uri_prefix, resource_id)
94 resp, body = self.get(uri)
95 self.expected_success(200, resp.status)
96 body = self.deserialize(body)
97 return service_client.ResponseBody(resp, body)
Ryota MIBUd304d4b2015-12-10 15:46:12 +090098
99
100class Manager(manager.Manager):
101
102 def __init__(self, credentials=None, service=None):
103 super(Manager, self).__init__(credentials, service)
104 self._set_telemetry_client()
105
106 def _set_telemetry_client(self):
107 if CONF.service_available.ceilometer:
108 self.telemetry_client = TelemetryClient(
109 self.auth_provider,
110 CONF.telemetry.catalog_type,
111 CONF.identity.region,
112 endpoint_type=CONF.telemetry.endpoint_type,
113 disable_ssl_certificate_validation=(
114 CONF.identity.disable_ssl_certificate_validation),
115 ca_certs=CONF.identity.ca_certificates_file,
116 trace_requests=CONF.debug.trace_requests)