
The new /health endpoint of v1.1 is different from the /health of v1.0. In v1.1 /health endpoint we will return a set of KPI (Key Performance Indicator) of the target Marconi server. The API response will be like below: { "mongo_pool_1": { "message_volume": { "claimed": 0, "total": 0, "free": 0 }, "storage_reachable": true, "operation_status": { "create_queue": { "seconds": 0.0021300315856933594, "ref": null, "succeeded": true }, "post_messages": { "seconds": 0.033502817153930664, "ref": null, "succeeded": true }, "list_messages": { "seconds": 0.000013113021850585938, "ref": null, "succeeded": true }, "claim_messages": { "seconds": 0.0013759136199951172, "ref": "3f515f37-58a0-4c81-8214-3e92979b82e7", "succeeded": false }, "delete_queue": { "seconds": 0.0030739307403564453, "ref": null, "succeeded": true } } }, "mongo_pool_2": { "message_volume": { "claimed": 0, "total": 0, "free": 0 }, "storage_reachable": true, "operation_status": { "create_queue": { "seconds": 0.0011799335479736328, "ref": null, "succeeded": true }, "post_messages": { "seconds": 0.024316072463989258, "ref": null, "succeeded": true }, "list_messages": { "seconds": 0.000008106231689453125, "ref": null, "succeeded": true }, "claim_messages": { "seconds": 0.000576019287109375, "ref": "68629fda-b4ce-4cf9-978a-df0df8df36a7", "succeeded": false }, "delete_queue": { "seconds": 0.003300905227661133, "ref": null, "succeeded": true } } }, "catalog_reachable": true } docImpact Implements: blueprint detailed-health Change-Id: I6b281132e2fef8ce65ce54b9d6be297571f8b170
90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
# Copyright (c) 2014 Catalyst IT Ltd
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
import ddt
|
|
|
|
from zaqar.tests.functional import base
|
|
from zaqar.tests.functional import helpers
|
|
|
|
|
|
@ddt.ddt
|
|
class TestHealth(base.V1_1FunctionalTestBase):
|
|
|
|
server_class = base.ZaqarAdminServer
|
|
|
|
def setUp(self):
|
|
super(TestHealth, self).setUp()
|
|
self.base_url = ("{url}/{version}".format(
|
|
url=self.cfg.zaqar.url,
|
|
version="v1.1"
|
|
))
|
|
self.cfg.zaqar.version = "v1.1"
|
|
self.client.set_base_url(self.base_url)
|
|
|
|
@ddt.data(
|
|
{
|
|
'name': "pool_1",
|
|
'weight': 10,
|
|
'uri': "sqlite:///:memory:"
|
|
}
|
|
)
|
|
def test_health_with_pool(self, params):
|
|
# FIXME(flwang): Please use mongodb after the sqlalchemy is disabled
|
|
# as pool node and the mongodb is working on gate successfully.
|
|
doc = helpers.create_pool_body(
|
|
weight=params.get('weight', 10),
|
|
uri=params.get('uri', "sqlite:///:memory:")
|
|
)
|
|
|
|
pool_name = params.get('name', "pool_1")
|
|
self.addCleanup(self.client.delete, url='/pools/' + pool_name)
|
|
|
|
result = self.client.put('/pools/' + pool_name, data=doc)
|
|
self.assertEqual(result.status_code, 201)
|
|
|
|
queue_name = 'fake_queue'
|
|
self.addCleanup(self.client.delete, url='/queues/' + queue_name)
|
|
result = self.client.put('/queues/' + queue_name)
|
|
self.assertEqual(result.status_code, 201)
|
|
|
|
sample_messages = {'messages': [
|
|
{'body': 239, 'ttl': 999},
|
|
{'body': {'key': 'value'}, 'ttl': 888}
|
|
]}
|
|
|
|
result = self.client.post('/queues/%s/messages' % queue_name,
|
|
data=sample_messages)
|
|
self.assertEqual(result.status_code, 201)
|
|
|
|
claim_metadata = {'ttl': 100, 'grace': 300}
|
|
|
|
result = self.client.post('/queues/%s/claims' % queue_name,
|
|
data=claim_metadata)
|
|
self.assertEqual(result.status_code, 201)
|
|
|
|
response = self.client.get('/health')
|
|
self.assertEqual(response.status_code, 200)
|
|
health = response.json()
|
|
|
|
self.assertEqual(health['catalog_reachable'], True)
|
|
self.assertEqual(health[pool_name]['storage_reachable'], True)
|
|
op_status = health[pool_name]['operation_status']
|
|
for op in op_status.keys():
|
|
self.assertTrue(op_status[op]['succeeded'])
|
|
|
|
message_volume = health[pool_name]['message_volume']
|
|
self.assertEqual(message_volume['claimed'], 2)
|
|
self.assertEqual(message_volume['free'], 0)
|
|
self.assertEqual(message_volume['total'], 2)
|