b90de80316
*) Change a bit ceilometer plugin and oslo.messaging notification base so now there is no magic to get service and project name. *) Add method that can get notification from ceilometer if ceilometer client and base id are passed Change-Id: I0c52c7975a5893b33df0b0dd685bfb7b26f3091a
242 lines
9.5 KiB
Python
242 lines
9.5 KiB
Python
# Copyright 2014 Mirantis Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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 mock
|
|
|
|
from osprofiler.parsers import ceilometer
|
|
|
|
from tests import test
|
|
|
|
|
|
class CeilometerParserTestCase(test.TestCase):
|
|
|
|
def test_build_empty_tree(self):
|
|
self.assertEqual(ceilometer._build_tree({}), [])
|
|
|
|
def test_build_complex_tree(self):
|
|
test_input = {
|
|
"2": {"parent_id": "0", "trace_id": "2", "info": {"started": 1}},
|
|
"1": {"parent_id": "0", "trace_id": "1", "info": {"started": 0}},
|
|
"21": {"parent_id": "2", "trace_id": "21", "info": {"started": 6}},
|
|
"22": {"parent_id": "2", "trace_id": "22", "info": {"started": 7}},
|
|
"11": {"parent_id": "1", "trace_id": "11", "info": {"started": 1}},
|
|
"113": {"parent_id": "11", "trace_id": "113",
|
|
"info": {"started": 3}},
|
|
"112": {"parent_id": "11", "trace_id": "112",
|
|
"info": {"started": 2}},
|
|
"114": {"parent_id": "11", "trace_id": "114",
|
|
"info": {"started": 5}}
|
|
}
|
|
|
|
expected_output = [
|
|
{
|
|
"parent_id": "0",
|
|
"trace_id": "1",
|
|
"info": {"started": 0},
|
|
"children": [
|
|
{
|
|
"parent_id": "1",
|
|
"trace_id": "11",
|
|
"info": {"started": 1},
|
|
"children": [
|
|
{"parent_id": "11", "trace_id": "112",
|
|
"info": {"started": 2}, "children": []},
|
|
{"parent_id": "11", "trace_id": "113",
|
|
"info": {"started": 3}, "children": []},
|
|
{"parent_id": "11", "trace_id": "114",
|
|
"info": {"started": 5}, "children": []}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"parent_id": "0",
|
|
"trace_id": "2",
|
|
"info": {"started": 1},
|
|
"children": [
|
|
{"parent_id": "2", "trace_id": "21",
|
|
"info": {"started": 6}, "children": []},
|
|
{"parent_id": "2", "trace_id": "22",
|
|
"info": {"started": 7}, "children": []}
|
|
]
|
|
}
|
|
]
|
|
|
|
self.assertEqual(ceilometer._build_tree(test_input), expected_output)
|
|
|
|
def test_parse_notifications(self):
|
|
samples = [
|
|
{
|
|
"id": "896f5e52-d4c9-11e3-a117-46c0b36ac153",
|
|
"metadata": {
|
|
"base_id": "f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"event_type": "profiler.nova",
|
|
"host": "0.0.0.0",
|
|
"service": "osapi_compute",
|
|
"project": "nova",
|
|
"name": "WSGI-stop",
|
|
"parent_id": "82281b35-63aa-45fc-8578-5a32a66370ab",
|
|
"trace_id": "837eb0bd-323a-4e3f-b223-3be78ad86aab"
|
|
},
|
|
"meter": "WSGI-stop",
|
|
"project_id": None,
|
|
"recorded_at": "2014-05-06T02:53:03.110724",
|
|
"resource_id": "profiler-f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"source": "openstack",
|
|
"timestamp": "2014-05-06T02:52:59.357020",
|
|
"type": "gauge",
|
|
"unit": "sample",
|
|
"user_id": None,
|
|
"volume": 1.0
|
|
},
|
|
{
|
|
"id": "895043a0-d4c9-11e3-a117-46c0b36ac153",
|
|
"metadata": {
|
|
"base_id": "f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"event_type": "profiler.nova",
|
|
"host": "0.0.0.0",
|
|
"service": "osapi_compute",
|
|
"project": "nova",
|
|
"name": "WSGI-start",
|
|
"parent_id": "82281b35-63aa-45fc-8578-5a32a66370ab",
|
|
"trace_id": "837eb0bd-323a-4e3f-b223-3be78ad86aab"
|
|
},
|
|
"meter": "WSGI-start",
|
|
"project_id": None,
|
|
"recorded_at": "2014-05-06T02:53:03.020620",
|
|
"resource_id": "profiler-f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"source": "openstack",
|
|
"timestamp": "2014-05-06T02:52:59.225552",
|
|
"type": "gauge",
|
|
"unit": "sample",
|
|
"user_id": None,
|
|
"volume": 1.0
|
|
},
|
|
|
|
{
|
|
"id": "89558414-d4c9-11e3-a117-46c0b36ac153",
|
|
"metadata": {
|
|
"base_id": "f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"event_type": "profiler.nova",
|
|
"host": "0.0.0.0",
|
|
"service": "osapi_compute",
|
|
"project": "nova",
|
|
"info.db:multiparams": "(immutabledict({}),)",
|
|
"info.db:params": "{}",
|
|
"name": "db-start",
|
|
"parent_id": "837eb0bd-323a-4e3f-b223-3be78ad86aab",
|
|
"trace_id": "f8ab042e-1085-4df2-9f3a-cfb6390b8090"
|
|
},
|
|
"meter": "db-start",
|
|
"project_id": None,
|
|
"recorded_at": "2014-05-06T02:53:03.038692",
|
|
"resource_id": "profiler-f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"source": "openstack",
|
|
"timestamp": "2014-05-06T02:52:59.273422",
|
|
"type": "gauge",
|
|
"unit": "sample",
|
|
"user_id": None,
|
|
"volume": 1.0
|
|
},
|
|
{
|
|
"id": "892d3018-d4c9-11e3-a117-46c0b36ac153",
|
|
"metadata": {
|
|
"base_id": "f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"event_type": "profiler.generic",
|
|
"host": "ubuntu",
|
|
"service": "nova-conductor",
|
|
"project": "nova",
|
|
"name": "db-stop",
|
|
"parent_id": "aad4748f-99d5-45c8-be0a-4025894bb3db",
|
|
"trace_id": "8afee05d-0ad2-4515-bd03-db0f2d30eed0"
|
|
},
|
|
"meter": "db-stop",
|
|
"project_id": None,
|
|
"recorded_at": "2014-05-06T02:53:02.894015",
|
|
"resource_id": "profiler-f5587500-07d1-41a0-b434-525d3c28ac49",
|
|
"source": "openstack",
|
|
"timestamp": "2014-05-06T02:53:00.473201",
|
|
"type": "gauge",
|
|
"unit": "sample",
|
|
"user_id": None,
|
|
"volume": 1.0
|
|
}
|
|
]
|
|
|
|
excepted = {
|
|
"info": {
|
|
"finished": 1247,
|
|
"name": "total",
|
|
"started": 0
|
|
},
|
|
"children": [
|
|
{
|
|
"info": {
|
|
"finished": 131,
|
|
"host": "0.0.0.0",
|
|
"service": "osapi_compute",
|
|
"name": "WSGI",
|
|
"project": "nova",
|
|
"started": 0
|
|
},
|
|
"parent_id": "82281b35-63aa-45fc-8578-5a32a66370ab",
|
|
"trace_id": "837eb0bd-323a-4e3f-b223-3be78ad86aab",
|
|
"children": [{
|
|
"children": [],
|
|
"info": {
|
|
"finished": 47,
|
|
"host": "0.0.0.0",
|
|
"service": "osapi_compute",
|
|
"project": "nova",
|
|
"info.db:multiparams": "(immutabledict({}),)",
|
|
"info.db:params": "{}",
|
|
"name": "db",
|
|
"started": 47
|
|
},
|
|
|
|
"parent_id": "837eb0bd-323a-4e3f-b223-3be78ad86aab",
|
|
"trace_id": "f8ab042e-1085-4df2-9f3a-cfb6390b8090"
|
|
}]
|
|
},
|
|
{
|
|
"children": [],
|
|
"info": {
|
|
"finished": 1247,
|
|
"host": "ubuntu",
|
|
"name": "db",
|
|
"service": "nova-conductor",
|
|
"project": "nova",
|
|
"started": 1247
|
|
},
|
|
"parent_id": "aad4748f-99d5-45c8-be0a-4025894bb3db",
|
|
"trace_id": "8afee05d-0ad2-4515-bd03-db0f2d30eed0"
|
|
}
|
|
]
|
|
}
|
|
|
|
self.assertEqual(ceilometer.parse_notifications(samples), excepted)
|
|
|
|
def test_get_notifications(self):
|
|
mock_ceil_client = mock.MagicMock()
|
|
mock_ceil_client.query_samples.query.return_value = "result"
|
|
base_id = "10"
|
|
|
|
result = ceilometer.get_notifications(mock_ceil_client, base_id)
|
|
|
|
expected_filter = '{"=": {"resource_id": "profiler-%s"}}' % base_id
|
|
mock_ceil_client.query_samples.query.assert_called_once_with(
|
|
expected_filter, None, None)
|
|
self.assertEqual(result, "result")
|