ceilometer-2014.1/0000775000175300017540000000000012323717426015075 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/bin/0000775000175300017540000000000012323717426015645 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/bin/ceilometer-test-event.py0000775000175300017540000000477212323717130022450 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2013 Rackspace Hosting. # # Author: Monsyne Dragon # # 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. """Command line tool help you debug your event definitions. Feed it a list of test notifications in json format, and it will show you what events will be generated. """ import json import sys from oslo.config import cfg from stevedore import extension from ceilometer.event import converter from ceilometer import service cfg.CONF.register_cli_opts([ cfg.StrOpt('input-file', short='i', help='File to read test notifications from.' ' (Containing a json list of notifications.)' ' defaults to stdin.'), cfg.StrOpt('output-file', short='o', help='File to write results to. Defaults to stdout.'), ]) TYPES = {1: 'text', 2: 'int', 3: 'float', 4: 'datetime'} service.prepare_service() config_file = converter.get_config_file() output_file = cfg.CONF.output_file input_file = cfg.CONF.input_file if output_file is None: out = sys.stdout else: out = open(output_file, 'w') if input_file is None: notifications = json.load(sys.stdin) else: with open(input_file, 'r') as f: notifications = json.load(f) out.write("Definitions file: %s\n" % config_file) out.write("Notifications tested: %s\n" % len(notifications)) event_converter = converter.setup_events( extension.ExtensionManager( namespace='ceilometer.event.trait_plugin')) for notification in notifications: event = event_converter.to_event(notification) if event is None: out.write("Dropped notification: %s\n" % notification['message_id']) continue out.write("Event: %s at %s\n" % (event.event_name, event.generated)) for trait in event.traits: dtype = TYPES[trait.dtype] out.write(" Trait: name: %s, type: %s, value: %s\n" % ( trait.name, dtype, trait.value)) ceilometer-2014.1/bin/ceilometer-rpc-zmq-receiver0000775000175300017540000000330712323717132023111 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2011 OpenStack Foundation # # 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 eventlet eventlet.monkey_patch() import contextlib import os import sys # If ../ceilometer/__init__.py exists, add ../ to Python search path, so that # it will override what happens to be installed in /usr/(local/)lib/python... POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), os.pardir, os.pardir)) if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'ceilometer', '__init__.py')): sys.path.insert(0, POSSIBLE_TOPDIR) from oslo.config import cfg from ceilometer.openstack.common import log as logging from ceilometer.openstack.common import rpc from ceilometer.openstack.common.rpc import impl_zmq CONF = cfg.CONF CONF.register_opts(rpc.rpc_opts) CONF.register_opts(impl_zmq.zmq_opts) def main(): CONF(sys.argv[1:], project='ceilometer') logging.setup("ceilometer") with contextlib.closing(impl_zmq.ZmqProxy(CONF)) as reactor: reactor.consume_in_thread() reactor.wait() if __name__ == '__main__': main() ceilometer-2014.1/.coveragerc0000664000175300017540000000020112323717130017177 0ustar jenkinsjenkins00000000000000[run] branch = True source = ceilometer omit = ceilometer/tests/*, ceilometer/openstack/common/* [report] ignore-errors = True ceilometer-2014.1/README.rst0000664000175300017540000000017412323717130016556 0ustar jenkinsjenkins00000000000000ceilometer ========== See the ReleaseNotes document and the project home for more info. http://launchpad.net/ceilometer ceilometer-2014.1/babel.cfg0000664000175300017540000000002112323717130016604 0ustar jenkinsjenkins00000000000000[python: **.py] ceilometer-2014.1/setup.cfg0000664000175300017540000002611412323717426016722 0ustar jenkinsjenkins00000000000000[metadata] name = ceilometer version = 2014.1 summary = OpenStack Telemetry description-file = README.rst author = OpenStack author-email = openstack-dev@lists.openstack.org home-page = http://www.openstack.org/ classifier = Environment :: OpenStack Intended Audience :: Information Technology Intended Audience :: System Administrators License :: OSI Approved :: Apache Software License Operating System :: POSIX :: Linux Programming Language :: Python Programming Language :: Python :: 2 Programming Language :: Python :: 2.6 Programming Language :: Python :: 2.7 Topic :: System :: Monitoring [global] setup-hooks = pbr.hooks.setup_hook [files] packages = ceilometer [entry_points] ceilometer.notification = instance = ceilometer.compute.notifications.instance:Instance instance_flavor = ceilometer.compute.notifications.instance:InstanceFlavor instance_delete = ceilometer.compute.notifications.instance:InstanceDelete instance_scheduled = ceilometer.compute.notifications.instance:InstanceScheduled memory = ceilometer.compute.notifications.instance:Memory vcpus = ceilometer.compute.notifications.instance:VCpus disk_root_size = ceilometer.compute.notifications.instance:RootDiskSize disk_ephemeral_size = ceilometer.compute.notifications.instance:EphemeralDiskSize cpu_frequency = ceilometer.compute.notifications.cpu:CpuFrequency cpu_user_time = ceilometer.compute.notifications.cpu:CpuUserTime cpu_kernel_time = ceilometer.compute.notifications.cpu:CpuKernelTime cpu_idle_time = ceilometer.compute.notifications.cpu:CpuIdleTime cpu_iowait_time = ceilometer.compute.notifications.cpu:CpuIowaitTime cpu_kernel_percent = ceilometer.compute.notifications.cpu:CpuKernelPercent cpu_idle_percent = ceilometer.compute.notifications.cpu:CpuIdlePercent cpu_user_percent = ceilometer.compute.notifications.cpu:CpuUserPercent cpu_iowait_percent = ceilometer.compute.notifications.cpu:CpuIowaitPercent cpu_percent = ceilometer.compute.notifications.cpu:CpuPercent volume = ceilometer.volume.notifications:Volume volume_size = ceilometer.volume.notifications:VolumeSize image_crud = ceilometer.image.notifications:ImageCRUD image = ceilometer.image.notifications:Image image_size = ceilometer.image.notifications:ImageSize image_download = ceilometer.image.notifications:ImageDownload image_serve = ceilometer.image.notifications:ImageServe network = ceilometer.network.notifications:Network subnet = ceilometer.network.notifications:Subnet port = ceilometer.network.notifications:Port router = ceilometer.network.notifications:Router floatingip = ceilometer.network.notifications:FloatingIP bandwidth = ceilometer.network.notifications:Bandwidth http.request = ceilometer.middleware:HTTPRequest http.response = ceilometer.middleware:HTTPResponse stack_crud = ceilometer.orchestration.notifications:StackCRUD ceilometer.discover = local_instances = ceilometer.compute.discovery:InstanceDiscovery ceilometer.poll.compute = disk.read.requests = ceilometer.compute.pollsters.disk:ReadRequestsPollster disk.write.requests = ceilometer.compute.pollsters.disk:WriteRequestsPollster disk.read.bytes = ceilometer.compute.pollsters.disk:ReadBytesPollster disk.write.bytes = ceilometer.compute.pollsters.disk:WriteBytesPollster disk.read.requests.rate = ceilometer.compute.pollsters.disk:ReadRequestsRatePollster disk.write.requests.rate = ceilometer.compute.pollsters.disk:WriteRequestsRatePollster disk.read.bytes.rate = ceilometer.compute.pollsters.disk:ReadBytesRatePollster disk.write.bytes.rate = ceilometer.compute.pollsters.disk:WriteBytesRatePollster cpu = ceilometer.compute.pollsters.cpu:CPUPollster cpu_util = ceilometer.compute.pollsters.cpu:CPUUtilPollster network.incoming.bytes = ceilometer.compute.pollsters.net:IncomingBytesPollster network.incoming.packets = ceilometer.compute.pollsters.net:IncomingPacketsPollster network.outgoing.bytes = ceilometer.compute.pollsters.net:OutgoingBytesPollster network.outgoing.packets = ceilometer.compute.pollsters.net:OutgoingPacketsPollster network.incoming.bytes.rate = ceilometer.compute.pollsters.net:IncomingBytesRatePollster network.outgoing.bytes.rate = ceilometer.compute.pollsters.net:OutgoingBytesRatePollster instance = ceilometer.compute.pollsters.instance:InstancePollster instance_flavor = ceilometer.compute.pollsters.instance:InstanceFlavorPollster memory.usage = ceilometer.compute.pollsters.memory:MemoryUsagePollster ceilometer.poll.central = ip.floating = ceilometer.network.floatingip:FloatingIPPollster image = ceilometer.image.glance:ImagePollster image.size = ceilometer.image.glance:ImageSizePollster storage.containers.objects = ceilometer.objectstore.swift:ContainersObjectsPollster storage.containers.objects.size = ceilometer.objectstore.swift:ContainersSizePollster storage.objects = ceilometer.objectstore.swift:ObjectsPollster storage.objects.size = ceilometer.objectstore.swift:ObjectsSizePollster storage.objects.containers = ceilometer.objectstore.swift:ObjectsContainersPollster energy = ceilometer.energy.kwapi:EnergyPollster power = ceilometer.energy.kwapi:PowerPollster switch.port = ceilometer.network.statistics.port:PortPollster switch.port.receive.packets = ceilometer.network.statistics.port:PortPollsterReceivePackets switch.port.transmit.packets = ceilometer.network.statistics.port:PortPollsterTransmitPackets switch.port.receive.bytes = ceilometer.network.statistics.port:PortPollsterReceiveBytes switch.port.transmit.bytes = ceilometer.network.statistics.port:PortPollsterTransmitBytes switch.port.receive.drops = ceilometer.network.statistics.port:PortPollsterReceiveDrops switch.port.transmit.drops = ceilometer.network.statistics.port:PortPollsterTransmitDrops switch.port.receive.errors = ceilometer.network.statistics.port:PortPollsterReceiveErrors switch.port.transmit.errors = ceilometer.network.statistics.port:PortPollsterTransmitErrors switch.port.receive.frame_error = ceilometer.network.statistics.port:PortPollsterReceiveFrameErrors switch.port.receive.overrun_error = ceilometer.network.statistics.port:PortPollsterReceiveOverrunErrors switch.port.receive.crc_error = ceilometer.network.statistics.port:PortPollsterReceiveCRCErrors switch.port.collision.count = ceilometer.network.statistics.port:PortPollsterCollisionCount switch.table = ceilometer.network.statistics.table:TablePollster switch.table.active.entries = ceilometer.network.statistics.table:TablePollsterActiveEntries switch.table.lookup.packets = ceilometer.network.statistics.table:TablePollsterLookupPackets switch.table.matched.packets = ceilometer.network.statistics.table:TablePollsterMatchedPackets switch = ceilometer.network.statistics.switch:SWPollster switch.flow = ceilometer.network.statistics.flow:FlowPollster switch.flow.bytes = ceilometer.network.statistics.flow:FlowPollsterBytes switch.flow.duration.nanoseconds = ceilometer.network.statistics.flow:FlowPollsterDurationNanoseconds switch.flow.duration.seconds = ceilometer.network.statistics.flow:FlowPollsterDurationSeconds switch.flow.packets = ceilometer.network.statistics.flow:FlowPollsterPackets hardware.cpu.load.1min = ceilometer.hardware.pollsters.cpu:CPULoad1MinPollster hardware.cpu.load.5min = ceilometer.hardware.pollsters.cpu:CPULoad5MinPollster hardware.cpu.load.15min = ceilometer.hardware.pollsters.cpu:CPULoad15MinPollster hardware.disk.size.total = ceilometer.hardware.pollsters.disk:DiskTotalPollster hardware.disk.size.used = ceilometer.hardware.pollsters.disk:DiskUsedPollster hardware.network.bandwidth.bytes = ceilometer.hardware.pollsters.net:BandwidthBytesPollster hardware.network.incoming.bytes = ceilometer.hardware.pollsters.net:IncomingBytesPollster hardware.network.outgoing.bytes = ceilometer.hardware.pollsters.net:OutgoingBytesPollster hardware.network.outgoing.errors = ceilometer.hardware.pollsters.net:OutgoingErrorsPollster hardware.memory.total = ceilometer.hardware.pollsters.memory:MemoryTotalPollster hardware.memory.used = ceilometer.hardware.pollsters.memory:MemoryUsedPollster ceilometer.storage = log = ceilometer.storage.impl_log:LogStorage mongodb = ceilometer.storage.impl_mongodb:MongoDBStorage mysql = ceilometer.storage.impl_sqlalchemy:SQLAlchemyStorage postgresql = ceilometer.storage.impl_sqlalchemy:SQLAlchemyStorage sqlite = ceilometer.storage.impl_sqlalchemy:SQLAlchemyStorage hbase = ceilometer.storage.impl_hbase:HBaseStorage db2 = ceilometer.storage.impl_db2:DB2Storage ceilometer.compute.virt = libvirt = ceilometer.compute.virt.libvirt.inspector:LibvirtInspector hyperv = ceilometer.compute.virt.hyperv.inspector:HyperVInspector vsphere = ceilometer.compute.virt.vmware.inspector:VsphereInspector ceilometer.hardware.inspectors = snmp = ceilometer.hardware.inspector.snmp:SNMPInspector ceilometer.transformer = accumulator = ceilometer.transformer.accumulator:TransformerAccumulator unit_conversion = ceilometer.transformer.conversions:ScalingTransformer rate_of_change = ceilometer.transformer.conversions:RateOfChangeTransformer ceilometer.publisher = test = ceilometer.publisher.test:TestPublisher meter_publisher = ceilometer.publisher.rpc:RPCPublisher meter = ceilometer.publisher.rpc:RPCPublisher rpc = ceilometer.publisher.rpc:RPCPublisher udp = ceilometer.publisher.udp:UDPPublisher file = ceilometer.publisher.file:FilePublisher ceilometer.alarm.evaluator = threshold = ceilometer.alarm.evaluator.threshold:ThresholdEvaluator combination = ceilometer.alarm.evaluator.combination:CombinationEvaluator ceilometer.alarm.notifier = log = ceilometer.alarm.notifier.log:LogAlarmNotifier test = ceilometer.alarm.notifier.test:TestAlarmNotifier http = ceilometer.alarm.notifier.rest:RestAlarmNotifier https = ceilometer.alarm.notifier.rest:RestAlarmNotifier ceilometer.event.trait_plugin = split = ceilometer.event.trait_plugins:SplitterTraitPlugin bitfield = ceilometer.event.trait_plugins:BitfieldTraitPlugin paste.filter_factory = swift = ceilometer.objectstore.swift_middleware:filter_factory console_scripts = ceilometer-api = ceilometer.cli:api ceilometer-agent-central = ceilometer.cli:agent_central ceilometer-agent-compute = ceilometer.cli:agent_compute ceilometer-agent-notification = ceilometer.cli:agent_notification ceilometer-send-sample = ceilometer.cli:send_sample ceilometer-dbsync = ceilometer.cli:storage_dbsync ceilometer-expirer = ceilometer.cli:storage_expirer ceilometer-collector = ceilometer.cli:collector_service ceilometer-alarm-evaluator = ceilometer.cli:alarm_evaluator ceilometer-alarm-notifier = ceilometer.cli:alarm_notifier ceilometer.dispatcher = database = ceilometer.dispatcher.database:DatabaseDispatcher file = ceilometer.dispatcher.file:FileDispatcher network.statistics.drivers = opendaylight = ceilometer.network.statistics.opendaylight.driver:OpenDayLightDriver [build_sphinx] all_files = 1 build-dir = doc/build source-dir = doc/source [extract_messages] keywords = _ gettext ngettext l_ lazy_gettext mapping_file = babel.cfg output_file = ceilometer/locale/ceilometer.pot [compile_catalog] directory = ceilometer/locale domain = ceilometer [update_catalog] domain = ceilometer output_dir = ceilometer/locale input_file = ceilometer/locale/ceilometer.pot [egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 ceilometer-2014.1/ceilometer/0000775000175300017540000000000012323717426017225 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/0000775000175300017540000000000012323717426020367 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/publisher/0000775000175300017540000000000012323717426022364 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/publisher/test_file.py0000664000175300017540000001063712323717130024713 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. """Tests for ceilometer/publisher/file.py """ import datetime import logging import logging.handlers import os import tempfile from ceilometer.openstack.common import network_utils as utils from ceilometer.openstack.common import test from ceilometer.publisher import file from ceilometer import sample class TestFilePublisher(test.BaseTestCase): test_data = [ sample.Sample( name='test', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), sample.Sample( name='test2', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), sample.Sample( name='test2', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), ] def test_file_publisher_maxbytes(self): # Test valid configurations tempdir = tempfile.mkdtemp() name = '%s/log_file' % tempdir parsed_url = utils.urlsplit('file://%s?max_bytes=50&backup_count=3' % name) publisher = file.FilePublisher(parsed_url) publisher.publish_samples(None, self.test_data) handler = publisher.publisher_logger.handlers[0] self.assertIsInstance(handler, logging.handlers.RotatingFileHandler) self.assertEqual([50, name, 3], [handler.maxBytes, handler.baseFilename, handler.backupCount]) # The rotating file gets created since only allow 50 bytes. self.assertTrue(os.path.exists('%s.1' % name)) def test_file_publisher(self): # Test missing max bytes, backup count configurations tempdir = tempfile.mkdtemp() name = '%s/log_file_plain' % tempdir parsed_url = utils.urlsplit('file://%s' % name) publisher = file.FilePublisher(parsed_url) publisher.publish_samples(None, self.test_data) handler = publisher.publisher_logger.handlers[0] self.assertIsInstance(handler, logging.handlers.RotatingFileHandler) self.assertEqual([0, name, 0], [handler.maxBytes, handler.baseFilename, handler.backupCount]) # Test the content is corrected saved in the file self.assertTrue(os.path.exists(name)) with open(name, 'r') as f: content = f.read() for sample in self.test_data: self.assertTrue(sample.id in content) self.assertTrue(sample.timestamp in content) def test_file_publisher_invalid(self): # Test invalid max bytes, backup count configurations tempdir = tempfile.mkdtemp() parsed_url = utils.urlsplit( 'file://%s/log_file_bad' '?max_bytes=yus&backup_count=5y' % tempdir) publisher = file.FilePublisher(parsed_url) publisher.publish_samples(None, self.test_data) self.assertIsNone(publisher.publisher_logger) ceilometer-2014.1/ceilometer/tests/publisher/test_udp.py0000664000175300017540000001167412323717130024566 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. """Tests for ceilometer/publisher/udp.py """ import datetime import mock import msgpack from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import network_utils from ceilometer.openstack.common import test from ceilometer.publisher import udp from ceilometer.publisher import utils from ceilometer import sample COUNTER_SOURCE = 'testsource' class TestUDPPublisher(test.BaseTestCase): test_data = [ sample.Sample( name='test', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, source=COUNTER_SOURCE, ), sample.Sample( name='test', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, source=COUNTER_SOURCE, ), sample.Sample( name='test2', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, source=COUNTER_SOURCE, ), sample.Sample( name='test2', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, source=COUNTER_SOURCE, ), sample.Sample( name='test3', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, source=COUNTER_SOURCE, ), ] def _make_fake_socket(self, published): def _fake_socket_socket(family, type): def record_data(msg, dest): published.append((msg, dest)) udp_socket = mock.Mock() udp_socket.sendto = record_data return udp_socket return _fake_socket_socket def setUp(self): super(TestUDPPublisher, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.CONF.publisher.metering_secret = 'not-so-secret' def test_published(self): self.data_sent = [] with mock.patch('socket.socket', self._make_fake_socket(self.data_sent)): publisher = udp.UDPPublisher( network_utils.urlsplit('udp://somehost')) publisher.publish_samples(None, self.test_data) self.assertEqual(5, len(self.data_sent)) sent_counters = [] for data, dest in self.data_sent: counter = msgpack.loads(data) sent_counters.append(counter) # Check destination self.assertEqual(('somehost', self.CONF.collector.udp_port), dest) # Check that counters are equal self.assertEqual(sorted( [utils.meter_message_from_counter(d, "not-so-secret") for d in self.test_data]), sorted(sent_counters)) @staticmethod def _raise_ioerror(*args): raise IOError def _make_broken_socket(self, family, type): udp_socket = mock.Mock() udp_socket.sendto = self._raise_ioerror return udp_socket def test_publish_error(self): with mock.patch('socket.socket', self._make_broken_socket): publisher = udp.UDPPublisher( network_utils.urlsplit('udp://localhost')) publisher.publish_samples(None, self.test_data) ceilometer-2014.1/ceilometer/tests/publisher/test_utils.py0000664000175300017540000000775112323717130025137 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # Tyaptin Ilya # # 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. """Tests for ceilometer/publisher/utils.py """ from ceilometer.openstack.common import jsonutils from ceilometer.openstack.common import test from ceilometer.publisher import utils class TestSignature(test.BaseTestCase): def test_compute_signature_change_key(self): sig1 = utils.compute_signature({'a': 'A', 'b': 'B'}, 'not-so-secret') sig2 = utils.compute_signature({'A': 'A', 'b': 'B'}, 'not-so-secret') self.assertNotEqual(sig1, sig2) def test_compute_signature_change_value(self): sig1 = utils.compute_signature({'a': 'A', 'b': 'B'}, 'not-so-secret') sig2 = utils.compute_signature({'a': 'a', 'b': 'B'}, 'not-so-secret') self.assertNotEqual(sig1, sig2) def test_compute_signature_same(self): sig1 = utils.compute_signature({'a': 'A', 'b': 'B'}, 'not-so-secret') sig2 = utils.compute_signature({'a': 'A', 'b': 'B'}, 'not-so-secret') self.assertEqual(sig1, sig2) def test_compute_signature_signed(self): data = {'a': 'A', 'b': 'B'} sig1 = utils.compute_signature(data, 'not-so-secret') data['message_signature'] = sig1 sig2 = utils.compute_signature(data, 'not-so-secret') self.assertEqual(sig1, sig2) def test_compute_signature_use_configured_secret(self): data = {'a': 'A', 'b': 'B'} sig1 = utils.compute_signature(data, 'not-so-secret') sig2 = utils.compute_signature(data, 'different-value') self.assertNotEqual(sig1, sig2) def test_verify_signature_signed(self): data = {'a': 'A', 'b': 'B'} sig1 = utils.compute_signature(data, 'not-so-secret') data['message_signature'] = sig1 self.assertTrue(utils.verify_signature(data, 'not-so-secret')) def test_verify_signature_unsigned(self): data = {'a': 'A', 'b': 'B'} self.assertFalse(utils.verify_signature(data, 'not-so-secret')) def test_verify_signature_incorrect(self): data = {'a': 'A', 'b': 'B', 'message_signature': 'Not the same'} self.assertFalse(utils.verify_signature(data, 'not-so-secret')) def test_verify_signature_nested(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', }, } data['message_signature'] = utils.compute_signature( data, 'not-so-secret') self.assertTrue(utils.verify_signature(data, 'not-so-secret')) def test_verify_signature_nested_json(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', 'c': ('c',), 'd': ['d'] }, } data['message_signature'] = utils.compute_signature( data, 'not-so-secret') jsondata = jsonutils.loads(jsonutils.dumps(data)) self.assertTrue(utils.verify_signature(jsondata, 'not-so-secret')) ceilometer-2014.1/ceilometer/tests/publisher/__init__.py0000664000175300017540000000000012323717130024453 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/publisher/test_rpc_publisher.py0000664000175300017540000002711512323717132026636 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # # 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. """Tests for ceilometer/publisher/rpc.py """ import datetime import eventlet import fixtures import mock from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import network_utils from ceilometer.openstack.common import test from ceilometer.publisher import rpc from ceilometer import sample class TestPublish(test.BaseTestCase): test_data = [ sample.Sample( name='test', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), sample.Sample( name='test', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), sample.Sample( name='test2', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), sample.Sample( name='test2', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), sample.Sample( name='test3', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'TestPublish'}, ), ] def faux_cast(self, context, topic, msg): if self.rpc_unreachable: #note(sileht): Ugly, but when rabbitmq is unreachable # and rabbitmq_max_retries is not 0 # oslo.rpc do a sys.exit(1), so we do the same # things here until this is fixed in oslo raise SystemExit(1) else: self.published.append((topic, msg)) def setUp(self): super(TestPublish, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.published = [] self.rpc_unreachable = False self.useFixture(fixtures.MonkeyPatch( "ceilometer.openstack.common.rpc.cast", self.faux_cast)) def test_published(self): publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://')) publisher.publish_samples(None, self.test_data) self.assertEqual(1, len(self.published)) self.assertEqual(self.CONF.publisher_rpc.metering_topic, self.published[0][0]) self.assertIsInstance(self.published[0][1]['args']['data'], list) self.assertEqual('record_metering_data', self.published[0][1]['method']) def test_publish_target(self): publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?target=custom_procedure_call')) publisher.publish_samples(None, self.test_data) self.assertEqual(1, len(self.published)) self.assertEqual(self.CONF.publisher_rpc.metering_topic, self.published[0][0]) self.assertIsInstance(self.published[0][1]['args']['data'], list) self.assertEqual('custom_procedure_call', self.published[0][1]['method']) def test_published_with_per_meter_topic(self): publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?per_meter_topic=1')) publisher.publish_samples(None, self.test_data) self.assertEqual(4, len(self.published)) for topic, rpc_call in self.published: meters = rpc_call['args']['data'] self.assertIsInstance(meters, list) if topic != self.CONF.publisher_rpc.metering_topic: self.assertEqual(1, len(set(meter['counter_name'] for meter in meters)), "Meter are published grouped by name") topics = [topic for topic, meter in self.published] self.assertIn(self.CONF.publisher_rpc.metering_topic, topics) self.assertIn( self.CONF.publisher_rpc.metering_topic + '.' + 'test', topics) self.assertIn( self.CONF.publisher_rpc.metering_topic + '.' + 'test2', topics) self.assertIn( self.CONF.publisher_rpc.metering_topic + '.' + 'test3', topics) def test_published_concurrency(self): """This test the concurrent access to the local queue of the rpc publisher """ def faux_cast_go(context, topic, msg): self.published.append((topic, msg)) def faux_cast_wait(context, topic, msg): self.useFixture(fixtures.MonkeyPatch( "ceilometer.openstack.common.rpc.cast", faux_cast_go)) # Sleep to simulate concurrency and allow other threads to work eventlet.sleep(0) self.published.append((topic, msg)) self.useFixture(fixtures.MonkeyPatch( "ceilometer.openstack.common.rpc.cast", faux_cast_wait)) publisher = rpc.RPCPublisher(network_utils.urlsplit('rpc://')) job1 = eventlet.spawn(publisher.publish_samples, None, self.test_data) job2 = eventlet.spawn(publisher.publish_samples, None, self.test_data) job1.wait() job2.wait() self.assertEqual('default', publisher.policy) self.assertEqual(2, len(self.published)) self.assertEqual(0, len(publisher.local_queue)) @mock.patch('ceilometer.publisher.rpc.LOG') def test_published_with_no_policy(self, mylog): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://')) self.assertTrue(mylog.info.called) self.assertRaises( SystemExit, publisher.publish_samples, None, self.test_data) self.assertEqual('default', publisher.policy) self.assertEqual(0, len(self.published)) self.assertEqual(0, len(publisher.local_queue)) @mock.patch('ceilometer.publisher.rpc.LOG') def test_published_with_policy_block(self, mylog): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=default')) self.assertTrue(mylog.info.called) self.assertRaises( SystemExit, publisher.publish_samples, None, self.test_data) self.assertEqual(0, len(self.published)) self.assertEqual(0, len(publisher.local_queue)) @mock.patch('ceilometer.publisher.rpc.LOG') def test_published_with_policy_incorrect(self, mylog): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=notexist')) self.assertRaises( SystemExit, publisher.publish_samples, None, self.test_data) self.assertTrue(mylog.warn.called) self.assertEqual('default', publisher.policy) self.assertEqual(0, len(self.published)) self.assertEqual(0, len(publisher.local_queue)) def test_published_with_policy_drop_and_rpc_down(self): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=drop')) publisher.publish_samples(None, self.test_data) self.assertEqual(0, len(self.published)) self.assertEqual(0, len(publisher.local_queue)) def test_published_with_policy_queue_and_rpc_down(self): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=queue')) publisher.publish_samples(None, self.test_data) self.assertEqual(0, len(self.published)) self.assertEqual(1, len(publisher.local_queue)) def test_published_with_policy_queue_and_rpc_down_up(self): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=queue')) publisher.publish_samples(None, self.test_data) self.assertEqual(0, len(self.published)) self.assertEqual(1, len(publisher.local_queue)) self.rpc_unreachable = False publisher.publish_samples(None, self.test_data) self.assertEqual(2, len(self.published)) self.assertEqual(0, len(publisher.local_queue)) def test_published_with_policy_sized_queue_and_rpc_down(self): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=queue&max_queue_length=3')) for i in range(5): for s in self.test_data: s.source = 'test-%d' % i publisher.publish_samples(None, self.test_data) self.assertEqual(0, len(self.published)) self.assertEqual(3, len(publisher.local_queue)) self.assertEqual('test-2', publisher.local_queue[0][2]['args']['data'][0] ['source']) self.assertEqual('test-3', publisher.local_queue[1][2]['args']['data'][0] ['source']) self.assertEqual('test-4', publisher.local_queue[2][2]['args']['data'][0] ['source']) def test_published_with_policy_default_sized_queue_and_rpc_down(self): self.rpc_unreachable = True publisher = rpc.RPCPublisher( network_utils.urlsplit('rpc://?policy=queue')) for i in range(2000): for s in self.test_data: s.source = 'test-%d' % i publisher.publish_samples(None, self.test_data) self.assertEqual(0, len(self.published)) self.assertEqual(1024, len(publisher.local_queue)) self.assertEqual('test-976', publisher.local_queue[0][2]['args']['data'][0] ['source']) self.assertEqual('test-1999', publisher.local_queue[1023][2]['args']['data'][0] ['source']) ceilometer-2014.1/ceilometer/tests/sources.json0000664000175300017540000000007212323717130022734 0ustar jenkinsjenkins00000000000000{ "test_source": { "somekey": 666 } } ceilometer-2014.1/ceilometer/tests/network/0000775000175300017540000000000012323717426022060 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/network/test_notifications.py0000664000175300017540000003136112323717132026340 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Julien Danjou # # 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. """Tests for ceilometer.network.notifications """ from ceilometer.network import notifications from ceilometer.openstack.common import test NOTIFICATION_NETWORK_CREATE = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'network.create.end', u'timestamp': u'2012-09-27 14:11:27.086575', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': {u'network': {u'status': u'ACTIVE', u'subnets': [], u'name': u'abcedf', u'router:external': False, u'tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'admin_state_up': True, u'shared': False, u'id': u'7fd4eb2f-a38e-4c25-8490-71ca8800c9be'}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:11:26.924779', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'9e839576-cc47-4c60-a7d8-5743681213b1'} NOTIFICATION_SUBNET_CREATE = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'subnet.create.end', u'timestamp': u'2012-09-27 14:11:27.426620', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': { u'subnet': { u'name': u'mysubnet', u'enable_dhcp': True, u'network_id': u'7fd4eb2f-a38e-4c25-8490-71ca8800c9be', u'tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'dns_nameservers': [], u'allocation_pools': [{u'start': u'192.168.42.2', u'end': u'192.168.42.254'}], u'host_routes': [], u'ip_version': 4, u'gateway_ip': u'192.168.42.1', u'cidr': u'192.168.42.0/24', u'id': u'1a3a170d-d7ce-4cc9-b1db-621da15a25f5'}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:11:27.214490', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'd86dfc66-d3c3-4aea-b06d-bf37253e6116'} NOTIFICATION_PORT_CREATE = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'port.create.end', u'timestamp': u'2012-09-27 14:28:31.536370', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': { u'port': { u'status': u'ACTIVE', u'name': u'', u'admin_state_up': True, u'network_id': u'7fd4eb2f-a38e-4c25-8490-71ca8800c9be', u'tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'device_owner': u'', u'mac_address': u'fa:16:3e:75:0c:49', u'fixed_ips': [{ u'subnet_id': u'1a3a170d-d7ce-4cc9-b1db-621da15a25f5', u'ip_address': u'192.168.42.3'}], u'id': u'9cdfeb92-9391-4da7-95a1-ca214831cfdb', u'device_id': u''}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:28:31.438919', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'7135b8ab-e13c-4ac8-bc31-75e7f756622a'} NOTIFICATION_PORT_UPDATE = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'port.update.end', u'timestamp': u'2012-09-27 14:35:09.514052', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': { u'port': { u'status': u'ACTIVE', u'name': u'bonjour', u'admin_state_up': True, u'network_id': u'7fd4eb2f-a38e-4c25-8490-71ca8800c9be', u'tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'device_owner': u'', u'mac_address': u'fa:16:3e:75:0c:49', u'fixed_ips': [{ u'subnet_id': u'1a3a170d-d7ce-4cc9-b1db-621da15a25f5', u'ip_address': u'192.168.42.3'}], u'id': u'9cdfeb92-9391-4da7-95a1-ca214831cfdb', u'device_id': u''}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:35:09.447682', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'07b0a3a1-c0b5-40ab-a09c-28dee6bf48f4'} NOTIFICATION_NETWORK_EXISTS = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'network.exists', u'timestamp': u'2012-09-27 14:11:27.086575', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': {u'network': {u'status': u'ACTIVE', u'subnets': [], u'name': u'abcedf', u'router:external': False, u'tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'admin_state_up': True, u'shared': False, u'id': u'7fd4eb2f-a38e-4c25-8490-71ca8800c9be'}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:11:26.924779', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'9e839576-cc47-4c60-a7d8-5743681213b1'} NOTIFICATION_ROUTER_EXISTS = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'router.exists', u'timestamp': u'2012-09-27 14:11:27.086575', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': {u'router': {'status': u'ACTIVE', 'external_gateway_info': {'network_id': u'89d55642-4dec-43a4-a617-6cec051393b5'}, 'name': u'router1', 'admin_state_up': True, 'tenant_id': u'bb04a2b769c94917b57ba49df7783cfd', 'id': u'ab8bb3ed-df23-4ca0-8f03-b887abcd5c23'}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:11:26.924779', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'9e839576-cc47-4c60-a7d8-5743681213b1'} NOTIFICATION_FLOATINGIP_EXISTS = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'floatingip.exists', u'timestamp': u'2012-09-27 14:11:27.086575', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': {u'floatingip': {'router_id': None, 'tenant_id': u'6e5f9df9b3a249ab834f25fe1b1b81fd', 'floating_network_id': u'001400f7-1710-4245-98c3-39ba131cc39a', 'fixed_ip_address': None, 'floating_ip_address': u'172.24.4.227', 'port_id': None, 'id': u'2b7cc28c-6f78-4735-9246-257168405de6'}}, u'priority': u'INFO', u'_context_is_admin': False, u'_context_timestamp': u'2012-09-27 14:11:26.924779', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'9e839576-cc47-4c60-a7d8-5743681213b1'} NOTIFICATION_FLOATINGIP_UPDATE = { u'_context_roles': [u'anotherrole', u'Member'], u'_context_read_deleted': u'no', u'event_type': u'floatingip.update.start', u'timestamp': u'2012-09-27 14:11:27.086575', u'_context_tenant_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'payload': {u'floatingip': {u'fixed_ip_address': u'172.24.4.227', u'id': u'a68c9390-829e-4732-bad4-e0a978498cc5', u'port_id': u'e12150f2-885b-45bc-a248-af1c23787d55'}}, u'priority': u'INFO', u'_unique_id': u'e483db017b2341fd9ec314dcda88d3e9', u'_context_is_admin': False, u'_context_project_id': u'82ed0c40ebe64d0bb3310027039c8ed2', u'_context_timestamp': u'2012-09-27 14:11:26.924779', u'_context_user_id': u'b44b7ce67fc84414a5c1660a92a1b862', u'publisher_id': u'network.ubuntu-VirtualBox', u'message_id': u'9e839576-cc47-4c60-a7d8-5743681213b1'} NOTIFICATION_L3_METER = { u'_context_roles': [u'admin'], u'_context_read_deleted': u'no', u'event_type': u'l3.meter', u'timestamp': u'2013-08-22 13:14:06.880304', u'_context_tenant_id': None, u'payload': {u'first_update': 1377176476, u'bytes': 0, u'label_id': u'383244a7-e99b-433a-b4a1-d37cf5b17d15', u'last_update': 1377177246, u'host': u'precise64', u'tenant_id': u'admin', u'time': 30, u'pkts': 0}, u'priority': u'INFO', u'_context_is_admin': True, u'_context_timestamp': u'2013-08-22 13:01:06.614635', u'_context_user_id': None, u'publisher_id': u'metering.precise64', u'message_id': u'd7aee6e8-c7eb-4d47-9338-f60920d708e4', u'_unique_id': u'd5a3bdacdcc24644b84e67a4c10e886a', u'_context_project_id': None} class TestNotifications(test.BaseTestCase): def test_network_create(self): v = notifications.Network() samples = list(v.process_notification(NOTIFICATION_NETWORK_CREATE)) self.assertEqual(2, len(samples)) self.assertEqual("network.create", samples[1].name) def test_subnet_create(self): v = notifications.Subnet() samples = list(v.process_notification(NOTIFICATION_SUBNET_CREATE)) self.assertEqual(2, len(samples)) self.assertEqual("subnet.create", samples[1].name) def test_port_create(self): v = notifications.Port() samples = list(v.process_notification(NOTIFICATION_PORT_CREATE)) self.assertEqual(2, len(samples)) self.assertEqual("port.create", samples[1].name) def test_port_update(self): v = notifications.Port() samples = list(v.process_notification(NOTIFICATION_PORT_UPDATE)) self.assertEqual(2, len(samples)) self.assertEqual("port.update", samples[1].name) def test_network_exists(self): v = notifications.Network() samples = v.process_notification(NOTIFICATION_NETWORK_EXISTS) self.assertEqual(1, len(list(samples))) def test_router_exists(self): v = notifications.Router() samples = v.process_notification(NOTIFICATION_ROUTER_EXISTS) self.assertEqual(1, len(list(samples))) def test_floatingip_exists(self): v = notifications.FloatingIP() samples = list(v.process_notification(NOTIFICATION_FLOATINGIP_EXISTS)) self.assertEqual(1, len(samples)) self.assertEqual("ip.floating", samples[0].name) def test_floatingip_update(self): v = notifications.FloatingIP() samples = list(v.process_notification(NOTIFICATION_FLOATINGIP_UPDATE)) self.assertEqual(len(samples), 2) self.assertEqual(samples[0].name, "ip.floating") def test_metering_report(self): v = notifications.Bandwidth() samples = list(v.process_notification(NOTIFICATION_L3_METER)) self.assertEqual(1, len(samples)) self.assertEqual("bandwidth", samples[0].name) class TestEventTypes(test.BaseTestCase): def test_network(self): v = notifications.Network() events = v.event_types assert events def test_subnet(self): v = notifications.Subnet() events = v.event_types assert events def test_port(self): v = notifications.Port() events = v.event_types assert events def test_router(self): self.assertTrue(notifications.Router().event_types) def test_floatingip(self): self.assertTrue(notifications.FloatingIP().event_types) def test_bandwidth(self): self.assertTrue(notifications.Bandwidth().event_types) ceilometer-2014.1/ceilometer/tests/network/test_floatingip.py0000664000175300017540000000700712323717130025621 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # # Copyright 2013 IBM Corp # All Rights Reserved. # # Author: Julien Danjou # # 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 ceilometer.central import manager from ceilometer.network import floatingip from ceilometer.openstack.common import context from ceilometer.openstack.common import test class TestFloatingIPPollster(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestFloatingIPPollster, self).setUp() self.addCleanup(mock.patch.stopall) self.context = context.get_admin_context() self.manager = manager.AgentManager() self.pollster = floatingip.FloatingIPPollster() fake_ips = self.fake_get_ips() patch_virt = mock.patch('ceilometer.nova_client.Client.' 'floating_ip_get_all', return_value=fake_ips) patch_virt.start() @staticmethod def fake_get_ips(): ips = [] for i in range(1, 4): ip = mock.MagicMock() ip.id = i ip.ip = '1.1.1.%d' % i ip.pool = 'public' ips.append(ip) return ips # FIXME(dhellmann): Is there a useful way to define this # test without a database? # # def test_get_samples_none_defined(self): # try: # list(self.pollster.get_samples(self.manager, # self.context) # ) # except exception.NoFloatingIpsDefined: # pass # else: # assert False, 'Should have seen an error' def test_get_samples_not_empty(self): samples = list(self.pollster.get_samples(self.manager, {})) self.assertEqual(3, len(samples)) # It's necessary to verify all the attributes extracted by Nova # API /os-floating-ips to make sure they're available and correct. self.assertEqual(1, samples[0].resource_id) self.assertEqual("1.1.1.1", samples[0].resource_metadata["address"]) self.assertEqual("public", samples[0].resource_metadata["pool"]) self.assertEqual(2, samples[1].resource_id) self.assertEqual("1.1.1.2", samples[1].resource_metadata["address"]) self.assertEqual("public", samples[1].resource_metadata["pool"]) self.assertEqual(3, samples[2].resource_id) self.assertEqual("1.1.1.3", samples[2].resource_metadata["address"]) self.assertEqual("public", samples[2].resource_metadata["pool"]) def test_get_meter_names(self): samples = list(self.pollster.get_samples(self.manager, {})) self.assertEqual(set(['ip.floating']), set([s.name for s in samples])) def test_get_samples_cached(self): cache = {} cache['floating_ips'] = self.fake_get_ips()[:2] samples = list(self.pollster.get_samples(self.manager, cache)) self.assertEqual(2, len(samples)) ceilometer-2014.1/ceilometer/tests/network/statistics/0000775000175300017540000000000012323717426024252 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/network/statistics/opendaylight/0000775000175300017540000000000012323717426026741 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/network/statistics/opendaylight/test_client.py0000664000175300017540000001363712323717130031632 0ustar jenkinsjenkins00000000000000# # Copyright 2013 NEC Corporation. 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 requests import auth as req_auth import six from six.moves.urllib import parse as url_parse from ceilometer.network.statistics.opendaylight import client from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import test class TestClientHTTPBasicAuth(test.BaseTestCase): auth_way = 'basic' scheme = 'http' def setUp(self): super(TestClientHTTPBasicAuth, self).setUp() self.parsed_url = url_parse.urlparse( 'http://127.0.0.1:8080/controller/nb/v2?container_name=default&' 'container_name=egg&auth=%s&user=admin&password=admin_pass&' 'scheme=%s' % (self.auth_way, self.scheme)) self.params = url_parse.parse_qs(self.parsed_url.query) self.endpoint = url_parse.urlunparse( url_parse.ParseResult(self.scheme, self.parsed_url.netloc, self.parsed_url.path, None, None, None)) odl_params = {} odl_params['auth'] = self.params.get('auth')[0] odl_params['user'] = self.params.get('user')[0] odl_params['password'] = self.params.get('password')[0] self.client = client.Client(self.endpoint, odl_params) self.resp = mock.MagicMock() self.get = mock.patch('requests.get', return_value=self.resp).start() self.resp.raw.version = 1.1 self.resp.status_code = 200 self.resp.reason = 'OK' self.resp.headers = {} self.resp.content = 'dummy' def _test_request(self, method, url): data = method('default') call_args = self.get.call_args_list[0][0] call_kwargs = self.get.call_args_list[0][1] # check url real_url = url % {'container_name': 'default', 'scheme': self.scheme} self.assertEqual(real_url, call_args[0]) # check auth parameters auth = call_kwargs.get('auth') if self.auth_way == 'digest': self.assertIsInstance(auth, req_auth.HTTPDigestAuth) else: self.assertIsInstance(auth, req_auth.HTTPBasicAuth) self.assertEqual('admin', auth.username) self.assertEqual('admin_pass', auth.password) # check header self.assertEqual( {'Accept': 'application/json'}, call_kwargs['headers']) # check return value self.assertEqual(self.get().json(), data) def test_flow_statistics(self): self._test_request( self.client.statistics.get_flow_statistics, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/statistics/%(container_name)s/flow') def test_port_statistics(self): self._test_request( self.client.statistics.get_port_statistics, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/statistics/%(container_name)s/port') def test_table_statistics(self): self._test_request( self.client.statistics.get_table_statistics, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/statistics/%(container_name)s/table') def test_topology(self): self._test_request( self.client.topology.get_topology, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/topology/%(container_name)s') def test_user_links(self): self._test_request( self.client.topology.get_user_links, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/topology/%(container_name)s/userLinks') def test_switch(self): self._test_request( self.client.switch_manager.get_nodes, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/switchmanager/%(container_name)s/nodes') def test_active_hosts(self): self._test_request( self.client.host_tracker.get_active_hosts, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/hosttracker/%(container_name)s/hosts/active') def test_inactive_hosts(self): self._test_request( self.client.host_tracker.get_inactive_hosts, '%(scheme)s://127.0.0.1:8080/controller/nb/v2' '/hosttracker/%(container_name)s/hosts/inactive') def test_http_error(self): self.resp.status_code = 404 self.resp.reason = 'Not Found' try: self.client.statistics.get_flow_statistics('default') self.fail('') except client.OpenDaylightRESTAPIFailed as e: self.assertEqual( _('OpenDaylitght API returned %(status)s %(reason)s') % {'status': self.resp.status_code, 'reason': self.resp.reason}, six.text_type(e)) def test_other_error(self): class _Exception(Exception): pass self.get = mock.patch('requests.get', side_effect=_Exception).start() self.assertRaises(_Exception, self.client.statistics.get_flow_statistics, 'default') class TestClientHTTPDigestAuth(TestClientHTTPBasicAuth): auth_way = 'digest' class TestClientHTTPSBasicAuth(TestClientHTTPBasicAuth): scheme = 'https' class TestClientHTTPSDigestAuth(TestClientHTTPDigestAuth): scheme = 'https' ceilometer-2014.1/ceilometer/tests/network/statistics/opendaylight/test_driver.py0000664000175300017540000020140512323717130031637 0ustar jenkinsjenkins00000000000000# # Copyright 2013 NEC Corporation. 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 abc import mock import six from six import moves from six.moves.urllib import parse as url_parse from ceilometer.network.statistics.opendaylight import driver from ceilometer.openstack.common import test @six.add_metaclass(abc.ABCMeta) class _Base(test.BaseTestCase): @abc.abstractproperty def flow_data(self): pass @abc.abstractproperty def port_data(self): pass @abc.abstractproperty def table_data(self): pass @abc.abstractproperty def topology_data(self): pass @abc.abstractproperty def switch_data(self): pass @abc.abstractproperty def user_links_data(self): pass @abc.abstractproperty def active_hosts_data(self): pass @abc.abstractproperty def inactive_hosts_data(self): pass fake_odl_url = url_parse.ParseResult('opendaylight', 'localhost:8080', 'controller/nb/v2', None, None, None) fake_params = url_parse.parse_qs('user=admin&password=admin&scheme=http&' 'container_name=default&auth=basic') fake_params_multi_container = \ url_parse.parse_qs('user=admin&password=admin&scheme=http&' 'container_name=first&container_name=second&' 'auth=basic') def setUp(self): super(_Base, self).setUp() self.addCleanup(mock.patch.stopall) self.driver = driver.OpenDayLightDriver() self.get_flow_statistics = mock.patch( 'ceilometer.network.statistics.opendaylight.client.' 'StatisticsAPIClient.get_flow_statistics', return_value=self.flow_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'StatisticsAPIClient.get_table_statistics', return_value=self.table_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'StatisticsAPIClient.get_port_statistics', return_value=self.port_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'TopologyAPIClient.get_topology', return_value=self.topology_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'TopologyAPIClient.get_user_links', return_value=self.user_links_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'SwitchManagerAPIClient.get_nodes', return_value=self.switch_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'HostTrackerAPIClient.get_active_hosts', return_value=self.active_hosts_data).start() mock.patch('ceilometer.network.statistics.opendaylight.client.' 'HostTrackerAPIClient.get_inactive_hosts', return_value=self.inactive_hosts_data).start() def _test_for_meter(self, meter_name, expected_data): sample_data = self.driver.get_sample_data(meter_name, self.fake_odl_url, self.fake_params, {}) for sample, expected in moves.zip(sample_data, expected_data): self.assertEqual(expected[0], sample[0]) # check volume self.assertEqual(expected[1], sample[1]) # check resource id self.assertEqual(expected[2], sample[2]) # check resource metadata self.assertIsNotNone(sample[3]) # timestamp class TestOpenDayLightDriverSpecial(_Base): flow_data = {"flowStatistics": []} port_data = {"portStatistics": []} table_data = {"tableStatistics": []} topology_data = {"edgeProperties": []} switch_data = {"nodeProperties": []} user_links_data = {"userLinks": []} active_hosts_data = {"hostConfig": []} inactive_hosts_data = {"hostConfig": []} def test_not_implemented_meter(self): sample_data = self.driver.get_sample_data('egg', self.fake_odl_url, self.fake_params, {}) self.assertIsNone(sample_data) sample_data = self.driver.get_sample_data('switch.table.egg', self.fake_odl_url, self.fake_params, {}) self.assertIsNone(sample_data) def test_cache(self): cache = {} self.driver.get_sample_data('switch', self.fake_odl_url, self.fake_params, cache) self.driver.get_sample_data('switch', self.fake_odl_url, self.fake_params, cache) self.assertEqual(self.get_flow_statistics.call_count, 1) cache = {} self.driver.get_sample_data('switch', self.fake_odl_url, self.fake_params, cache) self.assertEqual(self.get_flow_statistics.call_count, 2) def test_multi_container(self): cache = {} self.driver.get_sample_data('switch', self.fake_odl_url, self.fake_params_multi_container, cache) self.assertEqual(self.get_flow_statistics.call_count, 2) self.assertIn('network.statistics.opendaylight', cache) odl_data = cache['network.statistics.opendaylight'] self.assertIn('first', odl_data) self.assertIn('second', odl_data) def test_http_error(self): mock.patch('ceilometer.network.statistics.opendaylight.client.' 'StatisticsAPIClient.get_flow_statistics', side_effect=Exception()).start() sample_data = self.driver.get_sample_data('switch', self.fake_odl_url, self.fake_params, {}) self.assertEqual(0, len(sample_data)) mock.patch('ceilometer.network.statistics.opendaylight.client.' 'StatisticsAPIClient.get_flow_statistics', side_effect=[Exception(), self.flow_data]).start() cache = {} self.driver.get_sample_data('switch', self.fake_odl_url, self.fake_params_multi_container, cache) self.assertIn('network.statistics.opendaylight', cache) odl_data = cache['network.statistics.opendaylight'] self.assertIn('second', odl_data) class TestOpenDayLightDriverSimple(_Base): flow_data = { "flowStatistics": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "flowStatistic": [ { "flow": { "match": { "matchField": [ { "type": "DL_TYPE", "value": "2048" }, { "mask": "255.255.255.255", "type": "NW_DST", "value": "1.1.1.1" } ] }, "actions": { "@type": "output", "port": { "id": "3", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" } }, "hardTimeout": "0", "id": "0", "idleTimeout": "0", "priority": "1" }, "byteCount": "0", "durationNanoseconds": "397000000", "durationSeconds": "1828", "packetCount": "0", "tableId": "0" }, ] } ] } port_data = { "portStatistics": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "portStatistic": [ { "nodeConnector": { "id": "4", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "collisionCount": "0", "receiveBytes": "0", "receiveCrcError": "0", "receiveDrops": "0", "receiveErrors": "0", "receiveFrameError": "0", "receiveOverRunError": "0", "receivePackets": "0", "transmitBytes": "0", "transmitDrops": "0", "transmitErrors": "0", "transmitPackets": "0" }, ] } ] } table_data = { "tableStatistics": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "tableStatistic": [ { "activeCount": "11", "lookupCount": "816", "matchedCount": "220", "nodeTable": { "id": "0", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" } } }, ] } ] } topology_data = {"edgeProperties": []} switch_data = { "nodeProperties": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "properties": { "actions": { "value": "4095" }, "timeStamp": { "name": "connectedSince", "value": "1377291227877" } } }, ] } user_links_data = {"userLinks": []} active_hosts_data = {"hostConfig": []} inactive_hosts_data = {"hostConfig": []} def test_meter_switch(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', "properties_actions": "4095", "properties_timeStamp_connectedSince": "1377291227877" }), ] self._test_for_meter('switch', expected_data) def test_meter_switch_port(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4', }), ] self._test_for_meter('switch.port', expected_data) def test_meter_switch_port_receive_packets(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.packets', expected_data) def test_meter_switch_port_transmit_packets(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.transmit.packets', expected_data) def test_meter_switch_port_receive_bytes(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.bytes', expected_data) def test_meter_switch_port_transmit_bytes(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.transmit.bytes', expected_data) def test_meter_switch_port_receive_drops(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.drops', expected_data) def test_meter_switch_port_transmit_drops(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.transmit.drops', expected_data) def test_meter_switch_port_receive_errors(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.errors', expected_data) def test_meter_switch_port_transmit_errors(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.transmit.errors', expected_data) def test_meter_switch_port_receive_frame_error(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.frame_error', expected_data) def test_meter_switch_port_receive_overrun_error(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.overrun_error', expected_data) def test_meter_switch_port_receive_crc_error(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.receive.crc_error', expected_data) def test_meter_switch_port_collision_count(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), ] self._test_for_meter('switch.port.collision.count', expected_data) def test_meter_switch_table(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), ] self._test_for_meter('switch.table', expected_data) def test_meter_switch_table_active_entries(self): expected_data = [ (11, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), ] self._test_for_meter('switch.table.active.entries', expected_data) def test_meter_switch_table_lookup_packets(self): expected_data = [ (816, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), ] self._test_for_meter('switch.table.lookup.packets', expected_data) def test_meter_switch_table_matched_packets(self): expected_data = [ (220, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), ] self._test_for_meter('switch.table.matched.packets', expected_data) def test_meter_switch_flow(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1" }), ] self._test_for_meter('switch.flow', expected_data) def test_meter_switch_flow_duration_seconds(self): expected_data = [ (1828, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.duration_seconds', expected_data) def test_meter_switch_flow_duration_nanoseconds(self): expected_data = [ (397000000, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.duration_nanoseconds', expected_data) def test_meter_switch_flow_packets(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.packets', expected_data) def test_meter_switch_flow_bytes(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.bytes', expected_data) class TestOpenDayLightDriverComplex(_Base): flow_data = { "flowStatistics": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "flowStatistic": [ { "flow": { "match": { "matchField": [ { "type": "DL_TYPE", "value": "2048" }, { "mask": "255.255.255.255", "type": "NW_DST", "value": "1.1.1.1" } ] }, "actions": { "@type": "output", "port": { "id": "3", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" } }, "hardTimeout": "0", "id": "0", "idleTimeout": "0", "priority": "1" }, "byteCount": "0", "durationNanoseconds": "397000000", "durationSeconds": "1828", "packetCount": "0", "tableId": "0" }, { "flow": { "match": { "matchField": [ { "type": "DL_TYPE", "value": "2048" }, { "mask": "255.255.255.255", "type": "NW_DST", "value": "1.1.1.2" } ] }, "actions": { "@type": "output", "port": { "id": "4", "node": { "id": "00:00:00:00:00:00:00:03", "type": "OF" }, "type": "OF" } }, "hardTimeout": "0", "id": "0", "idleTimeout": "0", "priority": "1" }, "byteCount": "89", "durationNanoseconds": "200000", "durationSeconds": "5648", "packetCount": "30", "tableId": "1" } ] } ] } port_data = { "portStatistics": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "portStatistic": [ { "nodeConnector": { "id": "4", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "collisionCount": "0", "receiveBytes": "0", "receiveCrcError": "0", "receiveDrops": "0", "receiveErrors": "0", "receiveFrameError": "0", "receiveOverRunError": "0", "receivePackets": "0", "transmitBytes": "0", "transmitDrops": "0", "transmitErrors": "0", "transmitPackets": "0" }, { "nodeConnector": { "id": "3", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "collisionCount": "0", "receiveBytes": "12740", "receiveCrcError": "0", "receiveDrops": "0", "receiveErrors": "0", "receiveFrameError": "0", "receiveOverRunError": "0", "receivePackets": "182", "transmitBytes": "12110", "transmitDrops": "0", "transmitErrors": "0", "transmitPackets": "173" }, { "nodeConnector": { "id": "2", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "collisionCount": "0", "receiveBytes": "12180", "receiveCrcError": "0", "receiveDrops": "0", "receiveErrors": "0", "receiveFrameError": "0", "receiveOverRunError": "0", "receivePackets": "174", "transmitBytes": "12670", "transmitDrops": "0", "transmitErrors": "0", "transmitPackets": "181" }, { "nodeConnector": { "id": "1", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "collisionCount": "0", "receiveBytes": "0", "receiveCrcError": "0", "receiveDrops": "0", "receiveErrors": "0", "receiveFrameError": "0", "receiveOverRunError": "0", "receivePackets": "0", "transmitBytes": "0", "transmitDrops": "0", "transmitErrors": "0", "transmitPackets": "0" }, { "nodeConnector": { "id": "0", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "collisionCount": "0", "receiveBytes": "0", "receiveCrcError": "0", "receiveDrops": "0", "receiveErrors": "0", "receiveFrameError": "0", "receiveOverRunError": "0", "receivePackets": "0", "transmitBytes": "0", "transmitDrops": "0", "transmitErrors": "0", "transmitPackets": "0" } ] } ] } table_data = { "tableStatistics": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "tableStatistic": [ { "activeCount": "11", "lookupCount": "816", "matchedCount": "220", "nodeTable": { "id": "0", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" } } }, { "activeCount": "20", "lookupCount": "10", "matchedCount": "5", "nodeTable": { "id": "1", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" } } } ] } ] } topology_data = { "edgeProperties": [ { "edge": { "headNodeConnector": { "id": "2", "node": { "id": "00:00:00:00:00:00:00:03", "type": "OF" }, "type": "OF" }, "tailNodeConnector": { "id": "2", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" } }, "properties": { "bandwidth": { "value": 10000000000 }, "config": { "value": 1 }, "name": { "value": "s2-eth3" }, "state": { "value": 1 }, "timeStamp": { "name": "creation", "value": 1379527162648 } } }, { "edge": { "headNodeConnector": { "id": "5", "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "type": "OF" }, "tailNodeConnector": { "id": "2", "node": { "id": "00:00:00:00:00:00:00:04", "type": "OF" }, "type": "OF" } }, "properties": { "timeStamp": { "name": "creation", "value": 1379527162648 } } } ] } switch_data = { "nodeProperties": [ { "node": { "id": "00:00:00:00:00:00:00:02", "type": "OF" }, "properties": { "actions": { "value": "4095" }, "buffers": { "value": "256" }, "capabilities": { "value": "199" }, "description": { "value": "None" }, "macAddress": { "value": "00:00:00:00:00:02" }, "tables": { "value": "-1" }, "timeStamp": { "name": "connectedSince", "value": "1377291227877" } } }, { "node": { "id": "00:00:00:00:00:00:00:03", "type": "OF" }, "properties": { "actions": { "value": "1024" }, "buffers": { "value": "512" }, "capabilities": { "value": "1000" }, "description": { "value": "Foo Bar" }, "macAddress": { "value": "00:00:00:00:00:03" }, "tables": { "value": "10" }, "timeStamp": { "name": "connectedSince", "value": "1377291228000" } } } ] } user_links_data = { "userLinks": [ { "dstNodeConnector": "OF|5@OF|00:00:00:00:00:00:00:05", "name": "link1", "srcNodeConnector": "OF|3@OF|00:00:00:00:00:00:00:02", "status": "Success" } ] } active_hosts_data = { "hostConfig": [ { "dataLayerAddress": "00:00:00:00:01:01", "networkAddress": "1.1.1.1", "nodeConnectorId": "9", "nodeConnectorType": "OF", "nodeId": "00:00:00:00:00:00:00:01", "nodeType": "OF", "staticHost": "false", "vlan": "0" }, { "dataLayerAddress": "00:00:00:00:02:02", "networkAddress": "2.2.2.2", "nodeConnectorId": "1", "nodeConnectorType": "OF", "nodeId": "00:00:00:00:00:00:00:02", "nodeType": "OF", "staticHost": "true", "vlan": "0" } ] } inactive_hosts_data = { "hostConfig": [ { "dataLayerAddress": "00:00:00:01:01:01", "networkAddress": "1.1.1.3", "nodeConnectorId": "8", "nodeConnectorType": "OF", "nodeId": "00:00:00:00:00:00:00:01", "nodeType": "OF", "staticHost": "false", "vlan": "0" }, { "dataLayerAddress": "00:00:00:01:02:02", "networkAddress": "2.2.2.4", "nodeConnectorId": "0", "nodeConnectorType": "OF", "nodeId": "00:00:00:00:00:00:00:02", "nodeType": "OF", "staticHost": "false", "vlan": "1" } ] } def test_meter_switch(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', "properties_actions": "4095", "properties_buffers": "256", "properties_capabilities": "199", "properties_description": "None", "properties_macAddress": "00:00:00:00:00:02", "properties_tables": "-1", "properties_timeStamp_connectedSince": "1377291227877" }), (1, "00:00:00:00:00:00:00:03", { 'controller': 'OpenDaylight', 'container': 'default', "properties_actions": "1024", "properties_buffers": "512", "properties_capabilities": "1000", "properties_description": "Foo Bar", "properties_macAddress": "00:00:00:00:00:03", "properties_tables": "10", "properties_timeStamp_connectedSince": "1377291228000" }), ] self._test_for_meter('switch', expected_data) def test_meter_switch_port(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4', }), (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3', 'user_link_node_id': '00:00:00:00:00:00:00:05', 'user_link_node_port': '5', 'user_link_status': 'Success', 'user_link_name': 'link1', }), (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2', 'topology_node_id': '00:00:00:00:00:00:00:03', 'topology_node_port': '2', "topology_bandwidth": 10000000000, "topology_config": 1, "topology_name": "s2-eth3", "topology_state": 1, "topology_timeStamp_creation": 1379527162648 }), (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1', 'host_status': 'active', 'host_dataLayerAddress': '00:00:00:00:02:02', 'host_networkAddress': '2.2.2.2', 'host_staticHost': 'true', 'host_vlan': '0', }), (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0', 'host_status': 'inactive', 'host_dataLayerAddress': '00:00:00:01:02:02', 'host_networkAddress': '2.2.2.4', 'host_staticHost': 'false', 'host_vlan': '1', }), ] self._test_for_meter('switch.port', expected_data) def test_meter_switch_port_receive_packets(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (182, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (174, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.packets', expected_data) def test_meter_switch_port_transmit_packets(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (173, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (181, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.transmit.packets', expected_data) def test_meter_switch_port_receive_bytes(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (12740, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (12180, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.bytes', expected_data) def test_meter_switch_port_transmit_bytes(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (12110, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (12670, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.transmit.bytes', expected_data) def test_meter_switch_port_receive_drops(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.drops', expected_data) def test_meter_switch_port_transmit_drops(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.transmit.drops', expected_data) def test_meter_switch_port_receive_errors(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.errors', expected_data) def test_meter_switch_port_transmit_errors(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.transmit.errors', expected_data) def test_meter_switch_port_receive_frame_error(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.frame_error', expected_data) def test_meter_switch_port_receive_overrun_error(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.overrun_error', expected_data) def test_meter_switch_port_receive_crc_error(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.receive.crc_error', expected_data) def test_meter_switch_port_collision_count(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '4'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '3'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '2'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '1'}), (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'port': '0'}), ] self._test_for_meter('switch.port.collision.count', expected_data) def test_meter_switch_table(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1'}), ] self._test_for_meter('switch.table', expected_data) def test_meter_switch_table_active_entries(self): expected_data = [ (11, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), (20, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1'}), ] self._test_for_meter('switch.table.active.entries', expected_data) def test_meter_switch_table_lookup_packets(self): expected_data = [ (816, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), (10, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1'}), ] self._test_for_meter('switch.table.lookup.packets', expected_data) def test_meter_switch_table_matched_packets(self): expected_data = [ (220, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0'}), (5, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1'}), ] self._test_for_meter('switch.table.matched.packets', expected_data) def test_meter_switch_flow(self): expected_data = [ (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1" }), (1, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.2", "flow_actions_@type": "output", "flow_actions_port_id": "4", "flow_actions_port_node_id": "00:00:00:00:00:00:00:03", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1" }), ] self._test_for_meter('switch.flow', expected_data) def test_meter_switch_flow_duration_seconds(self): expected_data = [ (1828, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), (5648, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.2", "flow_actions_@type": "output", "flow_actions_port_id": "4", "flow_actions_port_node_id": "00:00:00:00:00:00:00:03", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.duration_seconds', expected_data) def test_meter_switch_flow_duration_nanoseconds(self): expected_data = [ (397000000, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), (200000, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.2", "flow_actions_@type": "output", "flow_actions_port_id": "4", "flow_actions_port_node_id": "00:00:00:00:00:00:00:03", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.duration_nanoseconds', expected_data) def test_meter_switch_flow_packets(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), (30, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.2", "flow_actions_@type": "output", "flow_actions_port_id": "4", "flow_actions_port_node_id": "00:00:00:00:00:00:00:03", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.packets', expected_data) def test_meter_switch_flow_bytes(self): expected_data = [ (0, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '0', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.1", "flow_actions_@type": "output", "flow_actions_port_id": "3", "flow_actions_port_node_id": "00:00:00:00:00:00:00:02", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), (89, "00:00:00:00:00:00:00:02", { 'controller': 'OpenDaylight', 'container': 'default', 'table_id': '1', 'flow_id': '0', "flow_match_matchField[0]_type": "DL_TYPE", "flow_match_matchField[0]_value": "2048", "flow_match_matchField[1]_mask": "255.255.255.255", "flow_match_matchField[1]_type": "NW_DST", "flow_match_matchField[1]_value": "1.1.1.2", "flow_actions_@type": "output", "flow_actions_port_id": "4", "flow_actions_port_node_id": "00:00:00:00:00:00:00:03", "flow_actions_port_node_type": "OF", "flow_actions_port_type": "OF", "flow_hardTimeout": "0", "flow_idleTimeout": "0", "flow_priority": "1"}), ] self._test_for_meter('switch.flow.bytes', expected_data) ceilometer-2014.1/ceilometer/tests/network/statistics/opendaylight/__init__.py0000664000175300017540000000000012323717130031030 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/network/statistics/test_port.py0000664000175300017540000000714412323717130026645 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network.statistics import port from ceilometer import sample from ceilometer.tests.network import statistics class TestPortPollsters(statistics._PollsterTestBase): def test_port_pollster(self): self._test_pollster( port.PortPollster, 'switch.port', sample.TYPE_GAUGE, 'port') def test_port_pollster_receive_packets(self): self._test_pollster( port.PortPollsterReceivePackets, 'switch.port.receive.packets', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_transmit_packets(self): self._test_pollster( port.PortPollsterTransmitPackets, 'switch.port.transmit.packets', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_receive_bytes(self): self._test_pollster( port.PortPollsterReceiveBytes, 'switch.port.receive.bytes', sample.TYPE_CUMULATIVE, 'B') def test_port_pollster_transmit_bytes(self): self._test_pollster( port.PortPollsterTransmitBytes, 'switch.port.transmit.bytes', sample.TYPE_CUMULATIVE, 'B') def test_port_pollster_receive_drops(self): self._test_pollster( port.PortPollsterReceiveDrops, 'switch.port.receive.drops', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_transmit_drops(self): self._test_pollster( port.PortPollsterTransmitDrops, 'switch.port.transmit.drops', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_receive_errors(self): self._test_pollster( port.PortPollsterReceiveErrors, 'switch.port.receive.errors', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_transmit_errors(self): self._test_pollster( port.PortPollsterTransmitErrors, 'switch.port.transmit.errors', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_receive_frame_errors(self): self._test_pollster( port.PortPollsterReceiveFrameErrors, 'switch.port.receive.frame_error', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_receive_overrun_errors(self): self._test_pollster( port.PortPollsterReceiveOverrunErrors, 'switch.port.receive.overrun_error', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_receive_crc_errors(self): self._test_pollster( port.PortPollsterReceiveCRCErrors, 'switch.port.receive.crc_error', sample.TYPE_CUMULATIVE, 'packet') def test_port_pollster_collision_count(self): self._test_pollster( port.PortPollsterCollisionCount, 'switch.port.collision.count', sample.TYPE_CUMULATIVE, 'packet') ceilometer-2014.1/ceilometer/tests/network/statistics/test_table.py0000664000175300017540000000314412323717130026744 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network.statistics import table from ceilometer import sample from ceilometer.tests.network import statistics class TestTablePollsters(statistics._PollsterTestBase): def test_table_pollster(self): self._test_pollster( table.TablePollster, 'switch.table', sample.TYPE_GAUGE, 'table') def test_table_pollster_active_entries(self): self._test_pollster( table.TablePollsterActiveEntries, 'switch.table.active.entries', sample.TYPE_GAUGE, 'entry') def test_table_pollster_lookup_packets(self): self._test_pollster( table.TablePollsterLookupPackets, 'switch.table.lookup.packets', sample.TYPE_GAUGE, 'packet') def test_table_pollster_matched_packets(self): self._test_pollster( table.TablePollsterMatchedPackets, 'switch.table.matched.packets', sample.TYPE_GAUGE, 'packet') ceilometer-2014.1/ceilometer/tests/network/statistics/test_driver.py0000664000175300017540000000210212323717130027141 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network.statistics import driver from ceilometer.openstack.common import test class TestDriver(test.BaseTestCase): def test_driver_ok(self): class OkDriver(driver.Driver): def get_sample_data(self, meter_name, resources, cache): pass OkDriver() def test_driver_ng(self): class NgDriver(driver.Driver): """get_sample_data method is lost.""" self.assertRaises(TypeError, NgDriver) ceilometer-2014.1/ceilometer/tests/network/statistics/test_flow.py0000664000175300017540000000341712323717130026627 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network.statistics import flow from ceilometer import sample from ceilometer.tests.network import statistics class TestFlowPollsters(statistics._PollsterTestBase): def test_flow_pollster(self): self._test_pollster( flow.FlowPollster, 'switch.flow', sample.TYPE_GAUGE, 'flow') def test_flow_pollster_duration_seconds(self): self._test_pollster( flow.FlowPollsterDurationSeconds, 'switch.flow.duration_seconds', sample.TYPE_GAUGE, 's') def test_flow_pollster_duration_nanoseconds(self): self._test_pollster( flow.FlowPollsterDurationNanoseconds, 'switch.flow.duration_nanoseconds', sample.TYPE_GAUGE, 'ns') def test_flow_pollster_packets(self): self._test_pollster( flow.FlowPollsterPackets, 'switch.flow.packets', sample.TYPE_CUMULATIVE, 'packet') def test_flow_pollster_bytes(self): self._test_pollster( flow.FlowPollsterBytes, 'switch.flow.bytes', sample.TYPE_CUMULATIVE, 'B') ceilometer-2014.1/ceilometer/tests/network/statistics/__init__.py0000664000175300017540000000176712323717130026366 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.openstack.common import test class _PollsterTestBase(test.BaseTestCase): def _test_pollster(self, pollster_class, meter_name, meter_type, meter_unit): pollster = pollster_class() self.assertEqual(pollster.meter_name, meter_name) self.assertEqual(pollster.meter_type, meter_type) self.assertEqual(pollster.meter_unit, meter_unit) ceilometer-2014.1/ceilometer/tests/network/statistics/test_switch.py0000664000175300017540000000170212323717130027154 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network.statistics import switch from ceilometer import sample from ceilometer.tests.network import statistics class TestSwitchPollster(statistics._PollsterTestBase): def test_table_pollster(self): self._test_pollster( switch.SWPollster, 'switch', sample.TYPE_GAUGE, 'switch') ceilometer-2014.1/ceilometer/tests/network/statistics/test_statistics.py0000664000175300017540000001377312323717130030060 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network import statistics from ceilometer.network.statistics import driver from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils from ceilometer import sample class TestBase(test.BaseTestCase): def test_subclass_ok(self): class OkSubclass(statistics._Base): meter_name = 'foo' meter_type = sample.TYPE_GAUGE meter_unit = 'B' OkSubclass() def test_subclass_ng(self): class NgSubclass1(statistics._Base): '''meter_name is lost.''' meter_type = sample.TYPE_GAUGE meter_unit = 'B' class NgSubclass2(statistics._Base): '''meter_type is lost.''' meter_name = 'foo' meter_unit = 'B' class NgSubclass3(statistics._Base): '''meter_unit is lost.''' meter_name = 'foo' meter_type = sample.TYPE_GAUGE self.assertRaises(TypeError, NgSubclass1) self.assertRaises(TypeError, NgSubclass2) self.assertRaises(TypeError, NgSubclass3) class TestBaseGetSamples(test.BaseTestCase): def setUp(self): super(TestBaseGetSamples, self).setUp() class FakePollster(statistics._Base): meter_name = 'foo' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'bar' self.pollster = FakePollster() def tearDown(self): statistics._Base.drivers = {} super(TestBaseGetSamples, self).tearDown() def _setup_ext_mgr(self, **drivers): statistics._Base.drivers = drivers def _make_fake_driver(self, *return_values): class FakeDriver(driver.Driver): def __init__(self): self.index = 0 def get_sample_data(self, meter_name, parse_url, params, cache): if self.index >= len(return_values): yield None retval = return_values[self.index] self.index += 1 yield retval return FakeDriver def _make_timestamps(self, count): return [timeutils.isotime() for i in range(count)] def _get_samples(self, *resources): return [v for v in self.pollster.get_samples(self, {}, resources)] def _assert_sample(self, s, volume, resource_id, resource_metadata, timestamp): self.assertEqual(s.name, 'foo') self.assertEqual(s.type, sample.TYPE_CUMULATIVE) self.assertEqual(s.unit, 'bar') self.assertEqual(s.volume, volume) self.assertIsNone(s.user_id) self.assertIsNone(s.project_id) self.assertEqual(s.resource_id, resource_id) self.assertEqual(s.timestamp, timestamp) self.assertEqual(s.resource_metadata, resource_metadata) def test_get_samples_one_driver_one_resource(self): times = self._make_timestamps(2) fake_driver = self._make_fake_driver((1, 'a', {'spam': 'egg'}, times[0]), (2, 'b', None, times[1])) self._setup_ext_mgr(http=fake_driver()) samples = self._get_samples('http://foo') self.assertEqual(len(samples), 1) self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[0]) def test_get_samples_one_driver_two_resource(self): times = self._make_timestamps(3) fake_driver = self._make_fake_driver((1, 'a', {'spam': 'egg'}, times[0]), (2, 'b', None, times[1]), (3, 'c', None, times[2])) self._setup_ext_mgr(http=fake_driver()) samples = self._get_samples('http://foo', 'http://bar') self.assertEqual(len(samples), 2) self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[2]) self._assert_sample(samples[1], 2, 'b', None, times[1]) def test_get_samples_two_driver_one_resource(self): times = self._make_timestamps(4) fake_driver1 = self._make_fake_driver((1, 'a', {'spam': 'egg'}, times[0]), (2, 'b', None), times[1]) fake_driver2 = self._make_fake_driver((11, 'A', None, times[2]), (12, 'B', None, times[3])) self._setup_ext_mgr(http=fake_driver1(), https=fake_driver2()) samples = self._get_samples('http://foo') self.assertEqual(len(samples), 1) self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[0]) def test_get_samples_multi_samples(self): times = self._make_timestamps(2) fake_driver = self._make_fake_driver([(1, 'a', {'spam': 'egg'}, times[0]), (2, 'b', None, times[1])]) self._setup_ext_mgr(http=fake_driver()) samples = self._get_samples('http://foo') self.assertEqual(len(samples), 2) self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[0]) self._assert_sample(samples[1], 2, 'b', None, times[1]) def test_get_samples_return_none(self): fake_driver = self._make_fake_driver(None) self._setup_ext_mgr(http=fake_driver()) samples = self._get_samples('http://foo') self.assertEqual(len(samples), 0) ceilometer-2014.1/ceilometer/tests/network/__init__.py0000664000175300017540000000000012323717130024147 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/test_decoupled_pipeline.py0000664000175300017540000002340712323717130025627 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2014 Red Hat, Inc # # Author: Eoghan Glynn # # 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 yaml from ceilometer import pipeline from ceilometer import sample from ceilometer.tests import pipeline_base class TestDecoupledPipeline(pipeline_base.BasePipelineTestCase): def _setup_pipeline_cfg(self): source = {'name': 'test_source', 'interval': 5, 'counters': ['a'], 'resources': [], 'sinks': ['test_sink']} sink = {'name': 'test_sink', 'transformers': [{'name': 'update', 'parameters': {}}], 'publishers': ['test://']} self.pipeline_cfg = {'sources': [source], 'sinks': [sink]} def _augment_pipeline_cfg(self): self.pipeline_cfg['sources'].append({ 'name': 'second_source', 'interval': 5, 'counters': ['b'], 'resources': [], 'sinks': ['second_sink'] }) self.pipeline_cfg['sinks'].append({ 'name': 'second_sink', 'transformers': [{ 'name': 'update', 'parameters': { 'append_name': '_new', } }], 'publishers': ['new'], }) def _break_pipeline_cfg(self): self.pipeline_cfg['sources'].append({ 'name': 'second_source', 'interval': 5, 'counters': ['b'], 'resources': [], 'sinks': ['second_sink'] }) self.pipeline_cfg['sinks'].append({ 'name': 'second_sink', 'transformers': [{ 'name': 'update', 'parameters': { 'append_name': '_new', } }], 'publishers': ['except'], }) def _set_pipeline_cfg(self, field, value): if field in self.pipeline_cfg['sources'][0]: self.pipeline_cfg['sources'][0][field] = value else: self.pipeline_cfg['sinks'][0][field] = value def _extend_pipeline_cfg(self, field, value): if field in self.pipeline_cfg['sources'][0]: self.pipeline_cfg['sources'][0][field].extend(value) else: self.pipeline_cfg['sinks'][0][field].extend(value) def _unset_pipeline_cfg(self, field): if field in self.pipeline_cfg['sources'][0]: del self.pipeline_cfg['sources'][0][field] else: del self.pipeline_cfg['sinks'][0][field] def test_source_no_sink(self): del self.pipeline_cfg['sinks'] self._exception_create_pipelinemanager() def test_source_dangling_sink(self): self.pipeline_cfg['sources'].append({ 'name': 'second_source', 'interval': 5, 'counters': ['b'], 'resources': [], 'sinks': ['second_sink'] }) self._exception_create_pipelinemanager() def test_sink_no_source(self): del self.pipeline_cfg['sources'] self._exception_create_pipelinemanager() def test_source_with_multiple_sinks(self): counter_cfg = ['a', 'b'] self._set_pipeline_cfg('counters', counter_cfg) self.pipeline_cfg['sinks'].append({ 'name': 'second_sink', 'transformers': [{ 'name': 'update', 'parameters': { 'append_name': '_new', } }], 'publishers': ['new'], }) self.pipeline_cfg['sources'][0]['sinks'].append('second_sink') pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.test_counter = sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, ) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.assertEqual(len(pipeline_manager.pipelines), 2) self.assertEqual(str(pipeline_manager.pipelines[0]), 'test_source:test_sink') self.assertEqual(str(pipeline_manager.pipelines[1]), 'test_source:second_sink') test_publisher = pipeline_manager.pipelines[0].publishers[0] new_publisher = pipeline_manager.pipelines[1].publishers[0] for publisher, sfx in [(test_publisher, '_update'), (new_publisher, '_new')]: self.assertEqual(len(publisher.samples), 2) self.assertEqual(publisher.calls, 2) self.assertEqual(getattr(publisher.samples[0], "name"), 'a' + sfx) self.assertEqual(getattr(publisher.samples[1], "name"), 'b' + sfx) def test_multiple_sources_with_single_sink(self): self.pipeline_cfg['sources'].append({ 'name': 'second_source', 'interval': 5, 'counters': ['b'], 'resources': [], 'sinks': ['test_sink'] }) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.test_counter = sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, ) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.assertEqual(len(pipeline_manager.pipelines), 2) self.assertEqual(str(pipeline_manager.pipelines[0]), 'test_source:test_sink') self.assertEqual(str(pipeline_manager.pipelines[1]), 'second_source:test_sink') test_publisher = pipeline_manager.pipelines[0].publishers[0] another_publisher = pipeline_manager.pipelines[1].publishers[0] for publisher in [test_publisher, another_publisher]: self.assertEqual(len(publisher.samples), 2) self.assertEqual(publisher.calls, 2) self.assertEqual(getattr(publisher.samples[0], "name"), 'a_update') self.assertEqual(getattr(publisher.samples[1], "name"), 'b_update') transformed_samples = self.TransformerClass.samples self.assertEqual(len(transformed_samples), 2) self.assertEqual([getattr(s, 'name') for s in transformed_samples], ['a', 'b']) def _do_test_rate_of_change_in_boilerplate_pipeline_cfg(self, index, meters, units): with open('etc/ceilometer/pipeline.yaml') as fap: data = fap.read() pipeline_cfg = yaml.safe_load(data) for s in pipeline_cfg['sinks']: s['publishers'] = ['test://'] pipeline_manager = pipeline.PipelineManager(pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[index] self._do_test_rate_of_change_mapping(pipe, meters, units) def test_rate_of_change_boilerplate_disk_read_cfg(self): meters = ('disk.read.bytes', 'disk.read.requests') units = ('B', 'request') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(2, meters, units) def test_rate_of_change_boilerplate_disk_write_cfg(self): meters = ('disk.write.bytes', 'disk.write.requests') units = ('B', 'request') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(2, meters, units) def test_rate_of_change_boilerplate_network_incoming_cfg(self): meters = ('network.incoming.bytes', 'network.incoming.packets') units = ('B', 'packet') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(3, meters, units) def test_rate_of_change_boilerplate_network_outgoing_cfg(self): meters = ('network.outgoing.bytes', 'network.outgoing.packets') units = ('B', 'packet') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(3, meters, units) ceilometer-2014.1/ceilometer/tests/test_novaclient.py0000664000175300017540000001723012323717130024135 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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 mock import patch import novaclient from ceilometer import nova_client from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import test class TestNovaClient(test.BaseTestCase): def setUp(self): super(TestNovaClient, self).setUp() self.nv = nova_client.Client() self.useFixture(mockpatch.PatchObject( self.nv.nova_client.flavors, 'get', side_effect=self.fake_flavors_get)) self.useFixture(mockpatch.PatchObject( self.nv.nova_client.images, 'get', side_effect=self.fake_images_get)) @staticmethod def fake_flavors_get(*args, **kwargs): a = mock.MagicMock() a.id = args[0] if a.id == 1: a.name = 'm1.tiny' elif a.id == 2: a.name = 'm1.large' else: raise novaclient.exceptions.NotFound('foobar') return a @staticmethod def fake_images_get(*args, **kwargs): a = mock.MagicMock() a.id = args[0] image_details = { 1: ('ubuntu-12.04-x86', dict(kernel_id=11, ramdisk_id=21)), 2: ('centos-5.4-x64', dict(kernel_id=12, ramdisk_id=22)), 3: ('rhel-6-x64', None), 4: ('rhel-6-x64', dict()), 5: ('rhel-6-x64', dict(kernel_id=11)), 6: ('rhel-6-x64', dict(ramdisk_id=21)) } if a.id in image_details: a.name = image_details[a.id][0] a.metadata = image_details[a.id][1] else: raise novaclient.exceptions.NotFound('foobar') return a @staticmethod def fake_flavors_list(): a = mock.MagicMock() a.id = 1 a.name = 'm1.tiny' b = mock.MagicMock() b.id = 2 b.name = 'm1.large' return [a, b] @staticmethod def fake_servers_list(*args, **kwargs): a = mock.MagicMock() a.id = 42 a.flavor = {'id': 1} a.image = {'id': 1} return [a] def test_instance_get_all_by_host(self): with patch.object(self.nv.nova_client.servers, 'list', side_effect=self.fake_servers_list): instances = self.nv.instance_get_all_by_host('foobar') self.assertEqual(1, len(instances)) self.assertEqual('m1.tiny', instances[0].flavor['name']) self.assertEqual('ubuntu-12.04-x86', instances[0].image['name']) self.assertEqual(11, instances[0].kernel_id) self.assertEqual(21, instances[0].ramdisk_id) @staticmethod def fake_servers_list_unknown_flavor(*args, **kwargs): a = mock.MagicMock() a.id = 42 a.flavor = {'id': 666} a.image = {'id': 1} return [a] def test_instance_get_all_by_host_unknown_flavor(self): with patch.object(self.nv.nova_client.servers, 'list', side_effect=self.fake_servers_list_unknown_flavor): instances = self.nv.instance_get_all_by_host('foobar') self.assertEqual(1, len(instances)) self.assertEqual('unknown-id-666', instances[0].flavor['name']) @staticmethod def fake_servers_list_unknown_image(*args, **kwargs): a = mock.MagicMock() a.id = 42 a.flavor = {'id': 1} a.image = {'id': 666} return [a] @staticmethod def fake_servers_list_image_missing_metadata(*args, **kwargs): a = mock.MagicMock() a.id = 42 a.flavor = {'id': 1} a.image = {'id': args[0]} return [a] @staticmethod def fake_instance_image_missing(*args, **kwargs): a = mock.MagicMock() a.id = 42 a.flavor = {'id': 666} a.image = None return [a] def test_instance_get_all_by_host_unknown_image(self): with patch.object(self.nv.nova_client.servers, 'list', side_effect=self.fake_servers_list_unknown_image): instances = self.nv.instance_get_all_by_host('foobar') self.assertEqual(1, len(instances)) self.assertEqual('unknown-id-666', instances[0].image['name']) def test_with_flavor_and_image(self): results = self.nv._with_flavor_and_image(self.fake_servers_list()) instance = results[0] self.assertEqual('ubuntu-12.04-x86', instance.image['name']) self.assertEqual('m1.tiny', instance.flavor['name']) self.assertEqual(11, instance.kernel_id) self.assertEqual(21, instance.ramdisk_id) def test_with_flavor_and_image_unknown_image(self): instances = self.fake_servers_list_unknown_image() results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertEqual('unknown-id-666', instance.image['name']) self.assertNotEqual(instance.flavor['name'], 'unknown-id-666') self.assertIsNone(instance.kernel_id) self.assertIsNone(instance.ramdisk_id) def test_with_flavor_and_image_unknown_flavor(self): instances = self.fake_servers_list_unknown_flavor() results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertEqual('unknown-id-666', instance.flavor['name']) self.assertEqual(0, instance.flavor['vcpus']) self.assertEqual(0, instance.flavor['ram']) self.assertEqual(0, instance.flavor['disk']) self.assertNotEqual(instance.image['name'], 'unknown-id-666') self.assertEqual(11, instance.kernel_id) self.assertEqual(21, instance.ramdisk_id) def test_with_flavor_and_image_none_metadata(self): instances = self.fake_servers_list_image_missing_metadata(3) results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertIsNone(instance.kernel_id) self.assertIsNone(instance.ramdisk_id) def test_with_flavor_and_image_missing_metadata(self): instances = self.fake_servers_list_image_missing_metadata(4) results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertIsNone(instance.kernel_id) self.assertIsNone(instance.ramdisk_id) def test_with_flavor_and_image_missing_ramdisk(self): instances = self.fake_servers_list_image_missing_metadata(5) results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertEqual(11, instance.kernel_id) self.assertIsNone(instance.ramdisk_id) def test_with_flavor_and_image_missing_kernel(self): instances = self.fake_servers_list_image_missing_metadata(6) results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertIsNone(instance.kernel_id) self.assertEqual(21, instance.ramdisk_id) def test_with_missing_image_instance(self): instances = self.fake_instance_image_missing() results = self.nv._with_flavor_and_image(instances) instance = results[0] self.assertIsNone(instance.kernel_id) self.assertIsNone(instance.image) self.assertIsNone(instance.ramdisk_id) ceilometer-2014.1/ceilometer/tests/collector/0000775000175300017540000000000012323717426022355 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/collector/__init__.py0000664000175300017540000000000012323717130024444 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/0000775000175300017540000000000012323717426022043 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/test_manager.py0000664000175300017540000000707412323717130025066 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Tests for ceilometer/agent/manager.py """ import mock from ceilometer import agent from ceilometer.compute import manager from ceilometer import nova_client from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import test from ceilometer.tests import agentbase class TestManager(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_load_plugins(self): mgr = manager.AgentManager() self.assertIsNotNone(list(mgr.pollster_manager)) class TestRunTasks(agentbase.BaseAgentManagerTestCase): def _fake_instance(self, name, state): instance = mock.MagicMock() instance.name = name setattr(instance, 'OS-EXT-STS:vm_state', state) return instance def _raise_exception(self): raise Exception @staticmethod def create_manager(): return manager.AgentManager() @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): self.source_resources = False super(TestRunTasks, self).setUp() # Set up a fake instance value to be returned by # instance_get_all_by_host() so when the manager gets the list # of instances to poll we can control the results. self.instances = [self._fake_instance('doing', 'active'), self._fake_instance('resting', 'paused')] stillborn_instance = self._fake_instance('stillborn', 'error') self.useFixture(mockpatch.PatchObject( nova_client.Client, 'instance_get_all_by_host', side_effect=lambda *x: self.instances + [stillborn_instance])) def test_setup_polling_tasks(self): super(TestRunTasks, self).test_setup_polling_tasks() self.assertEqual(self.Pollster.samples[0][1], self.instances) def test_interval_exception_isolation(self): super(TestRunTasks, self).test_interval_exception_isolation() self.assertEqual(1, len(self.PollsterException.samples)) self.assertEqual(1, len(self.PollsterExceptionAnother.samples)) def test_manager_exception_persistency(self): super(TestRunTasks, self).test_manager_exception_persistency() with mock.patch.object(nova_client.Client, 'instance_get_all_by_host', side_effect=lambda *x: self._raise_exception()): mgr = manager.AgentManager() polling_task = agent.PollingTask(mgr) polling_task.poll_and_publish() def self_local_instances_default_agent_discovery(self): self.setup_pipeline() self.assertEqual(self.mgr.default_discovery, ['local_instances']) polling_tasks = self.mgr.setup_polling_tasks() self.mgr.interval_task(polling_tasks.get(60)) self._verify_discovery_params([None]) self.assertEqual(set(self.Pollster.resources), set(self.instances)) ceilometer-2014.1/ceilometer/tests/compute/notifications/0000775000175300017540000000000012323717426024714 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/notifications/test_cpu.py0000664000175300017540000001525612323717130027115 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel # # Author: Shuangtai Tian # # 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. """Tests for converters for producing compute counter messages from notification events. """ import copy from ceilometer.compute.notifications import cpu from ceilometer.openstack.common import test METRICS_UPDATE = { u'_context_request_id': u'req-a8bfa89b-d28b-4b95-9e4b-7d7875275650', u'_context_quota_class': None, u'event_type': u'compute.metrics.update', u'_context_service_catalog': [], u'_context_auth_token': None, u'_context_user_id': None, u'payload': { u'metrics': [ {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.frequency', 'value': 1600, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.user.time', 'value': 17421440000000L, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.kernel.time', 'value': 7852600000000L, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.idle.time', 'value': 1307374400000000L, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.iowait.time', 'value': 11697470000000L, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.user.percent', 'value': 0.012959045637294348, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.kernel.percent', 'value': 0.005841204961898534, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.idle.percent', 'value': 0.9724985141658965, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.iowait.percent', 'value': 0.008701235234910634, 'source': 'libvirt.LibvirtDriver'}, {'timestamp': u'2013-07-29T06:51:34.472416', 'name': 'cpu.percent', 'value': 0.027501485834103515, 'source': 'libvirt.LibvirtDriver'}], u'nodename': u'tianst.sh.intel.com', u'host': u'tianst', u'host_id': u'10.0.1.1'}, u'priority': u'INFO', u'_context_is_admin': True, u'_context_user': None, u'publisher_id': u'compute.tianst.sh.intel.com', u'message_id': u'6eccedba-120e-4db8-9735-2ad5f061e5ee', u'_context_remote_address': None, u'_context_roles': [], u'timestamp': u'2013-07-29 06:51:34.474815', u'_context_timestamp': u'2013-07-29T06:51:34.348091', u'_unique_id': u'0ee26117077648e18d88ac76e28a72e2', u'_context_project_name': None, u'_context_read_deleted': u'no', u'_context_tenant': None, u'_context_instance_lock_checked': False, u'_context_project_id': None, u'_context_user_name': None } RES_ID = '%s_%s' % (METRICS_UPDATE['payload']['host'], METRICS_UPDATE['payload']['nodename']) class TestMetricsNotifications(test.BaseTestCase): def _process_notification(self, ic): self.assertIn(METRICS_UPDATE['event_type'], ic.event_types) samples = list(ic.process_notification(METRICS_UPDATE)) self.assertEqual(RES_ID, samples[0].resource_id) return samples[0] def test_compute_metrics(self): ERROR_METRICS = copy.copy(METRICS_UPDATE) ERROR_METRICS['payload'] = {"metric_err": []} ic = cpu.CpuFrequency() info = ic._get_sample(METRICS_UPDATE, 'cpu.frequency') info_none = ic._get_sample(METRICS_UPDATE, 'abc.efg') info_error = ic._get_sample(ERROR_METRICS, 'cpu.frequency') self.assertEqual('cpu.frequency', info['payload']['name']) self.assertIsNone(info_none) self.assertIsNone(info_error) def test_compute_cpu_frequency(self): c = self._process_notification(cpu.CpuFrequency()) self.assertEqual('compute.node.cpu.frequency', c.name) self.assertEqual(1600, c.volume) def test_compute_cpu_user_time(self): c = self._process_notification(cpu.CpuUserTime()) self.assertEqual('compute.node.cpu.user.time', c.name) self.assertEqual(17421440000000L, c.volume) def test_compute_cpu_kernel_time(self): c = self._process_notification(cpu.CpuKernelTime()) self.assertEqual('compute.node.cpu.kernel.time', c.name) self.assertEqual(7852600000000L, c.volume) def test_compute_cpu_idle_time(self): c = self._process_notification(cpu.CpuIdleTime()) self.assertEqual('compute.node.cpu.idle.time', c.name) self.assertEqual(1307374400000000L, c.volume) def test_compute_cpu_iowait_time(self): c = self._process_notification(cpu.CpuIowaitTime()) self.assertEqual('compute.node.cpu.iowait.time', c.name) self.assertEqual(11697470000000L, c.volume) def test_compute_cpu_kernel_percent(self): c = self._process_notification(cpu.CpuKernelPercent()) self.assertEqual('compute.node.cpu.kernel.percent', c.name) self.assertEqual(0.5841204961898534, c.volume) def test_compute_cpu_idle_percent(self): c = self._process_notification(cpu.CpuIdlePercent()) self.assertEqual('compute.node.cpu.idle.percent', c.name) self.assertEqual(97.24985141658965, c.volume) def test_compute_cpu_user_percent(self): c = self._process_notification(cpu.CpuUserPercent()) self.assertEqual('compute.node.cpu.user.percent', c.name) self.assertEqual(1.2959045637294348, c.volume) def test_compute_cpu_iowait_percent(self): c = self._process_notification(cpu.CpuIowaitPercent()) self.assertEqual('compute.node.cpu.iowait.percent', c.name) self.assertEqual(0.8701235234910634, c.volume) def test_compute_cpu_percent(self): c = self._process_notification(cpu.CpuPercent()) self.assertEqual('compute.node.cpu.percent', c.name) self.assertEqual(2.7501485834103515, c.volume) ceilometer-2014.1/ceilometer/tests/compute/notifications/test_instance.py0000664000175300017540000010046712323717132030133 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # Copyright © 2013 eNovance # # Author: Doug Hellmann # Julien Danjou # # 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. """Tests for converters for producing compute counter messages from notification events. """ from ceilometer.compute.notifications import instance from ceilometer.openstack.common import test from ceilometer import sample INSTANCE_CREATE_END = { u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2', u'_context_is_admin': True, u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e', u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': u'10.0.2.15', u'_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T20:23:41.425105', u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'event_type': u'compute.instance.create.end', u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451', u'payload': {u'created_at': u'2012-05-08 20:23:41', u'deleted_at': u'', u'disk_gb': 0, u'display_name': u'testme', u'fixed_ips': [{u'address': u'10.0.0.2', u'floating_ips': [], u'meta': {}, u'type': u'fixed', u'version': 4}], u'image_ref_url': u'http://10.0.2.15:9292/images/UUID', u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1', u'instance_type': u'm1.tiny', u'instance_type_id': 2, u'launched_at': u'2012-05-08 20:23:47.985999', u'memory_mb': 512, u'state': u'active', u'state_description': u'', u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e', u'user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3', u'vcpus': 1, u'root_gb': 0, u'ephemeral_gb': 0, u'host': u'compute-host-name', u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4', u'os_type': u'linux?', u'architecture': u'x86', u'image_ref': u'UUID', u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5', u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6', }, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:23:48.028195', } INSTANCE_DELETE_START = { u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2', u'_context_is_admin': True, u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e', u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': u'10.0.2.15', u'_context_request_id': u'req-fb3c4546-a2e5-49b7-9fd2-a63bd658bc39', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T20:24:14.547374', u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'event_type': u'compute.instance.delete.start', u'message_id': u'a15b94ee-cb8e-4c71-9abe-14aa80055fb4', u'payload': {u'created_at': u'2012-05-08 20:23:41', u'deleted_at': u'', u'disk_gb': 0, u'display_name': u'testme', u'image_ref_url': u'http://10.0.2.15:9292/images/UUID', u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1', u'instance_type': u'm1.tiny', u'instance_type_id': 2, u'launched_at': u'2012-05-08 20:23:47', u'memory_mb': 512, u'state': u'active', u'state_description': u'deleting', u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e', u'user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3', u'vcpus': 1, u'root_gb': 0, u'ephemeral_gb': 0, u'host': u'compute-host-name', u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4', u'os_type': u'linux?', u'architecture': u'x86', u'image_ref': u'UUID', u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5', u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6', }, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:24:14.824743', } INSTANCE_EXISTS = { u'_context_auth_token': None, u'_context_is_admin': True, u'_context_project_id': None, u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': None, u'_context_request_id': u'req-659a8eb2-4372-4c01-9028-ad6e40b0ed22', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T16:03:43.760204', u'_context_user_id': None, u'event_type': u'compute.instance.exists', u'message_id': u'4b884c03-756d-4c06-8b42-80b6def9d302', u'payload': {u'audit_period_beginning': u'2012-05-08 15:00:00', u'audit_period_ending': u'2012-05-08 16:00:00', u'bandwidth': {}, u'created_at': u'2012-05-07 22:16:18', u'deleted_at': u'', u'disk_gb': 0, u'display_name': u'testme', u'image_ref_url': u'http://10.0.2.15:9292/images/UUID', u'instance_id': u'3a513875-95c9-4012-a3e7-f90c678854e5', u'instance_type': u'm1.tiny', u'instance_type_id': 2, u'launched_at': u'2012-05-07 23:01:27', u'memory_mb': 512, u'state': u'active', u'state_description': u'', u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e', u'user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3', u'vcpus': 1, u'root_gb': 0, u'ephemeral_gb': 0, u'host': u'compute-host-name', u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4', u'os_type': u'linux?', u'architecture': u'x86', u'image_ref': u'UUID', u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5', u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6', }, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 16:03:44.122481', } INSTANCE_FINISH_RESIZE_END = { u'_context_roles': [u'admin'], u'_context_request_id': u'req-e3f71bb9-e9b9-418b-a9db-a5950c851b25', u'_context_quota_class': None, u'event_type': u'compute.instance.finish_resize.end', u'_context_user_name': u'admin', u'_context_project_name': u'admin', u'timestamp': u'2013-01-04 15:10:17.436974', u'_context_is_admin': True, u'message_id': u'a2f7770d-b85d-4797-ab10-41407a44368e', u'_context_auth_token': None, u'_context_instance_lock_checked': False, u'_context_project_id': u'cea4b25edb484e5392727181b7721d29', u'_context_timestamp': u'2013-01-04T15:08:39.162612', u'_context_read_deleted': u'no', u'_context_user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed', u'_context_remote_address': u'10.147.132.184', u'publisher_id': u'compute.ip-10-147-132-184.ec2.internal', u'payload': {u'state_description': u'', u'availability_zone': None, u'ephemeral_gb': 0, u'instance_type_id': 5, u'deleted_at': u'', u'fixed_ips': [{u'floating_ips': [], u'label': u'private', u'version': 4, u'meta': {}, u'address': u'10.0.0.3', u'type': u'fixed'}], u'memory_mb': 2048, u'user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed', u'reservation_id': u'r-u3fvim06', u'hostname': u's1', u'state': u'resized', u'launched_at': u'2013-01-04T15:10:14.923939', u'metadata': {u'metering.server_group': u'Group_A', u'AutoScalingGroupName': u'tyky-Group_Awste7', u'metering.foo.bar': u'true'}, u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a', u'access_ip_v6': None, u'disk_gb': 20, u'access_ip_v4': None, u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a', u'host': u'ip-10-147-132-184.ec2.internal', u'display_name': u's1', u'image_ref_url': u'http://10.147.132.184:9292/images/' 'a130b9d9-e00e-436e-9782-836ccef06e8a', u'root_gb': 20, u'tenant_id': u'cea4b25edb484e5392727181b7721d29', u'created_at': u'2013-01-04T11:21:48.000000', u'instance_id': u'648e8963-6886-4c3c-98f9-4511c292f86b', u'instance_type': u'm1.small', u'vcpus': 1, u'image_meta': {u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a', u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a', u'base_image_ref': u'a130b9d9-e00e-436e-9782-836ccef06e8a'}, u'architecture': None, u'os_type': None }, u'priority': u'INFO' } INSTANCE_RESIZE_REVERT_END = { u'_context_roles': [u'admin'], u'_context_request_id': u'req-9da1d714-dabe-42fd-8baa-583e57cd4f1a', u'_context_quota_class': None, u'event_type': u'compute.instance.resize.revert.end', u'_context_user_name': u'admin', u'_context_project_name': u'admin', u'timestamp': u'2013-01-04 15:20:32.009532', u'_context_is_admin': True, u'message_id': u'c48deeba-d0c3-4154-b3db-47480b52267a', u'_context_auth_token': None, u'_context_instance_lock_checked': False, u'_context_project_id': u'cea4b25edb484e5392727181b7721d29', u'_context_timestamp': u'2013-01-04T15:19:51.018218', u'_context_read_deleted': u'no', u'_context_user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed', u'_context_remote_address': u'10.147.132.184', u'publisher_id': u'compute.ip-10-147-132-184.ec2.internal', u'payload': {u'state_description': u'resize_reverting', u'availability_zone': None, u'ephemeral_gb': 0, u'instance_type_id': 2, u'deleted_at': u'', u'reservation_id': u'r-u3fvim06', u'memory_mb': 512, u'user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed', u'hostname': u's1', u'state': u'resized', u'launched_at': u'2013-01-04T15:10:14.000000', u'metadata': {u'metering.server_group': u'Group_A', u'AutoScalingGroupName': u'tyky-Group_A-wste7', u'metering.foo.bar': u'true'}, u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a', u'access_ip_v6': None, u'disk_gb': 0, u'access_ip_v4': None, u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a', u'host': u'ip-10-147-132-184.ec2.internal', u'display_name': u's1', u'image_ref_url': u'http://10.147.132.184:9292/images/' 'a130b9d9-e00e-436e-9782-836ccef06e8a', u'root_gb': 0, u'tenant_id': u'cea4b25edb484e5392727181b7721d29', u'created_at': u'2013-01-04T11:21:48.000000', u'instance_id': u'648e8963-6886-4c3c-98f9-4511c292f86b', u'instance_type': u'm1.tiny', u'vcpus': 1, u'image_meta': {u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a', u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a', u'base_image_ref': u'a130b9d9-e00e-436e-9782-836ccef06e8a'}, u'architecture': None, u'os_type': None }, u'priority': u'INFO' } INSTANCE_DELETE_SAMPLES = { u'_context_roles': [u'admin'], u'_context_request_id': u'req-9da1d714-dabe-42fd-8baa-583e57cd4f1a', u'_context_quota_class': None, u'event_type': u'compute.instance.delete.samples', u'_context_user_name': u'admin', u'_context_project_name': u'admin', u'timestamp': u'2013-01-04 15:20:32.009532', u'_context_is_admin': True, u'message_id': u'c48deeba-d0c3-4154-b3db-47480b52267a', u'_context_auth_token': None, u'_context_instance_lock_checked': False, u'_context_project_id': u'cea4b25edb484e5392727181b7721d29', u'_context_timestamp': u'2013-01-04T15:19:51.018218', u'_context_read_deleted': u'no', u'_context_user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed', u'_context_remote_address': u'10.147.132.184', u'publisher_id': u'compute.ip-10-147-132-184.ec2.internal', u'payload': {u'state_description': u'resize_reverting', u'availability_zone': None, u'ephemeral_gb': 0, u'instance_type_id': 2, u'deleted_at': u'', u'reservation_id': u'r-u3fvim06', u'memory_mb': 512, u'user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed', u'hostname': u's1', u'state': u'resized', u'launched_at': u'2013-01-04T15:10:14.000000', u'metadata': {u'metering.server_group': u'Group_A', u'AutoScalingGroupName': u'tyky-Group_A-wste7', u'metering.foo.bar': u'true'}, u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a', u'access_ip_v6': None, u'disk_gb': 0, u'access_ip_v4': None, u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a', u'host': u'ip-10-147-132-184.ec2.internal', u'display_name': u's1', u'image_ref_url': u'http://10.147.132.184:9292/images/' 'a130b9d9-e00e-436e-9782-836ccef06e8a', u'root_gb': 0, u'tenant_id': u'cea4b25edb484e5392727181b7721d29', u'created_at': u'2013-01-04T11:21:48.000000', u'instance_id': u'648e8963-6886-4c3c-98f9-4511c292f86b', u'instance_type': u'm1.tiny', u'vcpus': 1, u'image_meta': {u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a', u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a', u'base_image_ref': u'a130b9d9-e00e-436e-9782-836ccef06e8a'}, u'architecture': None, u'os_type': None, u'samples': [{u'name': u'sample-name1', u'type': u'sample-type1', u'unit': u'sample-units1', u'volume': 1}, {u'name': u'sample-name2', u'type': u'sample-type2', u'unit': u'sample-units2', u'volume': 2}, ], }, u'priority': u'INFO' } INSTANCE_SCHEDULED = { u'_context_request_id': u'req-f28a836a-32bf-4cc3-940a-3515878c181f', u'_context_quota_class': None, u'event_type': u'scheduler.run_instance.scheduled', u'_context_service_catalog': [{ u'endpoints': [{ u'adminURL': u'http://172.16.12.21:8776/v1/2bd766a095b44486bf07cf7f666997eb', u'region': u'RegionOne', u'internalURL': u'http://172.16.12.21:8776/v1/2bd766a095b44486bf07cf7f666997eb', u'id': u'30cb904fdc294eea9b225e06b2d0d4eb', u'publicURL': u'http://172.16.12.21:8776/v1/2bd766a095b44486bf07cf7f666997eb'}], u'endpoints_links': [], u'type': u'volume', u'name': u'cinder'}], u'_context_auth_token': u'TOK', u'_context_user_id': u'0a757cd896b64b65ba3784afef564116', u'payload': { 'instance_id': 'fake-uuid1-1', u'weighted_host': {u'host': u'eglynn-f19-devstack3', u'weight': 1.0}, u'request_spec': { u'num_instances': 1, u'block_device_mapping': [{ u'instance_uuid': u'9206baae-c3b6-41bc-96f2-2c0726ff51c8', u'guest_format': None, u'boot_index': 0, u'no_device': None, u'connection_info': None, u'volume_id': None, u'volume_size': None, u'device_name': None, u'disk_bus': None, u'image_id': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b', u'source_type': u'image', u'device_type': u'disk', u'snapshot_id': None, u'destination_type': u'local', u'delete_on_termination': True}], u'image': { u'status': u'active', u'name': u'cirros-0.3.1-x86_64-uec', u'deleted': False, u'container_format': u'ami', u'created_at': u'2014-02-18T13:16:26.000000', u'disk_format': u'ami', u'updated_at': u'2014-02-18T13:16:27.000000', u'properties': { u'kernel_id': u'c8794c1a-4158-42cc-9f97-d0d250c9c6a4', u'ramdisk_id': u'4999726c-545c-4a9e-bfc0-917459784275'}, u'min_disk': 0, u'min_ram': 0, u'checksum': u'f8a2eeee2dc65b3d9b6e63678955bd83', u'owner': u'2bd766a095b44486bf07cf7f666997eb', u'is_public': True, u'deleted_at': None, u'id': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b', u'size': 25165824}, u'instance_type': { u'root_gb': 1, u'name': u'm1.tiny', u'ephemeral_gb': 0, u'memory_mb': 512, u'vcpus': 1, u'extra_specs': {}, u'swap': 0, u'rxtx_factor': 1.0, u'flavorid': u'1', u'vcpu_weight': None, u'id': 2}, u'instance_properties': { u'vm_state': u'building', u'availability_zone': None, u'terminated_at': None, u'ephemeral_gb': 0, u'instance_type_id': 2, u'user_data': None, u'cleaned': False, u'vm_mode': None, u'deleted_at': None, u'reservation_id': u'r-ven5q6om', u'id': 15, u'security_groups': [{ u'deleted_at': None, u'user_id': u'0a757cd896b64b65ba3784afef564116', u'description': u'default', u'deleted': False, u'created_at': u'2014-02-19T11:02:31.000000', u'updated_at': None, u'project_id': u'2bd766a095b44486bf07cf7f666997eb', u'id': 1, u'name': u'default'}], u'disable_terminate': False, u'root_device_name': None, u'display_name': u'new', u'uuid': u'9206baae-c3b6-41bc-96f2-2c0726ff51c8', u'default_swap_device': None, u'info_cache': { u'instance_uuid': u'9206baae-c3b6-41bc-96f2-2c0726ff51c8', u'deleted': False, u'created_at': u'2014-03-05T12:44:00.000000', u'updated_at': None, u'network_info': [], u'deleted_at': None}, u'hostname': u'new', u'launched_on': None, u'display_description': u'new', u'key_data': None, u'deleted': False, u'config_drive': u'', u'power_state': 0, u'default_ephemeral_device': None, u'progress': 0, u'project_id': u'2bd766a095b44486bf07cf7f666997eb', u'launched_at': None, u'scheduled_at': None, u'node': None, u'ramdisk_id': u'4999726c-545c-4a9e-bfc0-917459784275', u'access_ip_v6': None, u'access_ip_v4': None, u'kernel_id': u'c8794c1a-4158-42cc-9f97-d0d250c9c6a4', u'key_name': None, u'updated_at': None, u'host': None, u'root_gb': 1, u'user_id': u'0a757cd896b64b65ba3784afef564116', u'system_metadata': { u'image_kernel_id': u'c8794c1a-4158-42cc-9f97-d0d250c9c6a4', u'image_min_disk': u'1', u'instance_type_memory_mb': u'512', u'instance_type_swap': u'0', u'instance_type_vcpu_weight': None, u'instance_type_root_gb': u'1', u'instance_type_name': u'm1.tiny', u'image_ramdisk_id': u'4999726c-545c-4a9e-bfc0-917459784275', u'instance_type_id': u'2', u'instance_type_ephemeral_gb': u'0', u'instance_type_rxtx_factor': u'1.0', u'instance_type_flavorid': u'1', u'instance_type_vcpus': u'1', u'image_container_format': u'ami', u'image_min_ram': u'0', u'image_disk_format': u'ami', u'image_base_image_ref': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b'}, u'task_state': u'scheduling', u'shutdown_terminate': False, u'cell_name': None, u'ephemeral_key_uuid': None, u'locked': False, u'name': u'instance-0000000f', u'created_at': u'2014-03-05T12:44:00.000000', u'locked_by': None, u'launch_index': 0, u'memory_mb': 512, u'vcpus': 1, u'image_ref': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b', u'architecture': None, u'auto_disk_config': False, u'os_type': None, u'metadata': {u'metering.server_group': u'Group_A', u'AutoScalingGroupName': u'tyky-Group_Awste7', u'metering.foo.bar': u'true'}}, u'security_group': [u'default'], u'instance_uuids': [u'9206baae-c3b6-41bc-96f2-2c0726ff51c8']}}, u'priority': u'INFO', u'_context_is_admin': True, u'_context_timestamp': u'2014-03-05T12:44:00.135674', u'publisher_id': u'scheduler.eglynn-f19-devstack3', u'message_id': u'd6c1ae63-a26b-47c7-8397-8794216e09dd', u'_context_remote_address': u'172.16.12.21', u'_context_roles': [u'_member_', u'admin'], u'timestamp': u'2014-03-05 12:44:00.733758', u'_context_user': u'0a757cd896b64b65ba3784afef564116', u'_unique_id': u'2af47cbdde604ff794bb046f3f9db1e2', u'_context_project_name': u'admin', u'_context_read_deleted': u'no', u'_context_tenant': u'2bd766a095b44486bf07cf7f666997eb', u'_context_instance_lock_checked': False, u'_context_project_id': u'2bd766a095b44486bf07cf7f666997eb', u'_context_user_name': u'admin' } class TestNotifications(test.BaseTestCase): def test_process_notification(self): info = list(instance.Instance().process_notification( INSTANCE_CREATE_END ))[0] for name, actual, expected in [ ('counter_name', info.name, 'instance'), ('counter_type', info.type, sample.TYPE_GAUGE), ('counter_volume', info.volume, 1), ('timestamp', info.timestamp, INSTANCE_CREATE_END['timestamp']), ('resource_id', info.resource_id, INSTANCE_CREATE_END['payload']['instance_id']), ('instance_type_id', info.resource_metadata['instance_type_id'], INSTANCE_CREATE_END['payload']['instance_type_id']), ('host', info.resource_metadata['host'], INSTANCE_CREATE_END['publisher_id']), ]: self.assertEqual(expected, actual, name) @staticmethod def _find_counter(counters, name): return filter(lambda counter: counter.name == name, counters)[0] def _verify_user_metadata(self, metadata): self.assertIn('user_metadata', metadata) user_meta = metadata['user_metadata'] self.assertEqual(user_meta.get('server_group'), 'Group_A') self.assertNotIn('AutoScalingGroupName', user_meta) self.assertIn('foo_bar', user_meta) self.assertNotIn('foo.bar', user_meta) def test_instance_create_instance(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_CREATE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(1, c.volume) def test_instance_create_flavor(self): ic = instance.InstanceFlavor() counters = list(ic.process_notification(INSTANCE_CREATE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(1, c.volume) def test_instance_create_memory(self): ic = instance.Memory() counters = list(ic.process_notification(INSTANCE_CREATE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_CREATE_END['payload']['memory_mb'], c.volume) def test_instance_create_vcpus(self): ic = instance.VCpus() counters = list(ic.process_notification(INSTANCE_CREATE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_CREATE_END['payload']['vcpus'], c.volume) def test_instance_create_root_disk_size(self): ic = instance.RootDiskSize() counters = list(ic.process_notification(INSTANCE_CREATE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_CREATE_END['payload']['root_gb'], c.volume) def test_instance_create_ephemeral_disk_size(self): ic = instance.EphemeralDiskSize() counters = list(ic.process_notification(INSTANCE_CREATE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_CREATE_END['payload']['ephemeral_gb'], c.volume) def test_instance_exists_instance(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_EXISTS)) self.assertEqual(1, len(counters)) def test_instance_exists_flavor(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_EXISTS)) self.assertEqual(1, len(counters)) def test_instance_delete_instance(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_DELETE_START)) self.assertEqual(1, len(counters)) def test_instance_delete_flavor(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_DELETE_START)) self.assertEqual(1, len(counters)) def test_instance_finish_resize_instance(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(1, c.volume) self._verify_user_metadata(c.resource_metadata) def test_instance_finish_resize_flavor(self): ic = instance.InstanceFlavor() counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(1, c.volume) self.assertEqual('instance:m1.small', c.name) self._verify_user_metadata(c.resource_metadata) def test_instance_finish_resize_memory(self): ic = instance.Memory() counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_FINISH_RESIZE_END['payload']['memory_mb'], c.volume) self._verify_user_metadata(c.resource_metadata) def test_instance_finish_resize_vcpus(self): ic = instance.VCpus() counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_FINISH_RESIZE_END['payload']['vcpus'], c.volume) self._verify_user_metadata(c.resource_metadata) def test_instance_resize_finish_instance(self): ic = instance.Instance() counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(1, c.volume) self._verify_user_metadata(c.resource_metadata) def test_instance_resize_finish_flavor(self): ic = instance.InstanceFlavor() counters = list(ic.process_notification(INSTANCE_RESIZE_REVERT_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(1, c.volume) self.assertEqual('instance:m1.tiny', c.name) self._verify_user_metadata(c.resource_metadata) def test_instance_resize_finish_memory(self): ic = instance.Memory() counters = list(ic.process_notification(INSTANCE_RESIZE_REVERT_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_RESIZE_REVERT_END['payload']['memory_mb'], c.volume) self._verify_user_metadata(c.resource_metadata) def test_instance_resize_finish_vcpus(self): ic = instance.VCpus() counters = list(ic.process_notification(INSTANCE_RESIZE_REVERT_END)) self.assertEqual(1, len(counters)) c = counters[0] self.assertEqual(INSTANCE_RESIZE_REVERT_END['payload']['vcpus'], c.volume) self._verify_user_metadata(c.resource_metadata) def test_instance_delete_samples(self): ic = instance.InstanceDelete() counters = list(ic.process_notification(INSTANCE_DELETE_SAMPLES)) self.assertEqual(2, len(counters)) names = [c.name for c in counters] self.assertEqual(['sample-name1', 'sample-name2'], names) c = counters[0] self._verify_user_metadata(c.resource_metadata) def test_instance_scheduled(self): ic = instance.InstanceScheduled() self.assertIn(INSTANCE_SCHEDULED['event_type'], ic.event_types) counters = list(ic.process_notification(INSTANCE_SCHEDULED)) self.assertEqual(1, len(counters)) names = [c.name for c in counters] self.assertEqual(['instance.scheduled'], names) rid = [c.resource_id for c in counters] self.assertEqual(['fake-uuid1-1'], rid) ceilometer-2014.1/ceilometer/tests/compute/notifications/__init__.py0000664000175300017540000000000012323717130027003 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/__init__.py0000664000175300017540000000000012323717130024132 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/0000775000175300017540000000000012323717426023027 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/__init__.py0000664000175300017540000000000012323717130025116 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/libvirt/0000775000175300017540000000000012323717426024502 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/libvirt/__init__.py0000664000175300017540000000000012323717130026571 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/libvirt/test_inspector.py0000664000175300017540000003115512323717130030116 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012 Red Hat, Inc # # Author: Eoghan Glynn # # 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. """Tests for libvirt inspector. """ import contextlib import fixtures import mock from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.compute.virt.libvirt import inspector as libvirt_inspector from ceilometer.openstack.common import test class TestLibvirtInspection(test.BaseTestCase): def setUp(self): super(TestLibvirtInspection, self).setUp() self.instance_name = 'instance-00000001' self.inspector = libvirt_inspector.LibvirtInspector() self.inspector.connection = mock.Mock() libvirt_inspector.libvirt = mock.Mock() libvirt_inspector.libvirt.VIR_DOMAIN_SHUTOFF = 5 self.domain = mock.Mock() self.addCleanup(mock.patch.stopall) def test_inspect_instances(self): class FakeDomain(object): def name(self): return 'fake_name' def UUIDString(self): return 'uuid' fake_domain = FakeDomain() connection = self.inspector.connection with contextlib.nested(mock.patch.object(connection, 'numOfDomains', return_value=1), mock.patch.object(connection, 'listDomainsID', return_value=[42]), mock.patch.object(connection, 'lookupByID', return_value=fake_domain)): inspected_instances = list(self.inspector.inspect_instances()) self.assertEqual(1, len(inspected_instances)) inspected_instance = inspected_instances[0] self.assertEqual('fake_name', inspected_instance.name) self.assertEqual('uuid', inspected_instance.UUID) def test_inspect_cpus(self): with contextlib.nested(mock.patch.object(self.inspector.connection, 'lookupByName', return_value=self.domain), mock.patch.object(self.domain, 'info', return_value=(0L, 0L, 0L, 2L, 999999L))): cpu_info = self.inspector.inspect_cpus(self.instance_name) self.assertEqual(2L, cpu_info.number) self.assertEqual(999999L, cpu_info.time) def test_inspect_vnics(self): dom_xml = """
""" interface_stats = { 'vnet0': (1L, 2L, 0L, 0L, 3L, 4L, 0L, 0L), 'vnet1': (5L, 6L, 0L, 0L, 7L, 8L, 0L, 0L), 'vnet2': (9L, 10L, 0L, 0L, 11L, 12L, 0L, 0L), } interfaceStats = interface_stats.__getitem__ connection = self.inspector.connection with contextlib.nested(mock.patch.object(connection, 'lookupByName', return_value=self.domain), mock.patch.object(self.domain, 'XMLDesc', return_value=dom_xml), mock.patch.object(self.domain, 'interfaceStats', side_effect=interfaceStats), mock.patch.object(self.domain, 'info', return_value=(0L, 0L, 0L, 2L, 999999L))): interfaces = list(self.inspector.inspect_vnics(self.instance_name)) self.assertEqual(3, len(interfaces)) vnic0, info0 = interfaces[0] self.assertEqual('vnet0', vnic0.name) self.assertEqual('fa:16:3e:71:ec:6d', vnic0.mac) self.assertEqual('nova-instance-00000001-fa163e71ec6d', vnic0.fref) self.assertEqual('255.255.255.0', vnic0.parameters.get('projmask')) self.assertEqual('10.0.0.2', vnic0.parameters.get('ip')) self.assertEqual('10.0.0.0', vnic0.parameters.get('projnet')) self.assertEqual('10.0.0.1', vnic0.parameters.get('dhcpserver')) self.assertEqual(1L, info0.rx_bytes) self.assertEqual(2L, info0.rx_packets) self.assertEqual(3L, info0.tx_bytes) self.assertEqual(4L, info0.tx_packets) vnic1, info1 = interfaces[1] self.assertEqual('vnet1', vnic1.name) self.assertEqual('fa:16:3e:71:ec:6e', vnic1.mac) self.assertEqual('nova-instance-00000001-fa163e71ec6e', vnic1.fref) self.assertEqual('255.255.255.0', vnic1.parameters.get('projmask')) self.assertEqual('192.168.0.2', vnic1.parameters.get('ip')) self.assertEqual('192.168.0.0', vnic1.parameters.get('projnet')) self.assertEqual('192.168.0.1', vnic1.parameters.get('dhcpserver')) self.assertEqual(5L, info1.rx_bytes) self.assertEqual(6L, info1.rx_packets) self.assertEqual(7L, info1.tx_bytes) self.assertEqual(8L, info1.tx_packets) vnic2, info2 = interfaces[2] self.assertEqual('vnet2', vnic2.name) self.assertEqual('fa:16:3e:96:33:f0', vnic2.mac) self.assertIsNone(vnic2.fref) self.assertEqual(dict(), vnic2.parameters) self.assertEqual(9L, info2.rx_bytes) self.assertEqual(10L, info2.rx_packets) self.assertEqual(11L, info2.tx_bytes) self.assertEqual(12L, info2.tx_packets) def test_inspect_vnics_with_domain_shutoff(self): connection = self.inspector.connection with contextlib.nested(mock.patch.object(connection, 'lookupByName', return_value=self.domain), mock.patch.object(self.domain, 'info', return_value=(5L, 0L, 0L, 2L, 999999L))): interfaces = list(self.inspector.inspect_vnics(self.instance_name)) self.assertEqual(interfaces, []) def test_inspect_disks(self): dom_xml = """
""" with contextlib.nested(mock.patch.object(self.inspector.connection, 'lookupByName', return_value=self.domain), mock.patch.object(self.domain, 'XMLDesc', return_value=dom_xml), mock.patch.object(self.domain, 'blockStats', return_value=(1L, 2L, 3L, 4L, -1)), mock.patch.object(self.domain, 'info', return_value=(0L, 0L, 0L, 2L, 999999L))): disks = list(self.inspector.inspect_disks(self.instance_name)) self.assertEqual(1, len(disks)) disk0, info0 = disks[0] self.assertEqual('vda', disk0.device) self.assertEqual(1L, info0.read_requests) self.assertEqual(2L, info0.read_bytes) self.assertEqual(3L, info0.write_requests) self.assertEqual(4L, info0.write_bytes) def test_inspect_disks_with_domain_shutoff(self): connection = self.inspector.connection with contextlib.nested(mock.patch.object(connection, 'lookupByName', return_value=self.domain), mock.patch.object(self.domain, 'info', return_value=(5L, 0L, 0L, 2L, 999999L))): disks = list(self.inspector.inspect_disks(self.instance_name)) self.assertEqual(disks, []) class TestLibvirtInspectionWithError(test.BaseTestCase): class fakeLibvirtError(Exception): pass def setUp(self): super(TestLibvirtInspectionWithError, self).setUp() self.inspector = libvirt_inspector.LibvirtInspector() self.useFixture(fixtures.MonkeyPatch( 'ceilometer.compute.virt.libvirt.inspector.' 'LibvirtInspector._get_connection', self._dummy_get_connection)) libvirt_inspector.libvirt = mock.Mock() libvirt_inspector.libvirt.libvirtError = self.fakeLibvirtError def _dummy_get_connection(*args, **kwargs): raise Exception('dummy') def test_inspect_unknown_error(self): self.assertRaises(virt_inspector.InspectorException, self.inspector.inspect_cpus, 'foo') ceilometer-2014.1/ceilometer/tests/compute/virt/hyperv/0000775000175300017540000000000012323717426024344 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/hyperv/__init__.py0000664000175300017540000000000012323717130026433 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/hyperv/test_inspector.py0000664000175300017540000001071212323717130027754 0ustar jenkinsjenkins00000000000000# Copyright 2013 Cloudbase Solutions Srl # # Author: Alessandro Pilotti # # 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. """ Tests for Hyper-V inspector. """ import mock from ceilometer.compute.virt.hyperv import inspector as hyperv_inspector from ceilometer.openstack.common import test from ceilometer.openstack.common import units class TestHyperVInspection(test.BaseTestCase): def setUp(self): self._inspector = hyperv_inspector.HyperVInspector() self._inspector._utils = mock.MagicMock() super(TestHyperVInspection, self).setUp() def test_inspect_instances(self): fake_name = 'fake_name' fake_uuid = 'fake_uuid' fake_instances = [(fake_name, fake_uuid)] self._inspector._utils.get_all_vms.return_value = fake_instances inspected_instances = list(self._inspector.inspect_instances()) self.assertEqual(1, len(inspected_instances)) self.assertEqual(fake_name, inspected_instances[0].name) self.assertEqual(fake_uuid, inspected_instances[0].UUID) def test_inspect_cpus(self): fake_instance_name = 'fake_instance_name' fake_host_cpu_clock = 1000 fake_host_cpu_count = 2 fake_cpu_clock_used = 2000 fake_cpu_count = 3000 fake_uptime = 4000 fake_cpu_percent_used = (fake_cpu_clock_used / float(fake_host_cpu_clock * fake_cpu_count)) fake_cpu_time = (long(fake_uptime * fake_cpu_percent_used) * 1000) self._inspector._utils.get_host_cpu_info.return_value = ( fake_host_cpu_clock, fake_host_cpu_count) self._inspector._utils.get_cpu_metrics.return_value = ( fake_cpu_clock_used, fake_cpu_count, fake_uptime) cpu_stats = self._inspector.inspect_cpus(fake_instance_name) self.assertEqual(fake_cpu_count, cpu_stats.number) self.assertEqual(fake_cpu_time, cpu_stats.time) def test_inspect_vnics(self): fake_instance_name = 'fake_instance_name' fake_rx_mb = 1000 fake_tx_mb = 2000 fake_element_name = 'fake_element_name' fake_address = 'fake_address' self._inspector._utils.get_vnic_metrics.return_value = [{ 'rx_mb': fake_rx_mb, 'tx_mb': fake_tx_mb, 'element_name': fake_element_name, 'address': fake_address}] inspected_vnics = list(self._inspector.inspect_vnics( fake_instance_name)) self.assertEqual(1, len(inspected_vnics)) self.assertEqual(2, len(inspected_vnics[0])) inspected_vnic, inspected_stats = inspected_vnics[0] self.assertEqual(fake_element_name, inspected_vnic.name) self.assertEqual(fake_address, inspected_vnic.mac) self.assertEqual(fake_rx_mb * units.Mi, inspected_stats.rx_bytes) self.assertEqual(fake_tx_mb * units.Mi, inspected_stats.tx_bytes) def test_inspect_disks(self): fake_instance_name = 'fake_instance_name' fake_read_mb = 1000 fake_write_mb = 2000 fake_instance_id = "fake_fake_instance_id" fake_host_resource = "fake_host_resource" fake_device = {"instance_id": fake_instance_id, "host_resource": fake_host_resource} self._inspector._utils.get_disk_metrics.return_value = [{ 'read_mb': fake_read_mb, 'write_mb': fake_write_mb, 'instance_id': fake_instance_id, 'host_resource': fake_host_resource}] inspected_disks = list(self._inspector.inspect_disks( fake_instance_name)) self.assertEqual(1, len(inspected_disks)) self.assertEqual(2, len(inspected_disks[0])) inspected_disk, inspected_stats = inspected_disks[0] self.assertEqual(fake_device, inspected_disk.device) self.assertEqual(fake_read_mb * units.Mi, inspected_stats.read_bytes) self.assertEqual(fake_write_mb * units.Mi, inspected_stats.write_bytes) ceilometer-2014.1/ceilometer/tests/compute/virt/hyperv/test_utilsv2.py0000664000175300017540000001776612323717130027376 0ustar jenkinsjenkins00000000000000# Copyright 2013 Cloudbase Solutions Srl # # Author: Alessandro Pilotti # # 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. """ Tests for Hyper-V utilsv2. """ import mock from ceilometer.compute.virt.hyperv import utilsv2 as utilsv2 from ceilometer.compute.virt import inspector from ceilometer.openstack.common import test class TestUtilsV2(test.BaseTestCase): _FAKE_RETURN_CLASS = 'fake_return_class' def setUp(self): self._utils = utilsv2.UtilsV2() self._utils._conn = mock.MagicMock() self._utils._conn_cimv2 = mock.MagicMock() super(TestUtilsV2, self).setUp() def test_get_host_cpu_info(self): _fake_clock_speed = 1000 _fake_cpu_count = 2 mock_cpu = mock.MagicMock() mock_cpu.MaxClockSpeed = _fake_clock_speed self._utils._conn_cimv2.Win32_Processor.return_value = [mock_cpu, mock_cpu] cpu_info = self._utils.get_host_cpu_info() self.assertEqual(_fake_clock_speed, cpu_info[0]) self.assertEqual(_fake_cpu_count, cpu_info[1]) def test_get_all_vms(self): fake_vm_element_name = "fake_vm_element_name" fake_vm_name = "fake_vm_name" mock_vm = mock.MagicMock() mock_vm.ElementName = fake_vm_element_name mock_vm.Name = fake_vm_name self._utils._conn.Msvm_ComputerSystem.return_value = [mock_vm] vms = self._utils.get_all_vms() self.assertEqual((fake_vm_element_name, fake_vm_name), vms[0]) def test_get_cpu_metrics(self): fake_vm_element_name = "fake_vm_element_name" fake_cpu_count = 2 fake_uptime = 1000 fake_cpu_metric_val = 2000 self._utils._lookup_vm = mock.MagicMock() self._utils._lookup_vm().OnTimeInMilliseconds = fake_uptime self._utils._get_vm_resources = mock.MagicMock() mock_res = self._utils._get_vm_resources()[0] mock_res.VirtualQuantity = fake_cpu_count self._utils._get_metrics = mock.MagicMock() self._utils._get_metrics()[0].MetricValue = fake_cpu_metric_val cpu_metrics = self._utils.get_cpu_metrics(fake_vm_element_name) self.assertEqual(3, len(cpu_metrics)) self.assertEqual(fake_cpu_metric_val, cpu_metrics[0]) self.assertEqual(fake_cpu_count, cpu_metrics[1]) self.assertEqual(fake_uptime, cpu_metrics[2]) @mock.patch('ceilometer.compute.virt.hyperv.utilsv2.UtilsV2' '._sum_metric_values_by_defs') @mock.patch('ceilometer.compute.virt.hyperv.utilsv2.UtilsV2' '._get_metric_value_instances') def test_get_vnic_metrics(self, mock_get_instances, mock_get_by_defs): fake_vm_element_name = "fake_vm_element_name" fake_vnic_element_name = "fake_vnic_name" fake_vnic_address = "fake_vnic_address" fake_vnic_path = "fake_vnic_path" fake_rx_mb = 1000 fake_tx_mb = 2000 self._utils._lookup_vm = mock.MagicMock() self._utils._get_vm_resources = mock.MagicMock() mock_port = mock.MagicMock() mock_port.Parent = fake_vnic_path mock_vnic = mock.MagicMock() mock_vnic.path_.return_value = fake_vnic_path mock_vnic.ElementName = fake_vnic_element_name mock_vnic.Address = fake_vnic_address self._utils._get_vm_resources.side_effect = [[mock_port], [mock_vnic]] self._utils._get_metric_def = mock.MagicMock() mock_get_by_defs.return_value = [fake_rx_mb, fake_tx_mb] vnic_metrics = list(self._utils.get_vnic_metrics(fake_vm_element_name)) self.assertEqual(1, len(vnic_metrics)) self.assertEqual(fake_rx_mb, vnic_metrics[0]['rx_mb']) self.assertEqual(fake_tx_mb, vnic_metrics[0]['tx_mb']) self.assertEqual(fake_vnic_element_name, vnic_metrics[0]['element_name']) self.assertEqual(fake_vnic_address, vnic_metrics[0]['address']) def test_get_disk_metrics(self): fake_vm_element_name = "fake_vm_element_name" fake_host_resource = "fake_host_resource" fake_instance_id = "fake_instance_id" fake_read_mb = 1000 fake_write_mb = 2000 self._utils._lookup_vm = mock.MagicMock() mock_disk = mock.MagicMock() mock_disk.HostResource = [fake_host_resource] mock_disk.InstanceID = fake_instance_id self._utils._get_vm_resources = mock.MagicMock( return_value=[mock_disk]) self._utils._get_metric_def = mock.MagicMock() self._utils._get_metric_values = mock.MagicMock() self._utils._get_metric_values.return_value = [fake_read_mb, fake_write_mb] disk_metrics = list(self._utils.get_disk_metrics(fake_vm_element_name)) self.assertEqual(1, len(disk_metrics)) self.assertEqual(fake_read_mb, disk_metrics[0]['read_mb']) self.assertEqual(fake_write_mb, disk_metrics[0]['write_mb']) self.assertEqual(fake_instance_id, disk_metrics[0]['instance_id']) self.assertEqual(fake_host_resource, disk_metrics[0]['host_resource']) def test_get_metric_value_instances(self): mock_el1 = mock.MagicMock() mock_associator = mock.MagicMock() mock_el1.associators.return_value = [mock_associator] mock_el2 = mock.MagicMock() mock_el2.associators.return_value = [] returned = self._utils._get_metric_value_instances( [mock_el1, mock_el2], self._FAKE_RETURN_CLASS) self.assertEqual([mock_associator], returned) def test_lookup_vm(self): fake_vm_element_name = "fake_vm_element_name" fake_vm = "fake_vm" self._utils._conn.Msvm_ComputerSystem.return_value = [fake_vm] vm = self._utils._lookup_vm(fake_vm_element_name) self.assertEqual(fake_vm, vm) def test_lookup_vm_not_found(self): fake_vm_element_name = "fake_vm_element_name" self._utils._conn.Msvm_ComputerSystem.return_value = [] self.assertRaises(inspector.InstanceNotFoundException, self._utils._lookup_vm, fake_vm_element_name) def test_lookup_vm_duplicate_found(self): fake_vm_element_name = "fake_vm_element_name" fake_vm = "fake_vm" self._utils._conn.Msvm_ComputerSystem.return_value = [fake_vm, fake_vm] self.assertRaises(utilsv2.HyperVException, self._utils._lookup_vm, fake_vm_element_name) def test_get_metric_values(self): fake_metric_def_id = "fake_metric_def_id" fake_metric_value = "1000" mock_metric = mock.MagicMock() mock_metric.MetricDefinitionId = fake_metric_def_id mock_metric.MetricValue = fake_metric_value mock_element = mock.MagicMock() mock_element.associators.return_value = [mock_metric] mock_metric_def = mock.MagicMock() mock_metric_def.Id = fake_metric_def_id metric_values = self._utils._get_metric_values(mock_element, [mock_metric_def]) self.assertEqual(1, len(metric_values)) self.assertEqual(long(fake_metric_value), metric_values[0]) def test_get_vm_setting_data(self): mock_vm_s = mock.MagicMock() mock_vm_s.VirtualSystemType = self._utils._VIRTUAL_SYSTEM_TYPE_REALIZED mock_vm = mock.MagicMock() mock_vm.associators.return_value = [mock_vm_s] vm_setting_data = self._utils._get_vm_setting_data(mock_vm) self.assertEqual(mock_vm_s, vm_setting_data) ceilometer-2014.1/ceilometer/tests/compute/virt/vmware/0000775000175300017540000000000012323717426024330 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/vmware/__init__.py0000664000175300017540000000000012323717130026417 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/virt/vmware/test_inspector.py0000664000175300017540000001500212323717130027735 0ustar jenkinsjenkins00000000000000# Copyright (c) 2014 VMware, 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. """ Tests for VMware Vsphere inspector. """ import mock from oslo.vmware import api from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.compute.virt.vmware import inspector as vsphere_inspector from ceilometer.openstack.common import test class TestVsphereInspection(test.BaseTestCase): def setUp(self): api_session = api.VMwareAPISession("test_server", "test_user", "test_password", 0, None, create_session=False) api_session._vim = mock.MagicMock() vsphere_inspector.get_api_session = mock.Mock( return_value=api_session) self._inspector = vsphere_inspector.VsphereInspector() self._inspector._ops = mock.MagicMock() super(TestVsphereInspection, self).setUp() def test_inspect_memory_usage(self): fake_instance_moid = 'fake_instance_moid' fake_instance_id = 'fake_instance_id' fake_perf_counter_id = 'fake_perf_counter_id' fake_memory_value = 1024.0 fake_stat = virt_inspector.MemoryUsageStats(usage=1.0) def construct_mock_instance_object(fake_instance_id): instance_object = mock.MagicMock() instance_object.id = fake_instance_id return instance_object fake_instance = construct_mock_instance_object(fake_instance_id) self._inspector._ops.get_vm_moid.return_value = fake_instance_moid self._inspector._ops.get_perf_counter_id.return_value = \ fake_perf_counter_id self._inspector._ops.query_vm_aggregate_stats.return_value = \ fake_memory_value memory_stat = self._inspector.inspect_memory_usage(fake_instance) self.assertEqual(fake_stat, memory_stat) def test_inspect_cpu_util(self): fake_instance_moid = 'fake_instance_moid' fake_instance_id = 'fake_instance_id' fake_perf_counter_id = 'fake_perf_counter_id' fake_cpu_util_value = 60 fake_stat = virt_inspector.CPUUtilStats(util=60) def construct_mock_instance_object(fake_instance_id): instance_object = mock.MagicMock() instance_object.id = fake_instance_id return instance_object fake_instance = construct_mock_instance_object(fake_instance_id) self._inspector._ops.get_vm_moid.return_value = fake_instance_moid self._inspector._ops.get_perf_counter_id.return_value = \ fake_perf_counter_id self._inspector._ops.query_vm_aggregate_stats.return_value = \ fake_cpu_util_value * 100 cpu_util_stat = self._inspector.inspect_cpu_util(fake_instance) self.assertEqual(fake_stat, cpu_util_stat) def test_inspect_vnic_rates(self): # construct test data test_vm_moid = "vm-21" vnic1 = "vnic-1" vnic2 = "vnic-2" counter_name_to_id_map = { vsphere_inspector.VC_NETWORK_RX_COUNTER: 1, vsphere_inspector.VC_NETWORK_TX_COUNTER: 2 } counter_id_to_stats_map = { 1: {vnic1: 1, vnic2: 3}, 2: {vnic1: 2, vnic2: 4}, } def get_counter_id_side_effect(counter_full_name): return counter_name_to_id_map[counter_full_name] def query_stat_side_effect(vm_moid, counter_id, duration): # assert inputs self.assertEqual(test_vm_moid, vm_moid) self.assertTrue(counter_id in counter_id_to_stats_map) return counter_id_to_stats_map[counter_id] # configure vsphere operations mock with the test data ops_mock = self._inspector._ops ops_mock.get_vm_moid.return_value = test_vm_moid ops_mock.get_perf_counter_id.side_effect = get_counter_id_side_effect ops_mock.query_vm_device_stats.side_effect = \ query_stat_side_effect result = self._inspector.inspect_vnic_rates(mock.MagicMock()) # validate result expected_stats = { vnic1: virt_inspector.InterfaceRateStats(1024, 2048), vnic2: virt_inspector.InterfaceRateStats(3072, 4096) } for vnic, rates_info in result: self.assertEqual(expected_stats[vnic.name], rates_info) def test_inspect_disk_rates(self): # construct test data test_vm_moid = "vm-21" disk1 = "disk-1" disk2 = "disk-2" counter_name_to_id_map = { vsphere_inspector.VC_DISK_READ_RATE_CNTR: 1, vsphere_inspector.VC_DISK_READ_REQUESTS_RATE_CNTR: 2, vsphere_inspector.VC_DISK_WRITE_RATE_CNTR: 3, vsphere_inspector.VC_DISK_WRITE_REQUESTS_RATE_CNTR: 4 } counter_id_to_stats_map = { 1: {disk1: 1, disk2: 2}, 2: {disk1: 300, disk2: 400}, 3: {disk1: 5, disk2: 6}, 4: {disk1: 700}, } def get_counter_id_side_effect(counter_full_name): return counter_name_to_id_map[counter_full_name] def query_stat_side_effect(vm_moid, counter_id, duration): # assert inputs self.assertEqual(test_vm_moid, vm_moid) self.assertTrue(counter_id in counter_id_to_stats_map) return counter_id_to_stats_map[counter_id] # configure vsphere operations mock with the test data ops_mock = self._inspector._ops ops_mock.get_vm_moid.return_value = test_vm_moid ops_mock.get_perf_counter_id.side_effect = get_counter_id_side_effect ops_mock.query_vm_device_stats.side_effect = query_stat_side_effect result = self._inspector.inspect_disk_rates(mock.MagicMock()) # validate result expected_stats = { disk1: virt_inspector.DiskRateStats(1024, 300, 5120, 700), disk2: virt_inspector.DiskRateStats(2048, 400, 6144, 0) } actual_stats = dict((disk.device, rates) for (disk, rates) in result) self.assertEqual(expected_stats, actual_stats) ceilometer-2014.1/ceilometer/tests/compute/virt/vmware/test_vsphere_operations.py0000664000175300017540000001540512323717130031655 0ustar jenkinsjenkins00000000000000# Copyright (c) 2014 VMware, 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 oslo.vmware import api from ceilometer.compute.virt.vmware import vsphere_operations from ceilometer.openstack.common import test class VsphereOperationsTest(test.BaseTestCase): def setUp(self): api_session = api.VMwareAPISession("test_server", "test_user", "test_password", 0, None, create_session=False) api_session._vim = mock.MagicMock() self._vsphere_ops = vsphere_operations.VsphereOperations(api_session, 1000) super(VsphereOperationsTest, self).setUp() def test_get_vm_moid(self): vm1_moid = "vm-1" vm2_moid = "vm-2" vm1_instance = "0a651a71-142c-4813-aaa6-42e5d5c80d85" vm2_instance = "db1d2533-6bef-4cb2-aef3-920e109f5693" def construct_mock_vm_object(vm_moid, vm_instance): vm_object = mock.MagicMock() vm_object.obj.value = vm_moid vm_object.propSet[0].val = vm_instance return vm_object def retrieve_props_side_effect(pc, specSet, options): # assert inputs self.assertEqual(self._vsphere_ops._max_objects, options.maxObjects) self.assertEqual(vsphere_operations.VM_INSTANCE_ID_PROPERTY, specSet[0].pathSet[0]) # mock return result vm1 = construct_mock_vm_object(vm1_moid, vm1_instance) vm2 = construct_mock_vm_object(vm2_moid, vm2_instance) result = mock.MagicMock() result.objects.__iter__.return_value = [vm1, vm2] return result vim_mock = self._vsphere_ops._api_session._vim vim_mock.RetrievePropertiesEx.side_effect = retrieve_props_side_effect vim_mock.ContinueRetrievePropertiesEx.return_value = None vm_moid = self._vsphere_ops.get_vm_moid(vm1_instance) self.assertEqual(vm1_moid, vm_moid) vm_moid = self._vsphere_ops.get_vm_moid(vm2_instance) self.assertEqual(vm2_moid, vm_moid) def test_query_vm_property(self): vm_moid = "vm-21" vm_property_name = "runtime.powerState" vm_property_val = "poweredON" def retrieve_props_side_effect(pc, specSet, options): # assert inputs self.assertEqual(vm_moid, specSet[0].obj.value) self.assertEqual(vm_property_name, specSet[0].pathSet[0]) # mock return result result = mock.MagicMock() result.objects[0].propSet[0].val = vm_property_val return result vim_mock = self._vsphere_ops._api_session._vim vim_mock.RetrievePropertiesEx.side_effect = retrieve_props_side_effect actual_val = self._vsphere_ops.query_vm_property(vm_moid, vm_property_name) self.assertEqual(vm_property_val, actual_val) def test_get_perf_counter_id(self): def construct_mock_counter_info(group_name, counter_name, rollup_type, counter_id): counter_info = mock.MagicMock() counter_info.groupInfo.key = group_name counter_info.nameInfo.key = counter_name counter_info.rollupType = rollup_type counter_info.key = counter_id return counter_info def retrieve_props_side_effect(pc, specSet, options): # assert inputs self.assertEqual(vsphere_operations.PERF_COUNTER_PROPERTY, specSet[0].pathSet[0]) # mock return result counter_info1 = construct_mock_counter_info("a", "b", "c", 1) counter_info2 = construct_mock_counter_info("x", "y", "z", 2) result = mock.MagicMock() result.objects[0].propSet[0].val.PerfCounterInfo.__iter__. \ return_value = [counter_info1, counter_info2] return result vim_mock = self._vsphere_ops._api_session._vim vim_mock.RetrievePropertiesEx.side_effect = retrieve_props_side_effect counter_id = self._vsphere_ops.get_perf_counter_id("a:b:c") self.assertEqual(1, counter_id) counter_id = self._vsphere_ops.get_perf_counter_id("x:y:z") self.assertEqual(2, counter_id) def test_query_vm_stats(self): vm_moid = "vm-21" device1 = "device-1" device2 = "device-2" device3 = "device-3" counter_id = 5 def construct_mock_metric_series(device_name, stat_values): metric_series = mock.MagicMock() metric_series.value = stat_values metric_series.id.instance = device_name return metric_series def vim_query_perf_side_effect(perf_manager, querySpec): # assert inputs self.assertEqual(vm_moid, querySpec[0].entity.value) self.assertEqual(counter_id, querySpec[0].metricId[0].counterId) self.assertEqual(vsphere_operations.VC_REAL_TIME_SAMPLING_INTERVAL, querySpec[0].intervalId) # mock return result perf_stats = mock.MagicMock() perf_stats[0].sampleInfo = ["s1", "s2", "s3"] perf_stats[0].value.__iter__.return_value = [ construct_mock_metric_series(None, [111, 222, 333]), construct_mock_metric_series(device1, [100, 200, 300]), construct_mock_metric_series(device2, [10, 20, 30]), construct_mock_metric_series(device3, [1, 2, 3]) ] return perf_stats vim_mock = self._vsphere_ops._api_session._vim vim_mock.QueryPerf.side_effect = vim_query_perf_side_effect ops = self._vsphere_ops # test aggregate stat stat_val = ops.query_vm_aggregate_stats(vm_moid, counter_id, 60) self.assertEqual(222, stat_val) # test per-device(non-aggregate) stats expected_device_stats = { device1: 200, device2: 20, device3: 2 } stats = ops.query_vm_device_stats(vm_moid, counter_id, 60) self.assertEqual(expected_device_stats, stats) ceilometer-2014.1/ceilometer/tests/compute/pollsters/0000775000175300017540000000000012323717426024072 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/pollsters/test_cpu.py0000664000175300017540000000766112323717130026274 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 time import mock import six from ceilometer.compute import manager from ceilometer.compute.pollsters import cpu from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.tests.compute.pollsters import base class TestCPUPollster(base.TestPollsterBase): def setUp(self): super(TestCPUPollster, self).setUp() @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples(self): next_value = iter(( virt_inspector.CPUStats(time=1 * (10 ** 6), number=2), virt_inspector.CPUStats(time=3 * (10 ** 6), number=2), # cpu_time resets on instance restart virt_inspector.CPUStats(time=2 * (10 ** 6), number=2), )) def inspect_cpus(name): return six.next(next_value) self.inspector.inspect_cpus = mock.Mock(side_effect=inspect_cpus) mgr = manager.AgentManager() pollster = cpu.CPUPollster() def _verify_cpu_metering(expected_time): cache = {} samples = list(pollster.get_samples(mgr, cache, [self.instance])) self.assertEqual(1, len(samples)) self.assertEqual(set(['cpu']), set([s.name for s in samples])) self.assertEqual(expected_time, samples[0].volume) self.assertEqual(2, samples[0].resource_metadata.get('cpu_number')) # ensure elapsed time between polling cycles is non-zero time.sleep(0.001) _verify_cpu_metering(1 * (10 ** 6)) _verify_cpu_metering(3 * (10 ** 6)) _verify_cpu_metering(2 * (10 ** 6)) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples_no_caching(self): cpu_stats = virt_inspector.CPUStats(time=1 * (10 ** 6), number=2) self.inspector.inspect_cpus = mock.Mock(return_value=cpu_stats) mgr = manager.AgentManager() pollster = cpu.CPUPollster() cache = {} samples = list(pollster.get_samples(mgr, cache, [self.instance])) self.assertEqual(1, len(samples)) self.assertEqual(10 ** 6, samples[0].volume) self.assertEqual(0, len(cache)) class TestCPUUtilPollster(base.TestPollsterBase): def setUp(self): super(TestCPUUtilPollster, self).setUp() @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples(self): next_value = iter(( virt_inspector.CPUUtilStats(util=40), virt_inspector.CPUUtilStats(util=60), )) def inspect_cpu_util(name, duration): return six.next(next_value) self.inspector.inspect_cpu_util = \ mock.Mock(side_effect=inspect_cpu_util) mgr = manager.AgentManager() pollster = cpu.CPUUtilPollster() def _verify_cpu_util_metering(expected_util): cache = {} samples = list(pollster.get_samples(mgr, cache, [self.instance])) self.assertEqual(1, len(samples)) self.assertEqual(set(['cpu_util']), set([s.name for s in samples])) self.assertEqual(expected_util, samples[0].volume) _verify_cpu_util_metering(40) _verify_cpu_util_metering(60) ceilometer-2014.1/ceilometer/tests/compute/pollsters/test_location_metadata.py0000664000175300017540000001030012323717132031137 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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. """Tests for the compute pollsters. """ import mock from ceilometer.compute import manager from ceilometer.compute.pollsters import util from ceilometer.openstack.common import test class FauxInstance(object): def __init__(self, **kwds): for name, value in kwds.items(): setattr(self, name, value) def __getitem__(self, key): return getattr(self, key) def get(self, key, default): try: return getattr(self, key) except AttributeError: return default class TestLocationMetadata(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): self.manager = manager.AgentManager() super(TestLocationMetadata, self).setUp() # Mimics an instance returned from nova api call self.INSTANCE_PROPERTIES = {'name': 'display name', 'OS-EXT-SRV-ATTR:instance_name': 'instance-000001', 'OS-EXT-AZ:availability_zone': 'foo-zone', 'reservation_id': 'reservation id', 'architecture': 'x86_64', 'kernel_id': 'kernel id', 'os_type': 'linux', 'ramdisk_id': 'ramdisk id', 'ephemeral_gb': 0, 'root_gb': 20, 'disk_gb': 20, 'image': {'id': 1, 'links': [{"rel": "bookmark", 'href': 2}]}, 'hostId': '1234-5678', 'flavor': {'id': 1, 'disk': 20, 'ram': 512, 'vcpus': 2, 'ephemeral': 0}, 'metadata': {'metering.autoscale.group': 'X' * 512, 'metering.ephemeral_gb': 42}} self.instance = FauxInstance(**self.INSTANCE_PROPERTIES) def test_metadata(self): md = util._get_metadata_from_object(self.instance) for prop, value in self.INSTANCE_PROPERTIES.iteritems(): if prop not in ("metadata"): # Special cases if prop == 'name': prop = 'display_name' elif prop == 'hostId': prop = "host" elif prop == 'OS-EXT-SRV-ATTR:instance_name': prop = 'name' self.assertEqual(value, md[prop]) user_metadata = md['user_metadata'] expected = self.INSTANCE_PROPERTIES[ 'metadata']['metering.autoscale.group'][:256] self.assertEqual(expected, user_metadata['autoscale_group']) self.assertEqual(1, len(user_metadata)) def test_metadata_empty_image(self): self.INSTANCE_PROPERTIES['image'] = '' self.instance = FauxInstance(**self.INSTANCE_PROPERTIES) md = util._get_metadata_from_object(self.instance) self.assertIsNone(md['image_ref']) self.assertIsNone(md['image_ref_url']) ceilometer-2014.1/ceilometer/tests/compute/pollsters/test_net.py0000664000175300017540000002411112323717130026260 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 ceilometer.compute import manager from ceilometer.compute.pollsters import net from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.tests.compute.pollsters import base class TestNetPollster(base.TestPollsterBase): def setUp(self): super(TestNetPollster, self).setUp() self.vnic0 = virt_inspector.Interface( name='vnet0', fref='fa163e71ec6e', mac='fa:16:3e:71:ec:6d', parameters=dict(ip='10.0.0.2', projmask='255.255.255.0', projnet='proj1', dhcp_server='10.0.0.1')) stats0 = virt_inspector.InterfaceStats(rx_bytes=1L, rx_packets=2L, tx_bytes=3L, tx_packets=4L) self.vnic1 = virt_inspector.Interface( name='vnet1', fref='fa163e71ec6f', mac='fa:16:3e:71:ec:6e', parameters=dict(ip='192.168.0.3', projmask='255.255.255.0', projnet='proj2', dhcp_server='10.0.0.2')) stats1 = virt_inspector.InterfaceStats(rx_bytes=5L, rx_packets=6L, tx_bytes=7L, tx_packets=8L) self.vnic2 = virt_inspector.Interface( name='vnet2', fref=None, mac='fa:18:4e:72:fc:7e', parameters=dict(ip='192.168.0.4', projmask='255.255.255.0', projnet='proj3', dhcp_server='10.0.0.3')) stats2 = virt_inspector.InterfaceStats(rx_bytes=9L, rx_packets=10L, tx_bytes=11L, tx_packets=12L) vnics = [ (self.vnic0, stats0), (self.vnic1, stats1), (self.vnic2, stats2), ] self.inspector.inspect_vnics = mock.Mock(return_value=vnics) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, expected): mgr = manager.AgentManager() pollster = factory() samples = list(pollster.get_samples(mgr, {}, [self.instance])) self.assertEqual(3, len(samples)) # one for each nic self.assertEqual(set([samples[0].name]), set([s.name for s in samples])) def _verify_vnic_metering(ip, expected_volume, expected_rid): match = [s for s in samples if s.resource_metadata['parameters']['ip'] == ip ] self.assertEqual(len(match), 1, 'missing ip %s' % ip) self.assertEqual(expected_volume, match[0].volume) self.assertEqual('cumulative', match[0].type) self.assertEqual(expected_rid, match[0].resource_id) for ip, volume, rid in expected: _verify_vnic_metering(ip, volume, rid) def test_incoming_bytes(self): instance_name_id = "%s-%s" % (self.instance.name, self.instance.id) self._check_get_samples( net.IncomingBytesPollster, [('10.0.0.2', 1L, self.vnic0.fref), ('192.168.0.3', 5L, self.vnic1.fref), ('192.168.0.4', 9L, "%s-%s" % (instance_name_id, self.vnic2.name)), ], ) def test_outgoing_bytes(self): instance_name_id = "%s-%s" % (self.instance.name, self.instance.id) self._check_get_samples( net.OutgoingBytesPollster, [('10.0.0.2', 3L, self.vnic0.fref), ('192.168.0.3', 7L, self.vnic1.fref), ('192.168.0.4', 11L, "%s-%s" % (instance_name_id, self.vnic2.name)), ], ) def test_incoming_packets(self): instance_name_id = "%s-%s" % (self.instance.name, self.instance.id) self._check_get_samples( net.IncomingPacketsPollster, [('10.0.0.2', 2L, self.vnic0.fref), ('192.168.0.3', 6L, self.vnic1.fref), ('192.168.0.4', 10L, "%s-%s" % (instance_name_id, self.vnic2.name)), ], ) def test_outgoing_packets(self): instance_name_id = "%s-%s" % (self.instance.name, self.instance.id) self._check_get_samples( net.OutgoingPacketsPollster, [('10.0.0.2', 4L, self.vnic0.fref), ('192.168.0.3', 8L, self.vnic1.fref), ('192.168.0.4', 12L, "%s-%s" % (instance_name_id, self.vnic2.name)), ], ) class TestNetPollsterCache(base.TestPollsterBase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples_cache(self, factory): vnic0 = virt_inspector.Interface( name='vnet0', fref='fa163e71ec6e', mac='fa:16:3e:71:ec:6d', parameters=dict(ip='10.0.0.2', projmask='255.255.255.0', projnet='proj1', dhcp_server='10.0.0.1')) stats0 = virt_inspector.InterfaceStats(rx_bytes=1L, rx_packets=2L, tx_bytes=3L, tx_packets=4L) vnics = [(vnic0, stats0)] mgr = manager.AgentManager() pollster = factory() cache = { pollster.CACHE_KEY_VNIC: { self.instance.name: vnics, }, } samples = list(pollster.get_samples(mgr, cache, [self.instance])) self.assertEqual(1, len(samples)) def test_incoming_bytes(self): self._check_get_samples_cache(net.IncomingBytesPollster) def test_outgoing_bytes(self): self._check_get_samples_cache(net.OutgoingBytesPollster) def test_incoming_packets(self): self._check_get_samples_cache(net.IncomingPacketsPollster) def test_outgoing_packets(self): self._check_get_samples_cache(net.OutgoingPacketsPollster) class TestNetRatesPollster(base.TestPollsterBase): def setUp(self): super(TestNetRatesPollster, self).setUp() self.vnic0 = virt_inspector.Interface( name='vnet0', fref='fa163e71ec6e', mac='fa:16:3e:71:ec:6d', parameters=dict(ip='10.0.0.2', projmask='255.255.255.0', projnet='proj1', dhcp_server='10.0.0.1')) stats0 = virt_inspector.InterfaceRateStats(rx_bytes_rate=1L, tx_bytes_rate=2L) self.vnic1 = virt_inspector.Interface( name='vnet1', fref='fa163e71ec6f', mac='fa:16:3e:71:ec:6e', parameters=dict(ip='192.168.0.3', projmask='255.255.255.0', projnet='proj2', dhcp_server='10.0.0.2')) stats1 = virt_inspector.InterfaceRateStats(rx_bytes_rate=3L, tx_bytes_rate=4L) self.vnic2 = virt_inspector.Interface( name='vnet2', fref=None, mac='fa:18:4e:72:fc:7e', parameters=dict(ip='192.168.0.4', projmask='255.255.255.0', projnet='proj3', dhcp_server='10.0.0.3')) stats2 = virt_inspector.InterfaceRateStats(rx_bytes_rate=5L, tx_bytes_rate=6L) vnics = [ (self.vnic0, stats0), (self.vnic1, stats1), (self.vnic2, stats2), ] self.inspector.inspect_vnic_rates = mock.Mock(return_value=vnics) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, expected): mgr = manager.AgentManager() pollster = factory() samples = list(pollster.get_samples(mgr, {}, [self.instance])) self.assertEqual(3, len(samples)) # one for each nic self.assertEqual(set([samples[0].name]), set([s.name for s in samples])) def _verify_vnic_metering(ip, expected_volume, expected_rid): match = [s for s in samples if s.resource_metadata['parameters']['ip'] == ip ] self.assertEqual(1, len(match), 'missing ip %s' % ip) self.assertEqual(expected_volume, match[0].volume) self.assertEqual('gauge', match[0].type) self.assertEqual(expected_rid, match[0].resource_id) for ip, volume, rid in expected: _verify_vnic_metering(ip, volume, rid) def test_incoming_bytes_rate(self): instance_name_id = "%s-%s" % (self.instance.name, self.instance.id) self._check_get_samples( net.IncomingBytesRatePollster, [('10.0.0.2', 1L, self.vnic0.fref), ('192.168.0.3', 3L, self.vnic1.fref), ('192.168.0.4', 5L, "%s-%s" % (instance_name_id, self.vnic2.name)), ], ) def test_outgoing_bytes(self): instance_name_id = "%s-%s" % (self.instance.name, self.instance.id) self._check_get_samples( net.OutgoingBytesRatePollster, [('10.0.0.2', 2L, self.vnic0.fref), ('192.168.0.3', 4L, self.vnic1.fref), ('192.168.0.4', 6L, "%s-%s" % (instance_name_id, self.vnic2.name)), ], ) ceilometer-2014.1/ceilometer/tests/compute/pollsters/test_instance.py0000664000175300017540000000420412323717132027301 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 ceilometer.compute import manager from ceilometer.compute.pollsters import instance as pollsters_instance from ceilometer.tests.compute.pollsters import base class TestInstancePollster(base.TestPollsterBase): def setUp(self): super(TestInstancePollster, self).setUp() @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples_instance(self): mgr = manager.AgentManager() pollster = pollsters_instance.InstancePollster() samples = list(pollster.get_samples(mgr, {}, [self.instance])) self.assertEqual(1, len(samples)) self.assertEqual('instance', samples[0].name) self.assertEqual(1, samples[0].resource_metadata['vcpus']) self.assertEqual(512, samples[0].resource_metadata['memory_mb']) self.assertEqual(20, samples[0].resource_metadata['disk_gb']) self.assertEqual(20, samples[0].resource_metadata['root_gb']) self.assertEqual(0, samples[0].resource_metadata['ephemeral_gb']) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples_instance_flavor(self): mgr = manager.AgentManager() pollster = pollsters_instance.InstanceFlavorPollster() samples = list(pollster.get_samples(mgr, {}, [self.instance])) self.assertEqual(1, len(samples)) self.assertEqual('instance:m1.small', samples[0].name) ceilometer-2014.1/ceilometer/tests/compute/pollsters/test_memory.py0000664000175300017540000000367712323717130027020 0ustar jenkinsjenkins00000000000000# Copyright (c) 2014 VMware, 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 import six from ceilometer.compute import manager from ceilometer.compute.pollsters import memory from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.tests.compute.pollsters import base class TestMemoryPollster(base.TestPollsterBase): def setUp(self): super(TestMemoryPollster, self).setUp() @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_get_samples(self): next_value = iter(( virt_inspector.MemoryUsageStats(usage=1.0), virt_inspector.MemoryUsageStats(usage=2.0), )) def inspect_memory_usage(instance, duration): return six.next(next_value) self.inspector.inspect_memory_usage = \ mock.Mock(side_effect=inspect_memory_usage) mgr = manager.AgentManager() pollster = memory.MemoryUsagePollster() def _verify_memory_metering(expected_memory_mb): cache = {} samples = list(pollster.get_samples(mgr, cache, [self.instance])) self.assertEqual(1, len(samples)) self.assertEqual(set(['memory.usage']), set([s.name for s in samples])) self.assertEqual(expected_memory_mb, samples[0].volume) _verify_memory_metering(1.0) _verify_memory_metering(2.0) ceilometer-2014.1/ceilometer/tests/compute/pollsters/__init__.py0000664000175300017540000000000012323717130026161 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/compute/pollsters/base.py0000664000175300017540000000310012323717132025342 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 ceilometer.openstack.common import test class TestPollsterBase(test.BaseTestCase): def setUp(self): super(TestPollsterBase, self).setUp() self.addCleanup(mock.patch.stopall) self.inspector = mock.Mock() self.instance = mock.MagicMock() self.instance.name = 'instance-00000001' setattr(self.instance, 'OS-EXT-SRV-ATTR:instance_name', self.instance.name) self.instance.id = 1 self.instance.flavor = {'name': 'm1.small', 'id': 2, 'vcpus': 1, 'ram': 512, 'disk': 20, 'ephemeral': 0} patch_virt = mock.patch('ceilometer.compute.virt.inspector' '.get_hypervisor_inspector', mock.Mock(return_value=self.inspector)) patch_virt.start() ceilometer-2014.1/ceilometer/tests/compute/pollsters/test_diskio.py0000664000175300017540000001122012323717132026753 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 ceilometer.compute import manager from ceilometer.compute.pollsters import disk from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.tests.compute.pollsters import base class TestDiskPollsters(base.TestPollsterBase): DISKS = [ (virt_inspector.Disk(device='vda'), virt_inspector.DiskStats(read_bytes=1L, read_requests=2L, write_bytes=3L, write_requests=4L, errors=-1L)) ] def setUp(self): super(TestDiskPollsters, self).setUp() self.inspector.inspect_disks = mock.Mock(return_value=self.DISKS) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, name, expected_volume): pollster = factory() mgr = manager.AgentManager() cache = {} samples = list(pollster.get_samples(mgr, cache, [self.instance])) assert samples self.assertIn(pollster.CACHE_KEY_DISK, cache) self.assertIn(self.instance.name, cache[pollster.CACHE_KEY_DISK]) self.assertEqual(set([name]), set([s.name for s in samples])) match = [s for s in samples if s.name == name] self.assertEqual(len(match), 1, 'missing counter %s' % name) self.assertEqual(expected_volume, match[0].volume) self.assertEqual('cumulative', match[0].type) def test_disk_read_requests(self): self._check_get_samples(disk.ReadRequestsPollster, 'disk.read.requests', 2L) def test_disk_read_bytes(self): self._check_get_samples(disk.ReadBytesPollster, 'disk.read.bytes', 1L) def test_disk_write_requests(self): self._check_get_samples(disk.WriteRequestsPollster, 'disk.write.requests', 4L) def test_disk_write_bytes(self): self._check_get_samples(disk.WriteBytesPollster, 'disk.write.bytes', 3L) class TestDiskRatePollsters(base.TestPollsterBase): DISKS = [ (virt_inspector.Disk(device='disk1'), virt_inspector.DiskRateStats(1024, 300, 5120, 700)), (virt_inspector.Disk(device='disk2'), virt_inspector.DiskRateStats(2048, 400, 6144, 800)) ] def setUp(self): super(TestDiskRatePollsters, self).setUp() self.inspector.inspect_disk_rates = \ mock.Mock(return_value=self.DISKS) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, sample_name, expected_volume): pollster = factory() mgr = manager.AgentManager() cache = {} samples = list(pollster.get_samples(mgr, cache, [self.instance])) assert samples self.assertIsNotNone(samples) self.assertIn(pollster.CACHE_KEY_DISK_RATE, cache) self.assertIn(self.instance.id, cache[pollster.CACHE_KEY_DISK_RATE]) self.assertEqual(set([sample_name]), set([s.name for s in samples])) match = [s for s in samples if s.name == sample_name] self.assertEqual(1, len(match), 'missing counter %s' % sample_name) self.assertEqual(expected_volume, match[0].volume) self.assertEqual('gauge', match[0].type) def test_disk_read_bytes_rate(self): self._check_get_samples(disk.ReadBytesRatePollster, 'disk.read.bytes.rate', 3072L) def test_disk_read_requests_rate(self): self._check_get_samples(disk.ReadRequestsRatePollster, 'disk.read.requests.rate', 700L) def test_disk_write_bytes_rate(self): self._check_get_samples(disk.WriteBytesRatePollster, 'disk.write.bytes.rate', 11264L) def test_disk_write_requests_rate(self): self._check_get_samples(disk.WriteRequestsRatePollster, 'disk.write.requests.rate', 1500L) ceilometer-2014.1/ceilometer/tests/api/0000775000175300017540000000000012323717426021140 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/api/v2/0000775000175300017540000000000012323717426021467 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/api/v2/test_capabilities.py0000664000175300017540000000234712323717130025527 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright Ericsson AB 2014. All rights reserved # # Authors: Ildiko Vancsa # # 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 testscenarios from ceilometer.tests.api import v2 as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestCapabilitiesController(tests_api.FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestCapabilitiesController, self).setUp() self.url = '/capabilities' def test_capabilities(self): data = self.get_json(self.url) self.assertIsNotNone(data) self.assertNotEqual({}, data) ceilometer-2014.1/ceilometer/tests/api/v2/test_complex_query_scenarios.py0000664000175300017540000005760212323717132030046 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright Ericsson AB 2013. All rights reserved # # Authors: Ildiko Vancsa # Balazs Gibizer # # 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. """Tests complex queries for samples """ import datetime import logging import testscenarios from ceilometer.openstack.common import timeutils from ceilometer.publisher import utils from ceilometer import sample from ceilometer.storage import models from ceilometer.tests.api import v2 as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) admin_header = {"X-Roles": "admin", "X-Project-Id": "project-id1"} non_admin_header = {"X-Roles": "Member", "X-Project-Id": "project-id1"} class TestQueryMetersController(tests_api.FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestQueryMetersController, self).setUp() self.url = '/query/samples' for cnt in [ sample.Sample('meter.test', 'cumulative', '', 1, 'user-id1', 'project-id1', 'resource-id1', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server1', 'tag': 'self.sample', 'size': 456, 'util': 0.25, 'is_public': True}, source='test_source'), sample.Sample('meter.test', 'cumulative', '', 2, 'user-id2', 'project-id2', 'resource-id2', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server2', 'tag': 'self.sample', 'size': 123, 'util': 0.75, 'is_public': True}, source='test_source'), sample.Sample('meter.test', 'cumulative', '', 3, 'user-id3', 'project-id3', 'resource-id3', timestamp=datetime.datetime(2012, 7, 2, 10, 42), resource_metadata={'display_name': 'test-server3', 'tag': 'self.sample', 'size': 789, 'util': 0.95, 'is_public': True}, source='test_source')]: msg = utils.meter_message_from_counter( cnt, self.CONF.publisher.metering_secret) self.conn.record_metering_data(msg) def test_query_fields_are_optional(self): data = self.post_json(self.url, params={}) self.assertEqual(3, len(data.json)) def test_query_with_isotime(self): date_time = datetime.datetime(2012, 7, 2, 10, 41) isotime = date_time.isoformat() data = self.post_json(self.url, params={"filter": '{">=": {"timestamp": "' + isotime + '"}}'}) self.assertEqual(2, len(data.json)) for sample in data.json: result_time = timeutils.parse_isotime(sample['timestamp']) result_time = result_time.replace(tzinfo=None) self.assertTrue(result_time >= date_time) def test_non_admin_tenant_sees_only_its_own_project(self): data = self.post_json(self.url, params={}, headers=non_admin_header) for sample in data.json: self.assertEqual("project-id1", sample['project_id']) def test_non_admin_tenant_cannot_query_others_project(self): data = self.post_json(self.url, params={"filter": '{"=": {"project_id": "project-id2"}}'}, expect_errors=True, headers=non_admin_header) self.assertEqual(401, data.status_int) self.assertIn("Not Authorized to access project project-id2", data.body) def test_non_admin_tenant_can_explicitly_filter_for_own_project(self): data = self.post_json(self.url, params={"filter": '{"=": {"project_id": "project-id1"}}'}, headers=non_admin_header) for sample in data.json: self.assertEqual("project-id1", sample['project_id']) def test_admin_tenant_sees_every_project(self): data = self.post_json(self.url, params={}, headers=admin_header) self.assertEqual(3, len(data.json)) for sample in data.json: self.assertIn(sample['project_id'], (["project-id1", "project-id2", "project-id3"])) def test_admin_tenant_sees_every_project_with_complex_filter(self): filter = ('{"OR": ' + '[{"=": {"project_id": "project-id1"}}, ' + '{"=": {"project_id": "project-id2"}}]}') data = self.post_json(self.url, params={"filter": filter}, headers=admin_header) self.assertEqual(2, len(data.json)) for sample in data.json: self.assertIn(sample['project_id'], (["project-id1", "project-id2"])) def test_admin_tenant_sees_every_project_with_in_filter(self): filter = ('{"In": ' + '{"project_id": ["project-id1", "project-id2"]}}') data = self.post_json(self.url, params={"filter": filter}, headers=admin_header) self.assertEqual(2, len(data.json)) for sample in data.json: self.assertIn(sample['project_id'], (["project-id1", "project-id2"])) def test_admin_tenant_can_query_any_project(self): data = self.post_json(self.url, params={"filter": '{"=": {"project_id": "project-id2"}}'}, headers=admin_header) self.assertEqual(1, len(data.json)) for sample in data.json: self.assertIn(sample['project_id'], set(["project-id2"])) def test_query_with_orderby(self): data = self.post_json(self.url, params={"orderby": '[{"project_id": "DESC"}]'}) self.assertEqual(3, len(data.json)) self.assertEqual(["project-id3", "project-id2", "project-id1"], [s["project_id"] for s in data.json]) def test_query_with_field_name_project(self): data = self.post_json(self.url, params={"filter": '{"=": {"project": "project-id2"}}'}) self.assertEqual(1, len(data.json)) for sample in data.json: self.assertIn(sample['project_id'], set(["project-id2"])) def test_query_with_field_name_resource(self): data = self.post_json(self.url, params={"filter": '{"=": {"resource": "resource-id2"}}'}) self.assertEqual(1, len(data.json)) for sample in data.json: self.assertIn(sample['resource_id'], set(["resource-id2"])) def test_query_with_field_name_user(self): data = self.post_json(self.url, params={"filter": '{"=": {"user": "user-id2"}}'}) self.assertEqual(1, len(data.json)) for sample in data.json: self.assertIn(sample['user_id'], set(["user-id2"])) def test_query_with_field_name_meter(self): data = self.post_json(self.url, params={"filter": '{"=": {"meter": "meter.test"}}'}) self.assertEqual(3, len(data.json)) for sample in data.json: self.assertIn(sample['meter'], set(["meter.test"])) def test_query_with_lower_and_upper_case_orderby(self): data = self.post_json(self.url, params={"orderby": '[{"project_id": "DeSc"}]'}) self.assertEqual(3, len(data.json)) self.assertEqual(["project-id3", "project-id2", "project-id1"], [s["project_id"] for s in data.json]) def test_query_with_user_field_name_orderby(self): data = self.post_json(self.url, params={"orderby": '[{"user": "aSc"}]'}) self.assertEqual(3, len(data.json)) self.assertEqual(["user-id1", "user-id2", "user-id3"], [s["user_id"] for s in data.json]) def test_query_with_volume_field_name_orderby(self): data = self.post_json(self.url, params={"orderby": '[{"volume": "deSc"}]'}) self.assertEqual(3, len(data.json)) self.assertEqual([3, 2, 1], [s["volume"] for s in data.json]) def test_query_with_missing_order_in_orderby(self): data = self.post_json(self.url, params={"orderby": '[{"project_id": ""}]'}, expect_errors=True) self.assertEqual(500, data.status_int) def test_filter_with_metadata(self): data = self.post_json(self.url, params={"filter": '{">=": {"metadata.util": 0.5}}'}) self.assertEqual(2, len(data.json)) for sample in data.json: self.assertTrue(sample["metadata"]["util"] >= 0.5) def test_filter_with_negation(self): filter_expr = '{"not": {">=": {"metadata.util": 0.5}}}' data = self.post_json(self.url, params={"filter": filter_expr}) self.assertEqual(1, len(data.json)) for sample in data.json: self.assertTrue(float(sample["metadata"]["util"]) < 0.5) def test_limit_should_be_positive(self): data = self.post_json(self.url, params={"limit": 0}, expect_errors=True) self.assertEqual(400, data.status_int) self.assertIn("Limit should be positive", data.body) class TestQueryAlarmsController(tests_api.FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestQueryAlarmsController, self).setUp() self.alarm_url = '/query/alarms' for state in ['ok', 'alarm', 'insufficient data']: for date in [datetime.datetime(2013, 1, 1), datetime.datetime(2013, 2, 2)]: for id in [1, 2]: alarm_id = "-".join([state, date.isoformat(), str(id)]) project_id = "project-id%d" % id alarm = models.Alarm(name=alarm_id, type='threshold', enabled=True, alarm_id=alarm_id, description='a', state=state, state_timestamp=date, timestamp=date, ok_actions=[], insufficient_data_actions=[], alarm_actions=[], repeat_actions=True, user_id="user-id%d" % id, project_id=project_id, time_constraints=[], rule=dict(comparison_operator='gt', threshold=2.0, statistic='avg', evaluation_periods=60, period=1, meter_name='meter.test', query=[{'field': 'project_id', 'op': 'eq', 'value': project_id}])) self.conn.update_alarm(alarm) def test_query_all(self): data = self.post_json(self.alarm_url, params={}) self.assertEqual(12, len(data.json)) def test_filter_with_isotime_timestamp(self): date_time = datetime.datetime(2013, 1, 1) isotime = date_time.isoformat() data = self.post_json(self.alarm_url, params={"filter": '{">": {"timestamp": "' + isotime + '"}}'}) self.assertEqual(6, len(data.json)) for alarm in data.json: result_time = timeutils.parse_isotime(alarm['timestamp']) result_time = result_time.replace(tzinfo=None) self.assertTrue(result_time > date_time) def test_filter_with_isotime_state_timestamp(self): date_time = datetime.datetime(2013, 1, 1) isotime = date_time.isoformat() data = self.post_json(self.alarm_url, params={"filter": '{">": {"state_timestamp": "' + isotime + '"}}'}) self.assertEqual(6, len(data.json)) for alarm in data.json: result_time = timeutils.parse_isotime(alarm['state_timestamp']) result_time = result_time.replace(tzinfo=None) self.assertTrue(result_time > date_time) def test_non_admin_tenant_sees_only_its_own_project(self): data = self.post_json(self.alarm_url, params={}, headers=non_admin_header) for alarm in data.json: self.assertEqual("project-id1", alarm['project_id']) def test_non_admin_tenant_cannot_query_others_project(self): data = self.post_json(self.alarm_url, params={"filter": '{"=": {"project_id": "project-id2"}}'}, expect_errors=True, headers=non_admin_header) self.assertEqual(401, data.status_int) self.assertIn("Not Authorized to access project project-id2", data.body) def test_non_admin_tenant_can_explicitly_filter_for_own_project(self): data = self.post_json(self.alarm_url, params={"filter": '{"=": {"project_id": "project-id1"}}'}, headers=non_admin_header) for alarm in data.json: self.assertEqual("project-id1", alarm['project_id']) def test_admin_tenant_sees_every_project(self): data = self.post_json(self.alarm_url, params={}, headers=admin_header) self.assertEqual(12, len(data.json)) for alarm in data.json: self.assertIn(alarm['project_id'], (["project-id1", "project-id2"])) def test_admin_tenant_can_query_any_project(self): data = self.post_json(self.alarm_url, params={"filter": '{"=": {"project_id": "project-id2"}}'}, headers=admin_header) self.assertEqual(6, len(data.json)) for alarm in data.json: self.assertIn(alarm['project_id'], set(["project-id2"])) def test_query_with_field_project(self): data = self.post_json(self.alarm_url, params={"filter": '{"=": {"project": "project-id2"}}'}) self.assertEqual(6, len(data.json)) for sample in data.json: self.assertIn(sample['project_id'], set(["project-id2"])) def test_query_with_field_user_in_orderby(self): data = self.post_json(self.alarm_url, params={"filter": '{"=": {"state": "alarm"}}', "orderby": '[{"user": "DESC"}]'}) self.assertEqual(4, len(data.json)) self.assertEqual(["user-id2", "user-id2", "user-id1", "user-id1"], [s["user_id"] for s in data.json]) def test_query_with_filter_orderby_and_limit(self): orderby = '[{"state_timestamp": "DESC"}]' data = self.post_json(self.alarm_url, params={"filter": '{"=": {"state": "alarm"}}', "orderby": orderby, "limit": 3}) self.assertEqual(3, len(data.json)) self.assertEqual(["2013-02-02T00:00:00", "2013-02-02T00:00:00", "2013-01-01T00:00:00"], [a["state_timestamp"] for a in data.json]) for alarm in data.json: self.assertEqual("alarm", alarm["state"]) def test_limit_should_be_positive(self): data = self.post_json(self.alarm_url, params={"limit": 0}, expect_errors=True) self.assertEqual(400, data.status_int) self.assertIn("Limit should be positive", data.body) class TestQueryAlarmsHistoryController( tests_api.FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestQueryAlarmsHistoryController, self).setUp() self.url = '/query/alarms/history' for id in [1, 2]: for type in ["creation", "state transition"]: for date in [datetime.datetime(2013, 1, 1), datetime.datetime(2013, 2, 2)]: event_id = "-".join([str(id), type, date.isoformat()]) alarm_change = {"event_id": event_id, "alarm_id": "alarm-id%d" % id, "type": type, "detail": "", "user_id": "user-id%d" % id, "project_id": "project-id%d" % id, "on_behalf_of": "project-id%d" % id, "timestamp": date} self.conn.record_alarm_change(alarm_change) def test_query_all(self): data = self.post_json(self.url, params={}) self.assertEqual(8, len(data.json)) def test_filter_with_isotime(self): date_time = datetime.datetime(2013, 1, 1) isotime = date_time.isoformat() data = self.post_json(self.url, params={"filter": '{">": {"timestamp":"' + isotime + '"}}'}) self.assertEqual(4, len(data.json)) for history in data.json: result_time = timeutils.parse_isotime(history['timestamp']) result_time = result_time.replace(tzinfo=None) self.assertTrue(result_time > date_time) def test_non_admin_tenant_sees_only_its_own_project(self): data = self.post_json(self.url, params={}, headers=non_admin_header) for history in data.json: self.assertEqual("project-id1", history['on_behalf_of']) def test_non_admin_tenant_cannot_query_others_project(self): data = self.post_json(self.url, params={"filter": '{"=": {"on_behalf_of":' + ' "project-id2"}}'}, expect_errors=True, headers=non_admin_header) self.assertEqual(401, data.status_int) self.assertIn("Not Authorized to access project project-id2", data.body) def test_non_admin_tenant_can_explicitly_filter_for_own_project(self): data = self.post_json(self.url, params={"filter": '{"=": {"on_behalf_of":' + ' "project-id1"}}'}, headers=non_admin_header) for history in data.json: self.assertEqual("project-id1", history['on_behalf_of']) def test_admin_tenant_sees_every_project(self): data = self.post_json(self.url, params={}, headers=admin_header) self.assertEqual(8, len(data.json)) for history in data.json: self.assertIn(history['on_behalf_of'], (["project-id1", "project-id2"])) def test_query_with_filter_for_project_orderby_with_user(self): data = self.post_json(self.url, params={"filter": '{"=": {"project": "project-id1"}}', "orderby": '[{"user": "DESC"}]', "limit": 3}) self.assertEqual(3, len(data.json)) self.assertEqual(["user-id1", "user-id1", "user-id1"], [h["user_id"] for h in data.json]) for history in data.json: self.assertEqual("project-id1", history['project_id']) def test_query_with_filter_orderby_and_limit(self): data = self.post_json(self.url, params={"filter": '{"=": {"type": "creation"}}', "orderby": '[{"timestamp": "DESC"}]', "limit": 3}) self.assertEqual(3, len(data.json)) self.assertEqual(["2013-02-02T00:00:00", "2013-02-02T00:00:00", "2013-01-01T00:00:00"], [h["timestamp"] for h in data.json]) for history in data.json: self.assertEqual("creation", history['type']) def test_limit_should_be_positive(self): data = self.post_json(self.url, params={"limit": 0}, expect_errors=True) self.assertEqual(400, data.status_int) self.assertIn("Limit should be positive", data.body) ceilometer-2014.1/ceilometer/tests/api/v2/test_app.py0000664000175300017540000002467412323717132023667 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright 2013 IBM Corp. # Copyright © 2013 Julien Danjou # # Author: Julien Danjou # # 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. """Test basic ceilometer-api app """ import json import os import mock import wsme from ceilometer.api import acl from ceilometer.api import app from ceilometer.openstack.common import fileutils from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import gettextutils from ceilometer import service from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import base from ceilometer.tests import db as tests_db class TestApp(base.BaseTestCase): def setUp(self): super(TestApp, self).setUp() self.CONF = self.useFixture(config.Config()).conf def test_keystone_middleware_conf(self): self.CONF.set_override("auth_protocol", "foottp", group=acl.OPT_GROUP_NAME) self.CONF.set_override("auth_version", "v2.0", group=acl.OPT_GROUP_NAME) self.CONF.set_override("pipeline_cfg_file", self.path_get("etc/ceilometer/pipeline.yaml")) self.CONF.set_override('connection', "log://", group="database") self.CONF.set_override("auth_uri", None, group=acl.OPT_GROUP_NAME) api_app = app.setup_app() self.assertTrue(api_app.auth_uri.startswith('foottp')) def test_keystone_middleware_parse_conffile(self): pipeline_conf = self.path_get("etc/ceilometer/pipeline.yaml") content = "[DEFAULT]\n"\ "pipeline_cfg_file = {0}\n"\ "[{1}]\n"\ "auth_protocol = barttp\n"\ "auth_version = v2.0\n".format(pipeline_conf, acl.OPT_GROUP_NAME) tmpfile = fileutils.write_to_tempfile(content=content, prefix='ceilometer', suffix='.conf') service.prepare_service(['ceilometer-api', '--config-file=%s' % tmpfile]) self.CONF.set_override('connection', "log://", group="database") api_app = app.setup_app() self.assertTrue(api_app.auth_uri.startswith('barttp')) os.unlink(tmpfile) class TestPecanApp(FunctionalTest): database_connection = tests_db.MongoDBFakeConnectionUrl() def test_pecan_extension_guessing_unset(self): # check Pecan does not assume .jpg is an extension response = self.app.get(self.PATH_PREFIX + '/meters/meter.jpg') self.assertEqual('application/json', response.content_type) class TestApiMiddleware(FunctionalTest): # This doesn't really matter database_connection = tests_db.MongoDBFakeConnectionUrl() no_lang_translated_error = 'No lang translated error' en_US_translated_error = 'en-US translated error' def _fake_translate(self, message, user_locale): if user_locale is None: return self.no_lang_translated_error else: return self.en_US_translated_error def test_json_parsable_error_middleware_404(self): response = self.get_json('/invalid_path', expect_errors=True, headers={"Accept": "application/json"} ) self.assertEqual(404, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json['error_message']) response = self.get_json('/invalid_path', expect_errors=True, headers={"Accept": "application/json,application/xml"} ) self.assertEqual(404, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json['error_message']) response = self.get_json('/invalid_path', expect_errors=True, headers={"Accept": "application/xml;q=0.8, \ application/json"} ) self.assertEqual(404, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json['error_message']) response = self.get_json('/invalid_path', expect_errors=True ) self.assertEqual(404, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json['error_message']) response = self.get_json('/invalid_path', expect_errors=True, headers={"Accept": "text/html,*/*"} ) self.assertEqual(404, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json['error_message']) def test_json_parsable_error_middleware_translation_400(self): # Ensure translated messages get placed properly into json faults with mock.patch.object(gettextutils, 'translate', side_effect=self._fake_translate): response = self.post_json('/alarms', params={'name': 'foobar', 'type': 'threshold'}, expect_errors=True, headers={"Accept": "application/json"} ) self.assertEqual(400, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json['error_message']) self.assertEqual(self.no_lang_translated_error, response.json['error_message']['faultstring']) def test_xml_parsable_error_middleware_404(self): response = self.get_json('/invalid_path', expect_errors=True, headers={"Accept": "application/xml,*/*"} ) self.assertEqual(404, response.status_int) self.assertEqual("application/xml", response.content_type) self.assertEqual('error_message', response.xml.tag) response = self.get_json('/invalid_path', expect_errors=True, headers={"Accept": "application/json;q=0.8 \ ,application/xml"} ) self.assertEqual(404, response.status_int) self.assertEqual("application/xml", response.content_type) self.assertEqual('error_message', response.xml.tag) def test_xml_parsable_error_middleware_translation_400(self): # Ensure translated messages get placed properly into xml faults with mock.patch.object(gettextutils, 'translate', side_effect=self._fake_translate): response = self.post_json('/alarms', params={'name': 'foobar', 'type': 'threshold'}, expect_errors=True, headers={"Accept": "application/xml,*/*"} ) self.assertEqual(400, response.status_int) self.assertEqual("application/xml", response.content_type) self.assertEqual('error_message', response.xml.tag) fault = response.xml.findall('./error/faultstring') for fault_string in fault: self.assertEqual(self.no_lang_translated_error, fault_string.text) def test_best_match_language(self): # Ensure that we are actually invoking language negotiation with mock.patch.object(gettextutils, 'translate', side_effect=self._fake_translate): response = self.post_json('/alarms', params={'name': 'foobar', 'type': 'threshold'}, expect_errors=True, headers={"Accept": "application/xml,*/*", "Accept-Language": "en-US"} ) self.assertEqual(400, response.status_int) self.assertEqual("application/xml", response.content_type) self.assertEqual('error_message', response.xml.tag) fault = response.xml.findall('./error/faultstring') for fault_string in fault: self.assertEqual(self.en_US_translated_error, fault_string.text) def test_translated_then_untranslated_error(self): resp = self.get_json('/alarms/alarm-id-3', expect_errors=True) self.assertEqual(404, resp.status_code) self.assertEqual("Alarm alarm-id-3 Not Found", json.loads(resp.body)['error_message'] ['faultstring']) with mock.patch('ceilometer.api.controllers.v2.EntityNotFound') \ as CustomErrorClass: CustomErrorClass.return_value = wsme.exc.ClientSideError( "untranslated_error", status_code=404) resp = self.get_json('/alarms/alarm-id-5', expect_errors=True) self.assertEqual(404, resp.status_code) self.assertEqual("untranslated_error", json.loads(resp.body)['error_message'] ['faultstring']) ceilometer-2014.1/ceilometer/tests/api/v2/test_wsme_custom_type.py0000664000175300017540000000225612323717130026503 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Mehdi Abaakouk # # 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 wsme from ceilometer.api.controllers import v2 from ceilometer.openstack.common import test class TestWsmeCustomType(test.BaseTestCase): def test_advenum_default(self): class dummybase(wsme.types.Base): ae = v2.AdvEnum("name", str, "one", "other", default="other") obj = dummybase() self.assertEqual("other", obj.ae) obj = dummybase(ae="one") self.assertEqual("one", obj.ae) self.assertRaises(ValueError, dummybase, ae="not exists") ceilometer-2014.1/ceilometer/tests/api/v2/test_list_events_scenarios.py0000664000175300017540000001425012323717132027501 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Test listing raw events. """ import datetime import logging import testscenarios import webtest.app from ceilometer.openstack.common import timeutils from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEvents(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListEvents, self).setUp() timeutils.utcnow.override_time = datetime.datetime(2014, 2, 11, 16, 42) self.sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', 'dict_properties': {'key': 'value'}, 'not_ignored_list': ['returned'], }, source='test_source', ) msg = utils.meter_message_from_counter( self.sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) self.sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project2', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='source2', ) msg2 = utils.meter_message_from_counter( self.sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) def test_all(self): data = self.get_json('/meters/instance') self.assertEqual(2, len(data)) for s in data: self.assertEqual(timeutils.utcnow.override_time.isoformat(), s['recorded_at']) def test_all_trailing_slash(self): data = self.get_json('/meters/instance/') self.assertEqual(2, len(data)) def test_all_limit(self): data = self.get_json('/meters/instance?limit=1') self.assertEqual(1, len(data)) def test_all_limit_negative(self): self.assertRaises(webtest.app.AppError, self.get_json, '/meters/instance?limit=-2') def test_all_limit_bigger(self): data = self.get_json('/meters/instance?limit=42') self.assertEqual(2, len(data)) def test_empty_project(self): data = self.get_json('/meters/instance', q=[{'field': 'project_id', 'value': 'no-such-project', }]) self.assertEqual([], data) def test_by_project(self): data = self.get_json('/meters/instance', q=[{'field': 'project_id', 'value': 'project1', }]) self.assertEqual(1, len(data)) def test_empty_resource(self): data = self.get_json('/meters/instance', q=[{'field': 'resource_id', 'value': 'no-such-resource', }]) self.assertEqual([], data) def test_by_resource(self): data = self.get_json('/meters/instance', q=[{'field': 'resource_id', 'value': 'resource-id', }]) self.assertEqual(1, len(data)) def test_empty_source(self): data = self.get_json('/meters/instance', q=[{'field': 'source', 'value': 'no-such-source', }]) self.assertEqual(0, len(data)) def test_by_source(self): data = self.get_json('/meters/instance', q=[{'field': 'source', 'value': 'test_source', }]) self.assertEqual(1, len(data)) def test_empty_user(self): data = self.get_json('/meters/instance', q=[{'field': 'user_id', 'value': 'no-such-user', }]) self.assertEqual([], data) def test_by_user(self): data = self.get_json('/meters/instance', q=[{'field': 'user_id', 'value': 'user-id', }]) self.assertEqual(1, len(data)) def test_metadata(self): data = self.get_json('/meters/instance', q=[{'field': 'resource_id', 'value': 'resource-id', }]) sample = data[0] self.assertIn('resource_metadata', sample) self.assertEqual( [('dict_properties.key', 'value'), ('display_name', 'test-server'), ('not_ignored_list', "['returned']"), ('tag', 'self.sample'), ], list(sorted(sample['resource_metadata'].iteritems()))) ceilometer-2014.1/ceilometer/tests/api/v2/test_query.py0000664000175300017540000003144012323717130024237 0ustar jenkinsjenkins00000000000000# Copyright 2013 OpenStack Foundation. # All Rights Reserved. # Copyright 2013 IBM Corp. # # 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. """Test the methods related to query.""" import datetime import fixtures import mock import wsme from ceilometer.api.controllers import v2 as api from ceilometer.openstack.common.fixture.mockpatch import PatchObject from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils from ceilometer import storage from ceilometer.tests import base as tests_base class TestQuery(test.BaseTestCase): def setUp(self): super(TestQuery, self).setUp() self.useFixture(fixtures.MonkeyPatch( 'pecan.response', mock.MagicMock())) def test_get_value_as_type_with_integer(self): query = api.Query(field='metadata.size', op='eq', value='123', type='integer') expected = 123 self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_float(self): query = api.Query(field='metadata.size', op='eq', value='123.456', type='float') expected = 123.456 self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_boolean(self): query = api.Query(field='metadata.is_public', op='eq', value='True', type='boolean') expected = True self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_string(self): query = api.Query(field='metadata.name', op='eq', value='linux', type='string') expected = 'linux' self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_integer_without_type(self): query = api.Query(field='metadata.size', op='eq', value='123') expected = 123 self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_float_without_type(self): query = api.Query(field='metadata.size', op='eq', value='123.456') expected = 123.456 self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_boolean_without_type(self): query = api.Query(field='metadata.is_public', op='eq', value='True') expected = True self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_string_without_type(self): query = api.Query(field='metadata.name', op='eq', value='linux') expected = 'linux' self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_bad_type(self): query = api.Query(field='metadata.size', op='eq', value='123.456', type='blob') self.assertRaises(wsme.exc.ClientSideError, query._get_value_as_type) def test_get_value_as_type_with_bad_value(self): query = api.Query(field='metadata.size', op='eq', value='fake', type='integer') self.assertRaises(wsme.exc.ClientSideError, query._get_value_as_type) def test_get_value_as_type_integer_expression_without_type(self): # bug 1221736 query = api.Query(field='should_be_a_string', op='eq', value='123-1') expected = '123-1' self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_boolean_expression_without_type(self): # bug 1221736 query = api.Query(field='should_be_a_string', op='eq', value='True or False') expected = 'True or False' self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_syntax_error(self): # bug 1221736 value = 'WWW-Layer-4a80714f-0232-4580-aa5e-81494d1a4147-uolhh25p5xxm' query = api.Query(field='group_id', op='eq', value=value) expected = value self.assertEqual(expected, query._get_value_as_type()) def test_get_value_as_type_with_syntax_error_colons(self): # bug 1221736 value = 'Ref::StackId' query = api.Query(field='field_name', op='eq', value=value) expected = value self.assertEqual(expected, query._get_value_as_type()) class TestValidateGroupByFields(test.BaseTestCase): def test_valid_field(self): result = api._validate_groupby_fields(['user_id']) self.assertEqual(['user_id'], result) def test_valid_fields_multiple(self): result = set( api._validate_groupby_fields(['user_id', 'project_id', 'source']) ) self.assertEqual(set(['user_id', 'project_id', 'source']), result) def test_invalid_field(self): self.assertRaises(wsme.exc.UnknownArgument, api._validate_groupby_fields, ['wtf']) def test_invalid_field_multiple(self): self.assertRaises(wsme.exc.UnknownArgument, api._validate_groupby_fields, ['user_id', 'wtf', 'project_id', 'source']) def test_duplicate_fields(self): result = set( api._validate_groupby_fields(['user_id', 'source', 'user_id']) ) self.assertEqual(set(['user_id', 'source']), result) class TestQueryToKwArgs(tests_base.BaseTestCase): def setUp(self): super(TestQueryToKwArgs, self).setUp() self.useFixture(PatchObject(api, '_sanitize_query', side_effect=lambda x, y, **z: x)) self.useFixture(PatchObject(api, '_verify_query_segregation', side_effect=lambda x, **z: x)) def test_sample_filter_single(self): q = [api.Query(field='user_id', op='eq', value='uid')] kwargs = api._query_to_kwargs(q, storage.SampleFilter.__init__) self.assertIn('user', kwargs) self.assertEqual(1, len(kwargs)) self.assertEqual('uid', kwargs['user']) def test_sample_filter_multi(self): q = [api.Query(field='user_id', op='eq', value='uid'), api.Query(field='project_id', op='eq', value='pid'), api.Query(field='resource_id', op='eq', value='rid'), api.Query(field='source', op='eq', value='source_name'), api.Query(field='meter', op='eq', value='meter_name')] kwargs = api._query_to_kwargs(q, storage.SampleFilter.__init__) self.assertEqual(5, len(kwargs)) self.assertEqual('uid', kwargs['user']) self.assertEqual('pid', kwargs['project']) self.assertEqual('rid', kwargs['resource']) self.assertEqual('source_name', kwargs['source']) self.assertEqual('meter_name', kwargs['meter']) def test_sample_filter_timestamp(self): ts_start = timeutils.utcnow() ts_end = ts_start + datetime.timedelta(minutes=5) q = [api.Query(field='timestamp', op='lt', value=str(ts_end)), api.Query(field='timestamp', op='gt', value=str(ts_start))] kwargs = api._query_to_kwargs(q, storage.SampleFilter.__init__) self.assertEqual(4, len(kwargs)) self.assertTimestampEqual(kwargs['start'], ts_start) self.assertTimestampEqual(kwargs['end'], ts_end) self.assertEqual('gt', kwargs['start_timestamp_op']) self.assertEqual('lt', kwargs['end_timestamp_op']) def test_sample_filter_meta(self): q = [api.Query(field='metadata.size', op='eq', value='20'), api.Query(field='resource_metadata.id', op='eq', value='meta_id')] kwargs = api._query_to_kwargs(q, storage.SampleFilter.__init__) self.assertEqual(1, len(kwargs)) self.assertEqual(2, len(kwargs['metaquery'])) self.assertEqual(20, kwargs['metaquery']['metadata.size']) self.assertEqual('meta_id', kwargs['metaquery']['metadata.id']) def test_sample_filter_non_equality_on_metadata(self): queries = [api.Query(field='resource_metadata.image_id', op='gt', value='image', type='string'), api.Query(field='metadata.ramdisk_id', op='le', value='ramdisk', type='string')] with mock.patch('pecan.request') as request: request.headers.return_value = {'X-ProjectId': 'foobar'} self.assertRaises( wsme.exc.InvalidInput, api._query_to_kwargs, queries, storage.SampleFilter.__init__) def test_sample_filter_invalid_field(self): q = [api.Query(field='invalid', op='eq', value='20')] self.assertRaises( wsme.exc.UnknownArgument, api._query_to_kwargs, q, storage.SampleFilter.__init__) def test_sample_filter_invalid_op(self): q = [api.Query(field='user_id', op='lt', value='20')] self.assertRaises( wsme.exc.InvalidInput, api._query_to_kwargs, q, storage.SampleFilter.__init__) def test_sample_filter_timestamp_invalid_op(self): ts_start = timeutils.utcnow() q = [api.Query(field='timestamp', op='eq', value=str(ts_start))] self.assertRaises( wsme.exc.InvalidInput, api._query_to_kwargs, q, storage.SampleFilter.__init__) def test_sample_filter_exclude_internal(self): queries = [api.Query(field=f, op='eq', value='fake', type='string') for f in ['y', 'on_behalf_of', 'x']] with mock.patch('pecan.request') as request: request.headers.return_value = {'X-ProjectId': 'foobar'} self.assertRaises(wsme.exc.ClientSideError, api._query_to_kwargs, queries, storage.SampleFilter.__init__, internal_keys=['on_behalf_of']) def test_sample_filter_self_always_excluded(self): queries = [api.Query(field='user_id', op='eq', value='20')] with mock.patch('pecan.request') as request: request.headers.return_value = {'X-ProjectId': 'foobar'} kwargs = api._query_to_kwargs(queries, storage.SampleFilter.__init__) self.assertFalse('self' in kwargs) def test_sample_filter_translation(self): queries = [api.Query(field=f, op='eq', value='fake_%s' % f, type='string') for f in ['user_id', 'project_id', 'resource_id']] with mock.patch('pecan.request') as request: request.headers.return_value = {'X-ProjectId': 'foobar'} kwargs = api._query_to_kwargs(queries, storage.SampleFilter.__init__) for o in ['user', 'project', 'resource']: self.assertEqual('fake_%s_id' % o, kwargs.get(o)) ceilometer-2014.1/ceilometer/tests/api/v2/test_post_samples_scenarios.py0000664000175300017540000003634112323717132027660 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Red Hat, Inc # # Author: Angus Salkeld # # 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. """Test listing raw events. """ import copy import datetime import testscenarios from ceilometer.openstack.common.fixture.mockpatch import PatchObject from ceilometer.openstack.common import rpc from ceilometer.openstack.common import timeutils from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestPostSamples(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def fake_cast(self, context, topic, msg): for s in msg['args']['data']: del s['message_signature'] self.published.append((topic, msg)) def setUp(self): super(TestPostSamples, self).setUp() self.published = [] self.useFixture(PatchObject(rpc, 'cast', side_effect=self.fake_cast)) def test_one(self): s1 = [{'counter_name': 'apples', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] data = self.post_json('/meters/apples/', s1) # timestamp not given so it is generated. s1[0]['timestamp'] = data.json[0]['timestamp'] # Ignore message id that is randomly generated s1[0]['message_id'] = data.json[0]['message_id'] # source is generated if not provided. s1[0]['source'] = '%s:openstack' % s1[0]['project_id'] self.assertEqual(s1, data.json) self.assertEqual(s1[0], self.published[0][1]['args']['data'][0]) def test_nested_metadata(self): s1 = [{'counter_name': 'apples', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'nest.name1': 'value1', 'name2': 'value2', 'nest.name2': 'value3'}}] data = self.post_json('/meters/apples/', s1) # timestamp not given so it is generated. s1[0]['timestamp'] = data.json[0]['timestamp'] # Ignore message id that is randomly generated s1[0]['message_id'] = data.json[0]['message_id'] # source is generated if not provided. s1[0]['source'] = '%s:openstack' % s1[0]['project_id'] unwound = copy.copy(s1[0]) unwound['resource_metadata'] = {'nest': {'name1': 'value1', 'name2': 'value3'}, 'name2': 'value2'} # only the published sample should be unwound, not the representation # in the API response self.assertEqual(s1[0], data.json[0]) self.assertEqual(unwound, self.published[0][1]['args']['data'][0]) def test_invalid_counter_type(self): s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'INVALID_TYPE', 'counter_unit': 'instance', 'counter_volume': 1, 'source': 'closedstack', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] data = self.post_json('/meters/my_counter_name/', s1, expect_errors=True) self.assertEqual(400, data.status_int) self.assertEqual(0, len(self.published)) def test_messsage_id_provided(self): """Do not accept sample with message_id.""" s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'message_id': 'evil', 'source': 'closedstack', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] data = self.post_json('/meters/my_counter_name/', s1, expect_errors=True) self.assertEqual(400, data.status_int) self.assertEqual(0, len(self.published)) def test_wrong_project_id(self): """Do not accept cross posting samples to different projects.""" s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'source': 'closedstack', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] data = self.post_json('/meters/my_counter_name/', s1, expect_errors=True, headers={ "X-Roles": "Member", "X-Tenant-Name": "lu-tenant", "X-Project-Id": "bc23a9d531064583ace8f67dad60f6bb", }) self.assertEqual(400, data.status_int) self.assertEqual(0, len(self.published)) def test_multiple_samples(self): """Send multiple samples. The usecase here is to reduce the chatter and send the counters at a slower cadence. """ samples = [] for x in range(6): dt = datetime.datetime(2012, 8, 27, x, 0, tzinfo=None) s = {'counter_name': 'apples', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': float(x * 3), 'source': 'evil', 'timestamp': dt.isoformat(), 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'name1': str(x), 'name2': str(x + 4)}} samples.append(s) data = self.post_json('/meters/apples/', samples) for x, s in enumerate(samples): # source is modified to include the project_id. s['source'] = '%s:%s' % (s['project_id'], s['source']) # Ignore message id that is randomly generated s['message_id'] = data.json[x]['message_id'] # remove tzinfo to compare generated timestamp # with the provided one c = data.json[x] timestamp = timeutils.parse_isotime(c['timestamp']) c['timestamp'] = timestamp.replace(tzinfo=None).isoformat() # do the same on the pipeline msg = self.published[0][1]['args']['data'][x] timestamp = timeutils.parse_isotime(msg['timestamp']) msg['timestamp'] = timestamp.replace(tzinfo=None).isoformat() self.assertEqual(s, c) self.assertEqual(s, self.published[0][1]['args']['data'][x]) def test_missing_mandatory_fields(self): """Do not accept posting samples with missing mandatory fields.""" s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'source': 'closedstack', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] # one by one try posting without a mandatory field. for m in ['counter_volume', 'counter_unit', 'counter_type', 'resource_id', 'counter_name']: s_broke = copy.copy(s1) del s_broke[0][m] print('posting without %s' % m) data = self.post_json('/meters/my_counter_name', s_broke, expect_errors=True) self.assertEqual(400, data.status_int) def test_multiple_project_id_and_admin(self): """Allow admin is allowed to set multiple project_id.""" s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'source': 'closedstack', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', }, {'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 2, 'source': 'closedstack', 'project_id': '4af38dca-f6fc-11e2-94f5-14dae9283f29', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] data = self.post_json('/meters/my_counter_name/', s1, headers={"X-Roles": "admin"}) self.assertEqual(200, data.status_int) for x, s in enumerate(s1): # source is modified to include the project_id. s['source'] = '%s:%s' % (s['project_id'], 'closedstack') # Ignore message id that is randomly generated s['message_id'] = data.json[x]['message_id'] # timestamp not given so it is generated. s['timestamp'] = data.json[x]['timestamp'] s.setdefault('resource_metadata', dict()) self.assertEqual(s, data.json[x]) self.assertEqual(s, self.published[0][1]['args']['data'][x]) def test_multiple_samples_multiple_sources(self): """Do accept a single post with some multiples sources with some of them null """ s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'source': 'paperstack', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', }, {'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 5, 'source': 'waterstack', 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', }, {'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 2, 'project_id': '35b17138-b364-4e6a-a131-8f3099c5be68', 'user_id': 'efd87807-12d2-4b38-9c70-5f5c2ac427ff', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] data = self.post_json('/meters/my_counter_name/', s1, expect_errors=True) self.assertEqual(200, data.status_int) for x, s in enumerate(s1): # source is modified to include the project_id. s['source'] = '%s:%s' % ( s['project_id'], s.get('source', self.CONF.sample_source) ) # Ignore message id that is randomly generated s['message_id'] = data.json[x]['message_id'] # timestamp not given so it is generated. s['timestamp'] = data.json[x]['timestamp'] s.setdefault('resource_metadata', dict()) self.assertEqual(s, data.json[x]) self.assertEqual(s, self.published[0][1]['args']['data'][x]) def test_missing_project_user_id(self): """Ensure missing project & user IDs are defaulted appropriately. """ s1 = [{'counter_name': 'my_counter_name', 'counter_type': 'gauge', 'counter_unit': 'instance', 'counter_volume': 1, 'source': 'closedstack', 'resource_id': 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', 'resource_metadata': {'name1': 'value1', 'name2': 'value2'}}] project_id = 'bc23a9d531064583ace8f67dad60f6bb' user_id = 'fd87807-12d2-4b38-9c70-5f5c2ac427ff' data = self.post_json('/meters/my_counter_name/', s1, expect_errors=True, headers={ 'X-Roles': 'chief-bottle-washer', 'X-Project-Id': project_id, 'X-User-Id': user_id, }) self.assertEqual(200, data.status_int) for x, s in enumerate(s1): # source is modified to include the project_id. s['source'] = '%s:%s' % (project_id, s['source']) # Ignore message id that is randomly generated s['message_id'] = data.json[x]['message_id'] # timestamp not given so it is generated. s['timestamp'] = data.json[x]['timestamp'] s['user_id'] = user_id s['project_id'] = project_id self.assertEqual(s, data.json[x]) self.assertEqual(s, self.published[0][1]['args']['data'][x]) ceilometer-2014.1/ceilometer/tests/api/v2/test_event_scenarios.py0000664000175300017540000002245612323717132026272 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright 2013 Hewlett-Packard Development Company, L.P. # # 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. """Test event, event_type and trait retrieval.""" import datetime import testscenarios from ceilometer.openstack.common import timeutils from ceilometer.storage import models from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios headers = {"X-Roles": "admin"} class EventTestBase(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(EventTestBase, self).setUp() self._generate_models() def _generate_models(self): event_models = [] base = 0 self.trait_time = datetime.datetime(2013, 12, 31, 5, 0) for event_type in ['Foo', 'Bar', 'Zoo']: trait_models = \ [models.Trait(name, type, value) for name, type, value in [ ('trait_A', models.Trait.TEXT_TYPE, "my_%s_text" % event_type), ('trait_B', models.Trait.INT_TYPE, base + 1), ('trait_C', models.Trait.FLOAT_TYPE, float(base) + 0.123456), ('trait_D', models.Trait.DATETIME_TYPE, self.trait_time)]] # Message ID for test will be 'base'. So, message ID for the first # event will be '0', the second '100', and so on. event_models.append( models.Event(message_id=str(base), event_type=event_type, generated=self.trait_time, traits=trait_models)) base += 100 self.conn.record_events(event_models) class TestEventTypeAPI(EventTestBase): PATH = '/event_types' def test_event_types(self): data = self.get_json(self.PATH, headers=headers) for event_type in ['Foo', 'Bar', 'Zoo']: self.assertTrue(event_type in data) class TestTraitAPI(EventTestBase): PATH = '/event_types/%s/traits' def test_get_traits_for_event(self): path = self.PATH % "Foo" data = self.get_json(path, headers=headers) self.assertEqual(4, len(data)) def test_get_event_invalid_path(self): data = self.get_json('/event_types/trait_A/', headers=headers, expect_errors=True) self.assertEqual(404, data.status_int) def test_get_traits_for_non_existent_event(self): path = self.PATH % "NO_SUCH_EVENT_TYPE" data = self.get_json(path, headers=headers) self.assertEqual([], data) def test_get_trait_data_for_event(self): path = (self.PATH % "Foo") + "/trait_A" data = self.get_json(path, headers=headers) self.assertEqual(1, len(data)) trait = data[0] self.assertEqual("trait_A", trait['name']) def test_get_trait_data_for_non_existent_event(self): path = (self.PATH % "NO_SUCH_EVENT") + "/trait_A" data = self.get_json(path, headers=headers) self.assertEqual([], data) def test_get_trait_data_for_non_existent_trait(self): path = (self.PATH % "Foo") + "/no_such_trait" data = self.get_json(path, headers=headers) self.assertEqual([], data) class TestEventAPI(EventTestBase): PATH = '/events' def test_get_events(self): data = self.get_json(self.PATH, headers=headers) self.assertEqual(3, len(data)) # We expect to get native UTC generated time back expected_generated = timeutils.strtime( at=timeutils.normalize_time(self.trait_time), fmt=timeutils._ISO8601_TIME_FORMAT) for event in data: self.assertTrue(event['event_type'] in ['Foo', 'Bar', 'Zoo']) self.assertEqual(4, len(event['traits'])) self.assertEqual(expected_generated, event['generated']) for trait_name in ['trait_A', 'trait_B', 'trait_C', 'trait_D']: self.assertTrue(trait_name in map(lambda x: x['name'], event['traits'])) def test_get_event_by_message_id(self): event = self.get_json(self.PATH + "/100", headers=headers) expected_traits = [{'name': 'trait_A', 'type': 'string', 'value': 'my_Bar_text'}, {'name': 'trait_B', 'type': 'integer', 'value': '101'}, {'name': 'trait_C', 'type': 'float', 'value': '100.123456'}, {'name': 'trait_D', 'type': 'datetime', 'value': '2013-12-31T05:00:00'}] self.assertEqual('100', event['message_id']) self.assertEqual('Bar', event['event_type']) self.assertEqual('2013-12-31T05:00:00', event['generated']) self.assertEqual(expected_traits, event['traits']) def test_get_event_by_message_id_no_such_id(self): data = self.get_json(self.PATH + "/DNE", headers=headers, expect_errors=True) self.assertEqual(404, data.status_int) def test_get_events_filter_event_type(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'event_type', 'value': 'Foo'}]) self.assertEqual(1, len(data)) def test_get_events_filter_text_trait(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'trait_A', 'value': 'my_Foo_text', 'type': 'string'}]) self.assertEqual(1, len(data)) self.assertEqual('Foo', data[0]['event_type']) def test_get_events_filter_int_trait(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'trait_B', 'value': '101', 'type': 'integer'}]) self.assertEqual(1, len(data)) self.assertEqual('Bar', data[0]['event_type']) traits = filter(lambda x: x['name'] == 'trait_B', data[0]['traits']) self.assertEqual(1, len(traits)) self.assertEqual('integer', traits[0]['type']) self.assertEqual('101', traits[0]['value']) def test_get_events_filter_float_trait(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'trait_C', 'value': '200.123456', 'type': 'float'}]) self.assertEqual(1, len(data)) self.assertEqual('Zoo', data[0]['event_type']) traits = filter(lambda x: x['name'] == 'trait_C', data[0]['traits']) self.assertEqual(1, len(traits)) self.assertEqual('float', traits[0]['type']) self.assertEqual('200.123456', traits[0]['value']) def test_get_events_filter_datetime_trait(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'trait_D', 'value': self.trait_time.isoformat(), 'type': 'datetime'}]) self.assertEqual(3, len(data)) traits = filter(lambda x: x['name'] == 'trait_D', data[0]['traits']) self.assertEqual(1, len(traits)) self.assertEqual('datetime', traits[0]['type']) self.assertEqual(self.trait_time.isoformat(), traits[0]['value']) def test_get_events_multiple_filters(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'trait_B', 'value': '1', 'type': 'integer'}, {'field': 'trait_A', 'value': 'my_Foo_text', 'type': 'string'}]) self.assertEqual(1, len(data)) self.assertEqual('Foo', data[0]['event_type']) def test_get_events_multiple_filters_no_matches(self): data = self.get_json(self.PATH, headers=headers, q=[{'field': 'trait_B', 'value': '101', 'type': 'integer'}, {'field': 'trait_A', 'value': 'my_Foo_text', 'type': 'string'}]) self.assertEqual(0, len(data)) def test_get_events_not_filters(self): data = self.get_json(self.PATH, headers=headers, q=[]) self.assertEqual(3, len(data)) ceilometer-2014.1/ceilometer/tests/api/v2/test_list_meters_scenarios.py0000664000175300017540000006745112323717132027507 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright 2012 Red Hat, Inc. # Copyright 2013 IBM Corp. # # Author: Angus Salkeld # # 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. """Test listing meters. """ import base64 import datetime import json as jsonutils import logging import testscenarios import webtest.app from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEmptyMeters(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get_json('/meters') self.assertEqual([], data) class TestValidateUserInput(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def test_list_meters_query_float_metadata(self): self.assertRaises(webtest.app.AppError, self.get_json, '/meters/meter.test', q=[{'field': 'metadata.util', 'op': 'eq', 'value': '0.7.5', 'type': 'float'}]) self.assertRaises(webtest.app.AppError, self.get_json, '/meters/meter.test', q=[{'field': 'metadata.util', 'op': 'eq', 'value': 'abacaba', 'type': 'boolean'}]) self.assertRaises(webtest.app.AppError, self.get_json, '/meters/meter.test', q=[{'field': 'metadata.util', 'op': 'eq', 'value': '45.765', 'type': 'integer'}]) class TestListMeters(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListMeters, self).setUp() self.messages = [] for cnt in [ sample.Sample( 'meter.test', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', 'size': 123, 'util': 0.75, 'is_public': True}, source='test_source'), sample.Sample( 'meter.test', 'cumulative', '', 3, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 11, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample1', 'size': 0, 'util': 0.47, 'is_public': False}, source='test_source'), sample.Sample( 'meter.mine', 'gauge', '', 1, 'user-id', 'project-id', 'resource-id2', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', 'size': 456, 'util': 0.64, 'is_public': False}, source='test_source'), sample.Sample( 'meter.test', 'cumulative', '', 1, 'user-id2', 'project-id2', 'resource-id3', timestamp=datetime.datetime(2012, 7, 2, 10, 42), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample3', 'size': 0, 'util': 0.75, 'is_public': False}, source='test_source'), sample.Sample( 'meter.mine', 'gauge', '', 1, 'user-id4', 'project-id2', 'resource-id4', timestamp=datetime.datetime(2012, 7, 2, 10, 43), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample4', 'properties': { 'prop_1': 'prop_value', 'prop_2': {'sub_prop_1': 'sub_prop_value'} }, 'size': 0, 'util': 0.58, 'is_public': True}, source='test_source1')]: msg = utils.meter_message_from_counter( cnt, self.CONF.publisher.metering_secret) self.messages.append(msg) self.conn.record_metering_data(msg) def test_list_meters(self): data = self.get_json('/meters') self.assertEqual(4, len(data)) self.assertEqual(set(['resource-id', 'resource-id2', 'resource-id3', 'resource-id4']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test', 'meter.mine']), set(r['name'] for r in data)) self.assertEqual(set(['test_source', 'test_source1']), set(r['source'] for r in data)) def test_meters_query_with_timestamp(self): date_time = datetime.datetime(2012, 7, 2, 10, 41) isotime = date_time.isoformat() resp = self.get_json('/meters', q=[{'field': 'timestamp', 'op': 'gt', 'value': isotime}], expect_errors=True) self.assertEqual(400, resp.status_code) self.assertEqual('Unknown argument: "timestamp": ' 'not valid for this resource', jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_list_samples(self): data = self.get_json('/samples') self.assertEqual(5, len(data)) def test_query_samples_with_invalid_field_name_and_non_eq_operator(self): resp = self.get_json('/samples', q=[{'field': 'non_valid_field_name', 'op': 'gt', 'value': 3}], expect_errors=True) resp_string = jsonutils.loads(resp.body) fault_string = resp_string['error_message']['faultstring'] expected_error_message = ('Unknown argument: "non_valid_field_name"' ': unrecognized field in query: ' '[]') self.assertEqual(400, resp.status_code) self.assertTrue(fault_string.startswith(expected_error_message)) def test_query_samples_with_invalid_field_name_and_eq_operator(self): resp = self.get_json('/samples', q=[{'field': 'non_valid_field_name', 'op': 'eq', 'value': 3}], expect_errors=True) resp_string = jsonutils.loads(resp.body) fault_string = resp_string['error_message']['faultstring'] expected_error_message = ('Unknown argument: "non_valid_field_name"' ': unrecognized field in query: ' '[]') self.assertEqual(400, resp.status_code) self.assertTrue(fault_string.startswith(expected_error_message)) def test_query_samples_with_invalid_operator_and_valid_field_name(self): resp = self.get_json('/samples', q=[{'field': 'project_id', 'op': 'lt', 'value': '3'}], expect_errors=True) resp_string = jsonutils.loads(resp.body) fault_string = resp_string['error_message']['faultstring'] expected_error_message = ("Invalid input for field/attribute op. " + "Value: 'lt'. unimplemented operator for" + " project_id") self.assertEqual(400, resp.status_code) self.assertEqual(fault_string, expected_error_message) def test_list_meters_query_wrong_type_metadata(self): resp = self.get_json('/meters/meter.test', q=[{'field': 'metadata.size', 'op': 'eq', 'value': '0', 'type': 'blob'}], expect_errors=True ) expected_error_message = 'The data type blob is not supported.' resp_string = jsonutils.loads(resp.body) fault_string = resp_string['error_message']['faultstring'] self.assertTrue(fault_string.startswith(expected_error_message)) def test_query_samples_with_search_offset(self): resp = self.get_json('/samples', q=[{'field': 'search_offset', 'op': 'eq', 'value': 42}], expect_errors=True) self.assertEqual(400, resp.status_code) self.assertEqual("Invalid input for field/attribute field. " "Value: 'search_offset'. " "search_offset cannot be used without timestamp", jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_list_meters_with_dict_metadata(self): data = self.get_json('/meters/meter.mine', q=[{'field': 'metadata.properties.prop_2.sub_prop_1', 'op': 'eq', 'value': 'sub_prop_value', }]) self.assertEqual(1, len(data)) self.assertEqual('resource-id4', data[0]['resource_id']) metadata = data[0]['resource_metadata'] self.assertIsNotNone(metadata) self.assertEqual('self.sample4', metadata['tag']) self.assertEqual('prop_value', metadata['properties.prop_1']) def test_get_one_sample(self): sample_id = self.messages[1]['message_id'] data = self.get_json('/samples/%s' % sample_id) self.assertIn('id', data) del data['recorded_at'] self.assertEqual({ u'id': sample_id, u'metadata': {u'display_name': u'test-server', u'is_public': u'False', u'size': u'0', u'tag': u'self.sample1', u'util': u'0.47'}, u'meter': u'meter.test', u'project_id': u'project-id', u'resource_id': u'resource-id', u'timestamp': u'2012-07-02T11:40:00', u'type': u'cumulative', u'unit': u'', u'source': 'test_source', u'user_id': u'user-id', u'volume': 3.0}, data) def test_get_not_existing_sample(self): resp = self.get_json('/samples/not_exists', expect_errors=True, status=404) self.assertEqual("Sample not_exists Not Found", jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_list_samples_with_dict_metadata(self): data = self.get_json('/samples', q=[{'field': 'metadata.properties.prop_2.sub_prop_1', 'op': 'eq', 'value': 'sub_prop_value', }]) self.assertIn('id', data[0]) del data[0]['id'] # Randomly generated del data[0]['recorded_at'] self.assertEqual([{ u'user_id': u'user-id4', u'resource_id': u'resource-id4', u'timestamp': u'2012-07-02T10:43:00', u'meter': u'meter.mine', u'volume': 1.0, u'project_id': u'project-id2', u'type': u'gauge', u'unit': u'', u'source': u'test_source1', u'metadata': {u'display_name': u'test-server', u'properties.prop_2:sub_prop_1': u'sub_prop_value', u'util': u'0.58', u'tag': u'self.sample4', u'properties.prop_1': u'prop_value', u'is_public': u'True', u'size': u'0'} }], data) def test_list_meters_metadata_query(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample1', }],) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) def test_list_meters_resource_metadata_query(self): # NOTE(jd) Same test as above, but with the alias resource_metadata # as query field data = self.get_json('/meters/meter.test', q=[{'field': 'resource_metadata.tag', 'op': 'eq', 'value': 'self.sample1', }],) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) def test_list_meters_multi_metadata_query(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample1', }, {'field': 'metadata.display_name', 'op': 'eq', 'value': 'test-server', }],) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) def test_list_meters_query_integer_metadata(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.size', 'op': 'eq', 'value': '0', 'type': 'integer'}] ) self.assertEqual(2, len(data)) self.assertEqual(set(['resource-id', 'resource-id3']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) self.assertEqual(set(['0']), set(r['resource_metadata']['size'] for r in data)) def test_list_meters_query_float_metadata(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.util', 'op': 'eq', 'value': '0.75', 'type': 'float'}] ) self.assertEqual(2, len(data)) self.assertEqual(set(['resource-id', 'resource-id3']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) self.assertEqual(set(['0.75']), set(r['resource_metadata']['util'] for r in data)) def test_list_meters_query_boolean_metadata(self): data = self.get_json('/meters/meter.mine', q=[{'field': 'metadata.is_public', 'op': 'eq', 'value': 'False', 'type': 'boolean'}] ) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id2']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.mine']), set(r['counter_name'] for r in data)) self.assertEqual(set(['False']), set(r['resource_metadata']['is_public'] for r in data)) def test_list_meters_query_string_metadata(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample'}] ) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) self.assertEqual(set(['self.sample']), set(r['resource_metadata']['tag'] for r in data)) def test_list_meters_query_integer_float_metadata_without_type(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.size', 'op': 'eq', 'value': '0'}, {'field': 'metadata.util', 'op': 'eq', 'value': '0.75'}] ) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id3']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) self.assertEqual(set(['0']), set(r['resource_metadata']['size'] for r in data)) self.assertEqual(set(['0.75']), set(r['resource_metadata']['util'] for r in data)) def test_with_resource(self): data = self.get_json('/meters', q=[{'field': 'resource_id', 'value': 'resource-id', }]) nids = set(r['name'] for r in data) self.assertEqual(set(['meter.test']), nids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source']), sids) def test_with_resource_and_source(self): data = self.get_json('/meters', q=[{'field': 'resource_id', 'value': 'resource-id4', }, {'field': 'source', 'value': 'test_source1', }]) nids = set(r['name'] for r in data) self.assertEqual(set(['meter.mine']), nids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source1']), sids) def test_with_resource_and_metadata_query(self): data = self.get_json('/meters/meter.mine', q=[{'field': 'resource_id', 'op': 'eq', 'value': 'resource-id2', }, {'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample2', }]) self.assertEqual(1, len(data)) self.assertEqual(set(['resource-id2']), set(r['resource_id'] for r in data)) self.assertEqual(set(['meter.mine']), set(r['counter_name'] for r in data)) def test_with_source(self): data = self.get_json('/meters', q=[{'field': 'source', 'value': 'test_source', }]) rids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id', 'resource-id2', 'resource-id3']), rids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source']), sids) def test_with_source_and_metadata_query(self): data = self.get_json('/meters/meter.mine', q=[{'field': 'source', 'op': 'eq', 'value': 'test_source', }, {'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample2', }]) self.assertEqual(1, len(data)) self.assertEqual(set(['test_source']), set(r['source'] for r in data)) self.assertEqual(set(['meter.mine']), set(r['counter_name'] for r in data)) def test_with_source_non_existent(self): data = self.get_json('/meters', q=[{'field': 'source', 'value': 'test_source_doesnt_exist', }], ) assert not data def test_with_user(self): data = self.get_json('/meters', q=[{'field': 'user_id', 'value': 'user-id', }], ) uids = set(r['user_id'] for r in data) self.assertEqual(set(['user-id']), uids) nids = set(r['name'] for r in data) self.assertEqual(set(['meter.mine', 'meter.test']), nids) rids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id', 'resource-id2']), rids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source']), sids) def test_with_user_and_source(self): data = self.get_json('/meters', q=[{'field': 'user_id', 'value': 'user-id4', }, {'field': 'source', 'value': 'test_source1', }], ) uids = set(r['user_id'] for r in data) self.assertEqual(set(['user-id4']), uids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source1']), sids) def test_with_user_and_metadata_query(self): data = self.get_json('/meters/meter.test', q=[{'field': 'user_id', 'op': 'eq', 'value': 'user-id', }, {'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample1', }]) self.assertEqual(1, len(data)) self.assertEqual(set(['user-id']), set(r['user_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) def test_with_user_non_existent(self): data = self.get_json('/meters', q=[{'field': 'user_id', 'value': 'user-id-foobar123', }], ) self.assertEqual([], data) def test_with_project(self): data = self.get_json('/meters', q=[{'field': 'project_id', 'value': 'project-id2', }], ) rids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id3', 'resource-id4']), rids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source', 'test_source1']), sids) def test_with_project_and_source(self): data = self.get_json('/meters', q=[{'field': 'project_id', 'value': 'project-id2', }, {'field': 'source', 'value': 'test_source1', }], ) rids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id4']), rids) sids = set(r['source'] for r in data) self.assertEqual(set(['test_source1']), sids) def test_with_project_and_metadata_query(self): data = self.get_json('/meters/meter.test', q=[{'field': 'project_id', 'op': 'eq', 'value': 'project-id', }, {'field': 'metadata.tag', 'op': 'eq', 'value': 'self.sample1', }]) self.assertEqual(1, len(data)) self.assertEqual(set(['project-id']), set(r['project_id'] for r in data)) self.assertEqual(set(['meter.test']), set(r['counter_name'] for r in data)) def test_with_project_non_existent(self): data = self.get_json('/meters', q=[{'field': 'project_id', 'value': 'jd-was-here', }], ) self.assertEqual([], data) def test_list_meters_meter_id(self): data = self.get_json('/meters') for i in data: expected = base64.encodestring('%s+%s' % (i['resource_id'], i['name'])) self.assertEqual(expected, i['meter_id']) ceilometer-2014.1/ceilometer/tests/api/v2/__init__.py0000664000175300017540000000142412323717130023571 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. from ceilometer.tests import api class FunctionalTest(api.FunctionalTest): PATH_PREFIX = '/v2' ceilometer-2014.1/ceilometer/tests/api/v2/test_list_resources_scenarios.py0000664000175300017540000004407212323717132030214 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Test listing resources. """ import datetime import json import logging import testscenarios from ceilometer.openstack.common import timeutils from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListResources(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get_json('/resources') self.assertEqual([], data) @staticmethod def _isotime(timestamp): # drop TZ specifier return unicode(timeutils.isotime(timestamp))[:-1] def _verify_sample_timestamps(self, res, first, last): self.assertTrue('first_sample_timestamp' in res) self.assertEqual(self._isotime(first), res['first_sample_timestamp']) self.assertTrue('last_sample_timestamp' in res) self.assertEqual(self._isotime(last), res['last_sample_timestamp']) def test_instance_no_metadata(self): timestamp = datetime.datetime(2012, 7, 2, 10, 40) sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=timestamp, resource_metadata=None, source='test', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) data = self.get_json('/resources') self.assertEqual(1, len(data)) self._verify_sample_timestamps(data[0], timestamp, timestamp) def test_instances(self): timestamps = { 'resource-id': datetime.datetime(2012, 7, 2, 10, 40), 'resource-id-alternate': datetime.datetime(2012, 7, 2, 10, 41), } sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=timestamps['resource-id'], resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id-alternate', timestamp=timestamps['resource-id-alternate'], resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='test', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources') self.assertEqual(2, len(data)) for res in data: timestamp = timestamps.get(res['resource_id']) self._verify_sample_timestamps(res, timestamp, timestamp) def test_instance_multiple_samples(self): timestamps = [ datetime.datetime(2012, 7, 2, 10, 41), datetime.datetime(2012, 7, 2, 10, 42), datetime.datetime(2012, 7, 2, 10, 40), ] for timestamp in timestamps: datapoint = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=timestamp, resource_metadata={'display_name': 'test-server', 'tag': 'self.sample-%s' % timestamp, }, source='test', ) msg = utils.meter_message_from_counter( datapoint, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) data = self.get_json('/resources') self.assertEqual(1, len(data)) self._verify_sample_timestamps(data[0], timestamps[-1], timestamps[1]) def test_instances_one(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='test', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources/resource-id') self.assertEqual('resource-id', data['resource_id']) def test_with_source(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_resources', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='not-test', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources', q=[{'field': 'source', 'value': 'test_list_resources', }]) ids = [r['resource_id'] for r in data] self.assertEqual(['resource-id'], ids) sources = [r['source'] for r in data] self.assertEqual(['test_list_resources'], sources) def test_with_invalid_resource_id(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id-1', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_resources', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id', 'resource-id-2', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='test_list_resources', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) resp1 = self.get_json('/resources/resource-id-1') self.assertEqual("resource-id-1", resp1["resource_id"]) resp2 = self.get_json('/resources/resource-id-2') self.assertEqual("resource-id-2", resp2["resource_id"]) resp3 = self.get_json('/resources/resource-id-3', expect_errors=True) self.assertEqual(404, resp3.status_code) self.assertEqual("Resource resource-id-3 Not Found", json.loads(resp3.body)['error_message'] ['faultstring']) def test_with_user(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_resources', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='not-test', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources', q=[{'field': 'user_id', 'value': 'user-id', }]) ids = [r['resource_id'] for r in data] self.assertEqual(['resource-id'], ids) def test_with_project(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_resources', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id2', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='not-test', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources', q=[{'field': 'project_id', 'value': 'project-id', }]) ids = [r['resource_id'] for r in data] self.assertEqual(['resource-id'], ids) def test_with_user_non_admin(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id2', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample1', }, source='not-test', ) msg2 = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id2"}) ids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id-alternate']), ids) def test_with_user_wrong_tenant(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id2', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample1', }, source='not-test', ) msg2 = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) data = self.get_json('/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-wrong"}) ids = set(r['resource_id'] for r in data) self.assertEqual(set(), ids) def test_metadata(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', 'dict_properties': {'key': 'value'}, 'not_ignored_list': ['returned'], }, source='test', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) data = self.get_json('/resources') metadata = data[0]['metadata'] self.assertEqual([(u'dict_properties.key', u'value'), (u'display_name', u'test-server'), (u'not_ignored_list', u"['returned']"), (u'tag', u'self.sample')], list(sorted(metadata.iteritems()))) def test_resource_meter_links(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_resources', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) data = self.get_json('/resources') links = data[0]['links'] self.assertEqual(2, len(links)) self.assertEqual('self', links[0]['rel']) self.assertTrue((self.PATH_PREFIX + '/resources/resource-id') in links[0]['href']) self.assertEqual('instance', links[1]['rel']) self.assertTrue((self.PATH_PREFIX + '/meters/instance?' 'q.field=resource_id&q.value=resource-id') in links[1]['href']) def test_resource_skip_meter_links(self): sample1 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_resources', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) data = self.get_json('/resources?meter_links=0') links = data[0]['links'] self.assertEqual(len(links), 1) self.assertEqual(links[0]['rel'], 'self') self.assertTrue((self.PATH_PREFIX + '/resources/resource-id') in links[0]['href']) ceilometer-2014.1/ceilometer/tests/api/v2/test_statistics_scenarios.py0000664000175300017540000023537312323717132027347 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Test events statistics retrieval.""" import datetime import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestMaxProjectVolume(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): PATH = '/meters/volume.size/statistics' def setUp(self): super(TestMaxProjectVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id-%s' % i, timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }]) self.assertEqual(7, data[0]['max']) self.assertEqual(3, data[0]['count']) def test_start_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, ]) self.assertEqual(7, data[0]['max']) self.assertEqual(2, data[0]['count']) def test_start_timestamp_after(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T12:34:00', }, ]) self.assertEqual([], data) def test_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:30:00', }, ]) self.assertEqual(5, data[0]['max']) self.assertEqual(1, data[0]['count']) def test_end_timestamp_before(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T09:54:00', }, ]) self.assertEqual([], data) def test_start_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:32:00', }, ]) self.assertEqual(6, data[0]['max']) self.assertEqual(1, data[0]['count']) class TestMaxResourceVolume(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): PATH = '/meters/volume.size/statistics' def setUp(self): super(TestMaxResourceVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }]) self.assertEqual(7, data[0]['max']) self.assertEqual(3, data[0]['count']) def test_no_time_bounds_with_period(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id'}], period=3600) self.assertEqual(3, len(data)) self.assertEqual(set([u'2012-09-25T10:30:00', u'2012-09-25T12:32:00', u'2012-09-25T11:31:00']), set(x['duration_start'] for x in data)) self.assertEqual(3600, data[0]['period']) self.assertEqual(set([u'2012-09-25T10:30:00', u'2012-09-25T11:30:00', u'2012-09-25T12:30:00']), set(x['period_start'] for x in data)) def test_period_with_negative_value(self): resp = self.get_json(self.PATH, expect_errors=True, q=[{'field': 'resource_id', 'value': 'resource-id'}], period=-1) self.assertEqual(400, resp.status_code) def test_start_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, ]) self.assertEqual(7, data[0]['max']) self.assertEqual(2, data[0]['count']) def test_start_timestamp_after(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T12:34:00', }, ]) self.assertEqual([], data) def test_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:30:00', }, ]) self.assertEqual(5, data[0]['max']) self.assertEqual(1, data[0]['count']) def test_end_timestamp_before(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T09:54:00', }, ]) self.assertEqual([], data) def test_start_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:32:00', }, ]) self.assertEqual(6, data[0]['max']) self.assertEqual(1, data[0]['count']) class TestSumProjectVolume(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): PATH = '/meters/volume.size/statistics' def setUp(self): super(TestSumProjectVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id-%s' % i, timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }]) expected = 5 + 6 + 7 self.assertEqual(expected, data[0]['sum']) self.assertEqual(3, data[0]['count']) def test_start_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, ]) expected = 6 + 7 self.assertEqual(expected, data[0]['sum']) self.assertEqual(2, data[0]['count']) def test_start_timestamp_after(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T12:34:00', }, ]) self.assertEqual([], data) def test_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:30:00', }, ]) self.assertEqual(5, data[0]['sum']) self.assertEqual(1, data[0]['count']) def test_end_timestamp_before(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T09:54:00', }, ]) self.assertEqual([], data) def test_start_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'value': 'project1', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:32:00', }, ]) self.assertEqual(6, data[0]['sum']) self.assertEqual(1, data[0]['count']) class TestSumResourceVolume(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): PATH = '/meters/volume.size/statistics' def setUp(self): super(TestSumResourceVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }]) self.assertEqual(5 + 6 + 7, data[0]['sum']) self.assertEqual(3, data[0]['count']) def test_no_time_bounds_with_period(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id'}], period=1800) self.assertEqual(3, len(data)) self.assertEqual(set([u'2012-09-25T10:30:00', u'2012-09-25T12:32:00', u'2012-09-25T11:31:00']), set(x['duration_start'] for x in data)) self.assertEqual(1800, data[0]['period']) self.assertEqual(set([u'2012-09-25T10:30:00', u'2012-09-25T11:30:00', u'2012-09-25T12:30:00']), set(x['period_start'] for x in data)) def test_start_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }]) self.assertEqual(6 + 7, data[0]['sum']) self.assertEqual(2, data[0]['count']) def test_start_timestamp_with_period(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id'}, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T10:15:00'}], period=7200) self.assertEqual(2, len(data)) self.assertEqual(set([u'2012-09-25T10:30:00', u'2012-09-25T12:32:00']), set(x['duration_start'] for x in data)) self.assertEqual(7200, data[0]['period']) self.assertEqual(set([u'2012-09-25T10:15:00', u'2012-09-25T12:15:00']), set(x['period_start'] for x in data)) def test_start_timestamp_after(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T12:34:00', }]) self.assertEqual([], data) def test_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T11:30:00', }]) self.assertEqual(5, data[0]['sum']) self.assertEqual(1, data[0]['count']) def test_end_timestamp_before(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'le', 'value': '2012-09-25T09:54:00', }]) self.assertEqual([], data) def test_start_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'resource_id', 'value': 'resource-id', }, {'field': 'timestamp', 'op': 'ge', 'value': '2012-09-25T11:30:00', }, {'field': 'timestamp', 'op': 'lt', 'value': '2012-09-25T11:32:00', }]) self.assertEqual(6, data[0]['sum']) self.assertEqual(1, data[0]['count']) class TestGroupByInstance(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): PATH = '/meters/instance/statistics' def setUp(self): super(TestGroupByInstance, self).setUp() test_sample_data = ( {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 16, 10), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-1', 'source': 'source-2'}, {'volume': 2, 'user': 'user-1', 'project': 'project-2', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 15, 37), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-1', 'source': 'source-2'}, {'volume': 1, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 11), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 1, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 40), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 2, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 14, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 4, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 17, 28), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 4, 'user': 'user-3', 'project': 'project-1', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 11, 22), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-2', 'source': 'source-3'}, ) for test_sample in test_sample_data: c = sample.Sample( 'instance', sample.TYPE_CUMULATIVE, unit='s', volume=test_sample['volume'], user_id=test_sample['user'], project_id=test_sample['project'], resource_id=test_sample['resource'], timestamp=datetime.datetime(*test_sample['timestamp']), resource_metadata={'flavor': test_sample['metadata_flavor'], 'event': test_sample['metadata_event'], }, source=test_sample['source'], ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_group_by_user(self): data = self.get_json(self.PATH, groupby=['user_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['user_id']), groupby_keys_set) self.assertEqual(set(['user-1', 'user-2', 'user-3']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'user_id': 'user-1'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'user_id': 'user-2'}: self.assertEqual(4, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(8, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'user_id': 'user-3'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) def test_group_by_resource(self): data = self.get_json(self.PATH, groupby=['resource_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['resource_id']), groupby_keys_set) self.assertEqual(set(['resource-1', 'resource-2', 'resource-3']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'resource_id': 'resource-1'}: self.assertEqual(3, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'resource_id': 'resource-2'}: self.assertEqual(3, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'resource_id': 'resource-3'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) def test_group_by_project(self): data = self.get_json(self.PATH, groupby=['project_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'project_id': 'project-1'}: self.assertEqual(5, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(10, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'project_id': 'project-2'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(3, r['avg']) def test_group_by_unknown_field(self): response = self.get_json(self.PATH, expect_errors=True, groupby=['wtf']) self.assertEqual(400, response.status_code) def test_group_by_multiple_regular(self): data = self.get_json(self.PATH, groupby=['user_id', 'resource_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['user_id', 'resource_id']), groupby_keys_set) self.assertEqual(set(['user-1', 'user-2', 'user-3', 'resource-1', 'resource-2', 'resource-3']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'user_id': 'user-1', 'resource_id': 'resource-1'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'user_id': 'user-2', 'resource_id': 'resource-1'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'user_id': 'user-2', 'resource_id': 'resource-2'}: self.assertEqual(3, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'user_id': 'user-3', 'resource_id': 'resource-3'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) else: self.assertNotEqual(grp, {'user_id': 'user-1', 'resource_id': 'resource-2'}) self.assertNotEqual(grp, {'user_id': 'user-1', 'resource_id': 'resource-3'}) self.assertNotEqual(grp, {'user_id': 'user-2', 'resource_id': 'resource-3'}) self.assertNotEqual(grp, {'user_id': 'user-3', 'resource_id': 'resource-1'}) self.assertNotEqual(grp, {'user_id': 'user-3', 'resource_id': 'resource-2'}) def test_group_by_with_query_filter(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'op': 'eq', 'value': 'project-1'}], groupby=['resource_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['resource_id']), groupby_keys_set) self.assertEqual(set(['resource-1', 'resource-2', 'resource-3']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'resource_id': 'resource-1'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'resource_id': 'resource-2'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(1, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(1, r['avg']) elif grp == {'resource_id': 'resource-3'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) def test_group_by_with_query_filter_multiple(self): data = self.get_json(self.PATH, q=[{'field': 'user_id', 'op': 'eq', 'value': 'user-2'}, {'field': 'source', 'op': 'eq', 'value': 'source-1'}], groupby=['project_id', 'resource_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id', 'resource_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2', 'resource-1', 'resource-2']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'project_id': 'project-1', 'resource_id': 'resource-1'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'project_id': 'project-1', 'resource_id': 'resource-2'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(1, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(1, r['avg']) elif grp == {'project_id': 'project-2', 'resource_id': 'resource-2'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) else: self.assertNotEqual(grp, {'project_id': 'project-2', 'resource_id': 'resource-1'}) def test_group_by_with_period(self): data = self.get_json(self.PATH, groupby=['project_id'], period=7200) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) period_start_set = set(sub_dict['period_start'] for sub_dict in data) period_start_valid = set([u'2013-08-01T10:11:00', u'2013-08-01T14:11:00', u'2013-08-01T16:11:00']) self.assertEqual(period_start_valid, period_start_set) for r in data: grp = r['groupby'] period_start = r['period_start'] if (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T10:11:00'): self.assertEqual(3, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(4260, r['duration']) self.assertEqual(u'2013-08-01T10:11:00', r['duration_start']) self.assertEqual(u'2013-08-01T11:22:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T12:11:00', r['period_end']) elif (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T14:11:00'): self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(4260, r['duration']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_start']) self.assertEqual(u'2013-08-01T16:10:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T16:11:00', r['period_end']) elif (grp == {'project_id': 'project-2'} and period_start == u'2013-08-01T14:11:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T15:37:00', r['duration_start']) self.assertEqual(u'2013-08-01T15:37:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T16:11:00', r['period_end']) elif (grp == {'project_id': 'project-2'} and period_start == u'2013-08-01T16:11:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T17:28:00', r['duration_start']) self.assertEqual(u'2013-08-01T17:28:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T18:11:00', r['period_end']) else: self.assertNotEqual([grp, period_start], [{'project_id': 'project-1'}, u'2013-08-01T16:11:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T10:11:00']) def test_group_by_with_query_filter_and_period(self): data = self.get_json(self.PATH, q=[{'field': 'source', 'op': 'eq', 'value': 'source-1'}], groupby=['project_id'], period=7200) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) period_start_set = set(sub_dict['period_start'] for sub_dict in data) period_start_valid = set([u'2013-08-01T10:11:00', u'2013-08-01T14:11:00', u'2013-08-01T16:11:00']) self.assertEqual(period_start_valid, period_start_set) for r in data: grp = r['groupby'] period_start = r['period_start'] if (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T10:11:00'): self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(1, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(1, r['avg']) self.assertEqual(1740, r['duration']) self.assertEqual(u'2013-08-01T10:11:00', r['duration_start']) self.assertEqual(u'2013-08-01T10:40:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T12:11:00', r['period_end']) elif (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T14:11:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_start']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T16:11:00', r['period_end']) elif (grp == {'project_id': 'project-2'} and period_start == u'2013-08-01T16:11:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T17:28:00', r['duration_start']) self.assertEqual(u'2013-08-01T17:28:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T18:11:00', r['period_end']) else: self.assertNotEqual([grp, period_start], [{'project_id': 'project-1'}, u'2013-08-01T16:11:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T10:11:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T14:11:00']) def test_group_by_start_timestamp_after(self): data = self.get_json(self.PATH, q=[{'field': 'timestamp', 'op': 'ge', 'value': '2013-08-01T17:28:01'}], groupby=['project_id']) self.assertEqual([], data) def test_group_by_end_timestamp_before(self): data = self.get_json(self.PATH, q=[{'field': 'timestamp', 'op': 'le', 'value': '2013-08-01T10:10:59'}], groupby=['project_id']) self.assertEqual([], data) def test_group_by_start_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'timestamp', 'op': 'ge', 'value': '2013-08-01T14:58:00'}], groupby=['project_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'project_id': 'project-1'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'project_id': 'project-2'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(3, r['avg']) def test_group_by_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'timestamp', 'op': 'le', 'value': '2013-08-01T11:45:00'}], groupby=['project_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'project_id': 'project-1'}: self.assertEqual(3, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(2, r['avg']) def test_group_by_start_end_timestamp(self): data = self.get_json(self.PATH, q=[{'field': 'timestamp', 'op': 'ge', 'value': '2013-08-01T08:17:03'}, {'field': 'timestamp', 'op': 'le', 'value': '2013-08-01T23:59:59'}], groupby=['project_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'project_id': 'project-1'}: self.assertEqual(5, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(10, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'project_id': 'project-2'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(4, r['max']) self.assertEqual(6, r['sum']) self.assertEqual(3, r['avg']) def test_group_by_start_end_timestamp_with_query_filter(self): data = self.get_json(self.PATH, q=[{'field': 'project_id', 'op': 'eq', 'value': 'project-1'}, {'field': 'timestamp', 'op': 'ge', 'value': '2013-08-01T11:01:00'}, {'field': 'timestamp', 'op': 'le', 'value': '2013-08-01T20:00:00'}], groupby=['resource_id']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['resource_id']), groupby_keys_set) self.assertEqual(set(['resource-1', 'resource-3']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'resource_id': 'resource-1'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'resource_id': 'resource-3'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) def test_group_by_start_end_timestamp_with_period(self): data = self.get_json(self.PATH, q=[{'field': 'timestamp', 'op': 'ge', 'value': '2013-08-01T14:00:00'}, {'field': 'timestamp', 'op': 'le', 'value': '2013-08-01T17:00:00'}], groupby=['project_id'], period=3600) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) period_start_set = set(sub_dict['period_start'] for sub_dict in data) period_start_valid = set([u'2013-08-01T14:00:00', u'2013-08-01T15:00:00', u'2013-08-01T16:00:00']) self.assertEqual(period_start_valid, period_start_set) for r in data: grp = r['groupby'] period_start = r['period_start'] if (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T14:00:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_start']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_end']) self.assertEqual(3600, r['period']) self.assertEqual(u'2013-08-01T15:00:00', r['period_end']) elif (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T16:00:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T16:10:00', r['duration_start']) self.assertEqual(u'2013-08-01T16:10:00', r['duration_end']) self.assertEqual(3600, r['period']) self.assertEqual(u'2013-08-01T17:00:00', r['period_end']) elif (grp == {'project_id': 'project-2'} and period_start == u'2013-08-01T15:00:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T15:37:00', r['duration_start']) self.assertEqual(u'2013-08-01T15:37:00', r['duration_end']) self.assertEqual(3600, r['period']) self.assertEqual(u'2013-08-01T16:00:00', r['period_end']) else: self.assertNotEqual([grp, period_start], [{'project_id': 'project-1'}, u'2013-08-01T15:00:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T14:00:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T16:00:00']) def test_group_by_start_end_timestamp_with_query_filter_and_period(self): data = self.get_json(self.PATH, q=[{'field': 'source', 'op': 'eq', 'value': 'source-1'}, {'field': 'timestamp', 'op': 'ge', 'value': '2013-08-01T10:00:00'}, {'field': 'timestamp', 'op': 'le', 'value': '2013-08-01T18:00:00'}], groupby=['project_id'], period=7200) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) self.assertEqual(set(['project-1', 'project-2']), groupby_vals_set) period_start_set = set(sub_dict['period_start'] for sub_dict in data) period_start_valid = set([u'2013-08-01T10:00:00', u'2013-08-01T14:00:00', u'2013-08-01T16:00:00']) self.assertEqual(period_start_valid, period_start_set) for r in data: grp = r['groupby'] period_start = r['period_start'] if (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T10:00:00'): self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(1, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(1, r['avg']) self.assertEqual(1740, r['duration']) self.assertEqual(u'2013-08-01T10:11:00', r['duration_start']) self.assertEqual(u'2013-08-01T10:40:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T12:00:00', r['period_end']) elif (grp == {'project_id': 'project-1'} and period_start == u'2013-08-01T14:00:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(2, r['sum']) self.assertEqual(2, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_start']) self.assertEqual(u'2013-08-01T14:59:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T16:00:00', r['period_end']) elif (grp == {'project_id': 'project-2'} and period_start == u'2013-08-01T16:00:00'): self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) self.assertEqual(0, r['duration']) self.assertEqual(u'2013-08-01T17:28:00', r['duration_start']) self.assertEqual(u'2013-08-01T17:28:00', r['duration_end']) self.assertEqual(7200, r['period']) self.assertEqual(u'2013-08-01T18:00:00', r['period_end']) else: self.assertNotEqual([grp, period_start], [{'project_id': 'project-1'}, u'2013-08-01T16:00:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T10:00:00']) self.assertNotEqual([grp, period_start], [{'project_id': 'project-2'}, u'2013-08-01T14:00:00']) class TestGroupBySource(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): # FIXME(terriyu): We have to put test_group_by_source in its own class # because SQLAlchemy currently doesn't support group by source statistics. # When group by source is supported in SQLAlchemy, this test should be # moved to TestGroupByInstance with all the other group by statistics # tests. scenarios = [ ('mongodb', dict(database_connection=tests_db.MongoDBFakeConnectionUrl())), ('hbase', dict(database_connection=tests_db.HBaseFakeConnectionUrl())), ('db2', dict(database_connection=tests_db.DB2FakeConnectionUrl())), ] PATH = '/meters/instance/statistics' def setUp(self): super(TestGroupBySource, self).setUp() test_sample_data = ( {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 16, 10), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-1', 'source': 'source-2'}, {'volume': 2, 'user': 'user-1', 'project': 'project-2', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 15, 37), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-1', 'source': 'source-2'}, {'volume': 1, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 11), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 1, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 40), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 2, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 14, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 4, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 17, 28), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 4, 'user': 'user-3', 'project': 'project-1', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 11, 22), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-2', 'source': 'source-3'}, ) for test_sample in test_sample_data: c = sample.Sample( 'instance', sample.TYPE_CUMULATIVE, unit='s', volume=test_sample['volume'], user_id=test_sample['user'], project_id=test_sample['project'], resource_id=test_sample['resource'], timestamp=datetime.datetime(*test_sample['timestamp']), resource_metadata={'flavor': test_sample['metadata_flavor'], 'event': test_sample['metadata_event'], }, source=test_sample['source'], ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def tearDown(self): self.conn.clear() super(TestGroupBySource, self).tearDown() def test_group_by_source(self): data = self.get_json(self.PATH, groupby=['source']) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['source']), groupby_keys_set) self.assertEqual(set(['source-1', 'source-2', 'source-3']), groupby_vals_set) for r in data: grp = r['groupby'] if grp == {'source': 'source-1'}: self.assertEqual(4, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(1, r['min']) self.assertEqual(4, r['max']) self.assertEqual(8, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'source': 'source-2'}: self.assertEqual(2, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(2, r['min']) self.assertEqual(2, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(2, r['avg']) elif grp == {'source': 'source-3'}: self.assertEqual(1, r['count']) self.assertEqual('s', r['unit']) self.assertEqual(4, r['min']) self.assertEqual(4, r['max']) self.assertEqual(4, r['sum']) self.assertEqual(4, r['avg']) class TestSelectableAggregates(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): PATH = '/meters/instance/statistics' def setUp(self): super(TestSelectableAggregates, self).setUp() test_sample_data = ( {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 16, 10), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-1', 'source': 'source'}, {'volume': 2, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 15, 37), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-1', 'source': 'source'}, {'volume': 1, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-5', 'timestamp': (2013, 8, 1, 10, 11), 'metadata_flavor': 'm1.medium', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 40), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 2, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-4', 'timestamp': (2013, 8, 1, 14, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 5, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 17, 28), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 4, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 11, 22), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 9, 'user': 'user-3', 'project': 'project-3', 'resource': 'resource-4', 'timestamp': (2013, 8, 1, 11, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-3', 'source': 'source'}, ) for test_sample in test_sample_data: c = sample.Sample( 'instance', sample.TYPE_GAUGE, unit='instance', volume=test_sample['volume'], user_id=test_sample['user'], project_id=test_sample['project'], resource_id=test_sample['resource'], timestamp=datetime.datetime(*test_sample['timestamp']), resource_metadata={'flavor': test_sample['metadata_flavor'], 'event': test_sample['metadata_event'], }, source=test_sample['source'], ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def _do_test_per_tenant_selectable_standard_aggregate(self, aggregate, expected_values): agg_args = {'aggregate.func': aggregate} data = self.get_json(self.PATH, groupby=['project_id'], **agg_args) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) projects = ['project-1', 'project-2', 'project-3'] self.assertEqual(set(projects), groupby_vals_set) standard_aggregates = set(['count', 'min', 'max', 'sum', 'avg']) for r in data: grp = r['groupby'] for project in projects: if grp == {'project_id': project}: expected = expected_values[projects.index(project)] self.assertEqual('instance', r['unit']) self.assertAlmostEqual(r[aggregate], expected) self.assertIn('aggregate', r) self.assertIn(aggregate, r['aggregate']) self.assertAlmostEqual(r['aggregate'][aggregate], expected) for a in standard_aggregates - set([aggregate]): self.assertNotIn(a, r) def test_per_tenant_selectable_max(self): self._do_test_per_tenant_selectable_standard_aggregate('max', [5, 4, 9]) def test_per_tenant_selectable_min(self): self._do_test_per_tenant_selectable_standard_aggregate('min', [2, 1, 9]) def test_per_tenant_selectable_sum(self): self._do_test_per_tenant_selectable_standard_aggregate('sum', [9, 9, 9]) def test_per_tenant_selectable_avg(self): self._do_test_per_tenant_selectable_standard_aggregate('avg', [3, 2.25, 9]) def test_per_tenant_selectable_count(self): self._do_test_per_tenant_selectable_standard_aggregate('count', [3, 4, 1]) def test_per_tenant_selectable_parameterized_aggregate(self): agg_args = {'aggregate.func': 'cardinality', 'aggregate.param': 'resource_id'} data = self.get_json(self.PATH, groupby=['project_id'], **agg_args) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) projects = ['project-1', 'project-2', 'project-3'] self.assertEqual(set(projects), groupby_vals_set) aggregate = 'cardinality/resource_id' expected_values = [2.0, 3.0, 1.0] standard_aggregates = set(['count', 'min', 'max', 'sum', 'avg']) for r in data: grp = r['groupby'] for project in projects: if grp == {'project_id': project}: expected = expected_values[projects.index(project)] self.assertEqual('instance', r['unit']) self.assertNotIn(aggregate, r) self.assertIn('aggregate', r) self.assertIn(aggregate, r['aggregate']) self.assertEqual(expected, r['aggregate'][aggregate]) for a in standard_aggregates: self.assertNotIn(a, r) def test_large_quantum_selectable_parameterized_aggregate(self): # add a large number of datapoints that won't impact on cardinality # if the computation logic is tolerant of different DB behavior on # larger numbers of samples per-period for i in xrange(200): s = sample.Sample( 'instance', sample.TYPE_GAUGE, unit='instance', volume=i * 1.0, user_id='user-1', project_id='project-1', resource_id='resource-1', timestamp=datetime.datetime(2013, 8, 1, 11, i % 60), resource_metadata={'flavor': 'm1.tiny', 'event': 'event-1', }, source='source', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) agg_args = {'aggregate.func': 'cardinality', 'aggregate.param': 'resource_id'} data = self.get_json(self.PATH, **agg_args) aggregate = 'cardinality/resource_id' expected_value = 5.0 standard_aggregates = set(['count', 'min', 'max', 'sum', 'avg']) r = data[0] self.assertNotIn(aggregate, r) self.assertIn('aggregate', r) self.assertIn(aggregate, r['aggregate']) self.assertEqual(expected_value, r['aggregate'][aggregate]) for a in standard_aggregates: self.assertNotIn(a, r) def test_repeated_unparameterized_aggregate(self): agg_params = 'aggregate.func=count&aggregate.func=count' data = self.get_json(self.PATH, override_params=agg_params) aggregate = 'count' expected_value = 8.0 standard_aggregates = set(['min', 'max', 'sum', 'avg']) r = data[0] self.assertIn(aggregate, r) self.assertEqual(expected_value, r[aggregate]) self.assertIn('aggregate', r) self.assertIn(aggregate, r['aggregate']) self.assertEqual(expected_value, r['aggregate'][aggregate]) for a in standard_aggregates: self.assertNotIn(a, r) def test_fully_repeated_parameterized_aggregate(self): agg_params = ('aggregate.func=cardinality&' 'aggregate.param=resource_id&' 'aggregate.func=cardinality&' 'aggregate.param=resource_id&') data = self.get_json(self.PATH, override_params=agg_params) aggregate = 'cardinality/resource_id' expected_value = 5.0 standard_aggregates = set(['count', 'min', 'max', 'sum', 'avg']) r = data[0] self.assertIn('aggregate', r) self.assertNotIn(aggregate, r) self.assertIn(aggregate, r['aggregate']) self.assertEqual(expected_value, r['aggregate'][aggregate]) for a in standard_aggregates: self.assertNotIn(a, r) def test_partially_repeated_parameterized_aggregate(self): agg_params = ('aggregate.func=cardinality&' 'aggregate.param=resource_id&' 'aggregate.func=cardinality&' 'aggregate.param=project_id&') data = self.get_json(self.PATH, override_params=agg_params) expected_values = {'cardinality/resource_id': 5.0, 'cardinality/project_id': 3.0} standard_aggregates = set(['count', 'min', 'max', 'sum', 'avg']) r = data[0] self.assertIn('aggregate', r) for aggregate in expected_values.keys(): self.assertNotIn(aggregate, r) self.assertIn(aggregate, r['aggregate']) self.assertEqual(expected_values[aggregate], r['aggregate'][aggregate]) for a in standard_aggregates: self.assertNotIn(a, r) def test_bad_selectable_parameterized_aggregate(self): agg_args = {'aggregate.func': 'cardinality', 'aggregate.param': 'injection_attack'} resp = self.get_json(self.PATH, status=[400], groupby=['project_id'], **agg_args) self.assertTrue('error_message' in resp) self.assertEqual(resp['error_message'].get('faultcode'), 'Client') self.assertEqual(resp['error_message'].get('faultstring'), 'Bad aggregate: cardinality.injection_attack') class TestUnparameterizedAggregates(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): # We put the stddev test case in a separate class so that we # can easily exclude the sqlalchemy scenario, as sqlite doesn't # support the stddev_pop function and fails ungracefully with # OperationalError when it is used. However we still want to # test the corresponding functionality in the mongo driver. # For hbase & db2, the skip on NotImplementedError logic works # in the usual way. scenarios = [ ('mongodb', dict(database_connection=tests_db.MongoDBFakeConnectionUrl())), ('hbase', dict(database_connection=tests_db.HBaseFakeConnectionUrl())), ('db2', dict(database_connection=tests_db.DB2FakeConnectionUrl())), ] PATH = '/meters/instance/statistics' def setUp(self): super(TestUnparameterizedAggregates, self).setUp() test_sample_data = ( {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 16, 10), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-1', 'source': 'source'}, {'volume': 2, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 15, 37), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-1', 'source': 'source'}, {'volume': 1, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-5', 'timestamp': (2013, 8, 1, 10, 11), 'metadata_flavor': 'm1.medium', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 40), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 2, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-4', 'timestamp': (2013, 8, 1, 14, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 5, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 17, 28), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 4, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 11, 22), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source'}, {'volume': 9, 'user': 'user-3', 'project': 'project-3', 'resource': 'resource-4', 'timestamp': (2013, 8, 1, 11, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-3', 'source': 'source'}, ) for test_sample in test_sample_data: c = sample.Sample( 'instance', sample.TYPE_GAUGE, unit='instance', volume=test_sample['volume'], user_id=test_sample['user'], project_id=test_sample['project'], resource_id=test_sample['resource'], timestamp=datetime.datetime(*test_sample['timestamp']), resource_metadata={'flavor': test_sample['metadata_flavor'], 'event': test_sample['metadata_event'], }, source=test_sample['source'], ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_per_tenant_selectable_unparameterized_aggregate(self): agg_args = {'aggregate.func': 'stddev'} data = self.get_json(self.PATH, groupby=['project_id'], **agg_args) groupby_keys_set = set(x for sub_dict in data for x in sub_dict['groupby'].keys()) groupby_vals_set = set(x for sub_dict in data for x in sub_dict['groupby'].values()) self.assertEqual(set(['project_id']), groupby_keys_set) projects = ['project-1', 'project-2', 'project-3'] self.assertEqual(set(projects), groupby_vals_set) aggregate = 'stddev' expected_values = [1.4142, 1.0897, 0.0] standard_aggregates = set(['count', 'min', 'max', 'sum', 'avg']) for r in data: grp = r['groupby'] for project in projects: if grp == {'project_id': project}: expected = expected_values[projects.index(project)] self.assertEqual('instance', r['unit']) self.assertNotIn(aggregate, r) self.assertIn('aggregate', r) self.assertIn(aggregate, r['aggregate']) self.assertAlmostEqual(r['aggregate'][aggregate], expected, places=4) for a in standard_aggregates: self.assertNotIn(a, r) ceilometer-2014.1/ceilometer/tests/api/v2/test_statistics.py0000664000175300017540000001050412323717130025262 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Test statistics objects.""" import datetime from ceilometer.api.controllers import v2 from ceilometer.openstack.common import test class TestStatisticsDuration(test.BaseTestCase): def setUp(self): super(TestStatisticsDuration, self).setUp() # Create events relative to the range and pretend # that the intervening events exist. self.early1 = datetime.datetime(2012, 8, 27, 7, 0) self.early2 = datetime.datetime(2012, 8, 27, 17, 0) self.start = datetime.datetime(2012, 8, 28, 0, 0) self.middle1 = datetime.datetime(2012, 8, 28, 8, 0) self.middle2 = datetime.datetime(2012, 8, 28, 18, 0) self.end = datetime.datetime(2012, 8, 28, 23, 59) self.late1 = datetime.datetime(2012, 8, 29, 9, 0) self.late2 = datetime.datetime(2012, 8, 29, 19, 0) def test_nulls(self): s = v2.Statistics(duration_start=None, duration_end=None, start_timestamp=None, end_timestamp=None, ) self.assertIsNone(s.duration_start) self.assertIsNone(s.duration_end) self.assertIsNone(s.duration) def test_overlap_range_start(self): s = v2.Statistics(duration_start=self.early1, duration_end=self.middle1, start_timestamp=self.start, end_timestamp=self.end, ) self.assertEqual(self.start, s.duration_start) self.assertEqual(self.middle1, s.duration_end) self.assertEqual(8 * 60 * 60, s.duration) def test_within_range(self): s = v2.Statistics(duration_start=self.middle1, duration_end=self.middle2, start_timestamp=self.start, end_timestamp=self.end, ) self.assertEqual(self.middle1, s.duration_start) self.assertEqual(self.middle2, s.duration_end) self.assertEqual(10 * 60 * 60, s.duration) def test_within_range_zero_duration(self): s = v2.Statistics(duration_start=self.middle1, duration_end=self.middle1, start_timestamp=self.start, end_timestamp=self.end, ) self.assertEqual(self.middle1, s.duration_start) self.assertEqual(self.middle1, s.duration_end) self.assertEqual(0, s.duration) def test_overlap_range_end(self): s = v2.Statistics(duration_start=self.middle2, duration_end=self.late1, start_timestamp=self.start, end_timestamp=self.end, ) self.assertEqual(self.middle2, s.duration_start) self.assertEqual(self.end, s.duration_end) self.assertEqual(((6 * 60) - 1) * 60, s.duration) def test_after_range(self): s = v2.Statistics(duration_start=self.late1, duration_end=self.late2, start_timestamp=self.start, end_timestamp=self.end, ) self.assertIsNone(s.duration_start) self.assertIsNone(s.duration_end) self.assertIsNone(s.duration) def test_without_timestamp(self): s = v2.Statistics(duration_start=self.late1, duration_end=self.late2, start_timestamp=None, end_timestamp=None, ) self.assertEqual(self.late1, s.duration_start) self.assertEqual(self.late2, s.duration_end) ceilometer-2014.1/ceilometer/tests/api/v2/test_alarm_scenarios.py0000664000175300017540000021442012323717132026237 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Mehdi Abaakouk # Angus Salkeld # Eoghan Glynn # # 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. '''Tests alarm operation ''' import datetime import json as jsonutils import logging import uuid import mock from six import moves import testscenarios from ceilometer.storage import models from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEmptyAlarms(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get_json('/alarms') self.assertEqual([], data) class TestAlarms(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestAlarms, self).setUp() self.auth_headers = {'X-User-Id': str(uuid.uuid4()), 'X-Project-Id': str(uuid.uuid4())} for alarm in [ models.Alarm(name='name1', type='threshold', enabled=True, alarm_id='a', description='a', state='insufficient data', state_timestamp=None, timestamp=None, ok_actions=[], insufficient_data_actions=[], alarm_actions=[], repeat_actions=True, user_id=self.auth_headers['X-User-Id'], project_id=self.auth_headers['X-Project-Id'], time_constraints=[dict(name='testcons', start='0 11 * * *', duration=300)], rule=dict(comparison_operator='gt', threshold=2.0, statistic='avg', evaluation_periods=60, period=1, meter_name='meter.test', query=[{'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']} ]) ), models.Alarm(name='name2', type='threshold', enabled=True, alarm_id='b', description='b', state='insufficient data', state_timestamp=None, timestamp=None, ok_actions=[], insufficient_data_actions=[], alarm_actions=[], repeat_actions=False, user_id=self.auth_headers['X-User-Id'], project_id=self.auth_headers['X-Project-Id'], time_constraints=[], rule=dict(comparison_operator='gt', threshold=4.0, statistic='avg', evaluation_periods=60, period=1, meter_name='meter.test', query=[{'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']} ]) ), models.Alarm(name='name3', type='threshold', enabled=True, alarm_id='c', description='c', state='insufficient data', state_timestamp=None, timestamp=None, ok_actions=[], insufficient_data_actions=[], alarm_actions=[], repeat_actions=False, user_id=self.auth_headers['X-User-Id'], project_id=self.auth_headers['X-Project-Id'], time_constraints=[], rule=dict(comparison_operator='gt', threshold=3.0, statistic='avg', evaluation_periods=60, period=1, meter_name='meter.mine', query=[{'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']} ]) ), models.Alarm(name='name4', type='combination', enabled=True, alarm_id='d', description='d', state='insufficient data', state_timestamp=None, timestamp=None, ok_actions=[], insufficient_data_actions=[], alarm_actions=[], repeat_actions=False, user_id=self.auth_headers['X-User-Id'], project_id=self.auth_headers['X-Project-Id'], time_constraints=[], rule=dict(alarm_ids=['a', 'b'], operator='or') )]: self.conn.update_alarm(alarm) @staticmethod def _add_default_threshold_rule(alarm): if 'exclude_outliers' not in alarm['threshold_rule']: alarm['threshold_rule']['exclude_outliers'] = False def _verify_alarm(self, json, alarm, expected_name=None): if expected_name and alarm.name != expected_name: self.fail("Alarm not found") self._add_default_threshold_rule(json) for key in json: if key.endswith('_rule'): storage_key = 'rule' else: storage_key = key self.assertEqual(json[key], getattr(alarm, storage_key)) def test_list_alarms(self): data = self.get_json('/alarms') self.assertEqual(4, len(data)) self.assertEqual(set(['name1', 'name2', 'name3', 'name4']), set(r['name'] for r in data)) self.assertEqual(set(['meter.test', 'meter.mine']), set(r['threshold_rule']['meter_name'] for r in data if 'threshold_rule' in r)) self.assertEqual(set(['or']), set(r['combination_rule']['operator'] for r in data if 'combination_rule' in r)) def test_alarms_query_with_timestamp(self): date_time = datetime.datetime(2012, 7, 2, 10, 41) isotime = date_time.isoformat() resp = self.get_json('/alarms', q=[{'field': 'timestamp', 'op': 'gt', 'value': isotime}], expect_errors=True) self.assertEqual(resp.status_code, 400) self.assertEqual(jsonutils.loads(resp.body)['error_message'] ['faultstring'], 'Unknown argument: "timestamp": ' 'not valid for this resource') def test_get_not_existing_alarm(self): resp = self.get_json('/alarms/alarm-id-3', expect_errors=True) self.assertEqual(404, resp.status_code) self.assertEqual("Alarm alarm-id-3 Not Found", jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_get_alarm(self): alarms = self.get_json('/alarms', q=[{'field': 'name', 'value': 'name1', }]) self.assertEqual('name1', alarms[0]['name']) self.assertEqual('meter.test', alarms[0]['threshold_rule']['meter_name']) one = self.get_json('/alarms/%s' % alarms[0]['alarm_id']) self.assertEqual('name1', one['name']) self.assertEqual('meter.test', one['threshold_rule']['meter_name']) self.assertEqual(alarms[0]['alarm_id'], one['alarm_id']) self.assertEqual(alarms[0]['repeat_actions'], one['repeat_actions']) self.assertEqual(alarms[0]['time_constraints'], one['time_constraints']) def test_get_alarm_disabled(self): alarm = models.Alarm(name='disabled', type='combination', enabled=False, alarm_id='d', description='d', state='insufficient data', state_timestamp=None, timestamp=None, ok_actions=[], insufficient_data_actions=[], alarm_actions=[], repeat_actions=False, user_id=self.auth_headers['X-User-Id'], project_id=self.auth_headers['X-Project-Id'], time_constraints=[], rule=dict(alarm_ids=['a', 'b'], operator='or')) self.conn.update_alarm(alarm) alarms = self.get_json('/alarms', q=[{'field': 'enabled', 'value': 'False'}]) self.assertEqual(1, len(alarms)) self.assertEqual('disabled', alarms[0]['name']) one = self.get_json('/alarms/%s' % alarms[0]['alarm_id']) self.assertEqual('disabled', one['name']) def test_get_alarm_combination(self): alarms = self.get_json('/alarms', q=[{'field': 'name', 'value': 'name4', }]) self.assertEqual('name4', alarms[0]['name']) self.assertEqual(['a', 'b'], alarms[0]['combination_rule']['alarm_ids']) self.assertEqual('or', alarms[0]['combination_rule']['operator']) one = self.get_json('/alarms/%s' % alarms[0]['alarm_id']) self.assertEqual('name4', one['name']) self.assertEqual(['a', 'b'], alarms[0]['combination_rule']['alarm_ids']) self.assertEqual('or', alarms[0]['combination_rule']['operator']) self.assertEqual(alarms[0]['alarm_id'], one['alarm_id']) self.assertEqual(alarms[0]['repeat_actions'], one['repeat_actions']) def test_post_alarm_wsme_workaround(self): jsons = { 'type': { 'name': 'missing type', 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 2.0, } }, 'name': { 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 2.0, } }, 'threshold_rule/meter_name': { 'name': 'missing meter_name', 'type': 'threshold', 'threshold_rule': { 'threshold': 2.0, } }, 'threshold_rule/threshold': { 'name': 'missing threshold', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', } }, 'combination_rule/alarm_ids': { 'name': 'missing alarm_ids', 'type': 'combination', 'combination_rule': {} } } for field, json in jsons.iteritems(): resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) self.assertEqual("Invalid input for field/attribute %s." " Value: \'None\'. Mandatory field missing." % field.split('/', 1)[-1], resp.json['error_message']['faultstring']) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_time_constraint_start(self): json = { 'name': 'added_alarm_invalid_constraint_duration', 'type': 'threshold', 'time_constraints': [ { 'name': 'testcons', 'start': '11:00am', 'duration': 10 } ], 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 300.0 } } self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_duplicate_time_constraint_name(self): json = { 'name': 'added_alarm_duplicate_constraint_name', 'type': 'threshold', 'time_constraints': [ { 'name': 'testcons', 'start': '* 11 * * *', 'duration': 10 }, { 'name': 'testcons', 'start': '* * * * *', 'duration': 20 } ], 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 300.0 } } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) self.assertEqual( "Time constraint names must be unique for a given alarm.", resp.json['error_message']['faultstring']) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_time_constraint_duration(self): json = { 'name': 'added_alarm_invalid_constraint_duration', 'type': 'threshold', 'time_constraints': [ { 'name': 'testcons', 'start': '* 11 * * *', 'duration': -1, } ], 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 300.0 } } self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_time_constraint_timezone(self): json = { 'name': 'added_alarm_invalid_constraint_timezone', 'type': 'threshold', 'time_constraints': [ { 'name': 'testcons', 'start': '* 11 * * *', 'duration': 10, 'timezone': 'aaaa' } ], 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 300.0 } } self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_period(self): json = { 'name': 'added_alarm_invalid_period', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'comparison_operator': 'gt', 'threshold': 2.0, 'statistic': 'avg', 'period': -1, } } self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_null_threshold_rule(self): json = { 'name': 'added_alarm_invalid_threshold_rule', 'type': 'threshold', 'threshold_rule': None, 'combination_rule': None, } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) self.assertEqual( "threshold_rule must be set for threshold type alarm", resp.json['error_message']['faultstring']) def test_post_invalid_alarm_statistic(self): json = { 'name': 'added_alarm', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'comparison_operator': 'gt', 'threshold': 2.0, 'statistic': 'magic', } } self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_query(self): json = { 'name': 'added_alarm', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.invalid', 'field': 'gt', 'value': 'value'}], 'comparison_operator': 'gt', 'threshold': 2.0, 'statistic': 'avg', } } self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_query_field_type(self): json = { 'name': 'added_alarm', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.valid', 'op': 'eq', 'value': 'value', 'type': 'blob'}], 'comparison_operator': 'gt', 'threshold': 2.0, 'statistic': 'avg', } } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) expected_error_message = 'The data type blob is not supported.' resp_string = jsonutils.loads(resp.body) fault_string = resp_string['error_message']['faultstring'] self.assertTrue(fault_string.startswith(expected_error_message)) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) def test_post_invalid_alarm_have_multiple_rules(self): json = { 'name': 'added_alarm', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'meter', 'value': 'ameter'}], 'comparison_operator': 'gt', 'threshold': 2.0, }, 'combination_rule': { 'alarm_ids': ['a', 'b'], } } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) self.assertEqual('threshold_rule and combination_rule cannot ' 'be set at the same time', resp.json['error_message']['faultstring']) def test_post_invalid_alarm_timestamp_in_threshold_rule(self): date_time = datetime.datetime(2012, 7, 2, 10, 41) isotime = date_time.isoformat() json = { 'name': 'invalid_alarm', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'timestamp', 'op': 'gt', 'value': isotime}], 'comparison_operator': 'gt', 'threshold': 2.0, } } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(4, len(alarms)) self.assertEqual( 'Unknown argument: "timestamp": ' 'not valid for this resource', resp.json['error_message']['faultstring']) def test_post_alarm_defaults(self): to_check = { 'enabled': True, 'name': 'added_alarm_defaults', 'state': 'insufficient data', 'description': ('Alarm when ameter is eq a avg of ' '300.0 over 60 seconds'), 'type': 'threshold', 'ok_actions': [], 'alarm_actions': [], 'insufficient_data_actions': [], 'repeat_actions': False, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']}], 'threshold': 300.0, 'comparison_operator': 'eq', 'statistic': 'avg', 'evaluation_periods': 1, 'period': 60, } } self._add_default_threshold_rule(to_check) json = { 'name': 'added_alarm_defaults', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'threshold': 300.0 } } self.post_json('/alarms', params=json, status=201, headers=self.auth_headers) alarms = list(self.conn.get_alarms()) self.assertEqual(5, len(alarms)) for alarm in alarms: if alarm.name == 'added_alarm_defaults': for key in to_check: if key.endswith('_rule'): storage_key = 'rule' else: storage_key = key self.assertEqual(to_check[key], getattr(alarm, storage_key)) break else: self.fail("Alarm not found") def test_post_conflict(self): json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': '3', 'period': '180', } } self.post_json('/alarms', params=json, status=201, headers=self.auth_headers) self.post_json('/alarms', params=json, status=409, headers=self.auth_headers) def _do_test_post_alarm(self, exclude_outliers=None): json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': '3', 'period': '180', } } if exclude_outliers is not None: json['threshold_rule']['exclude_outliers'] = exclude_outliers self.post_json('/alarms', params=json, status=201, headers=self.auth_headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) json['threshold_rule']['query'].append({ 'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']}) # to check to IntegerType type conversion json['threshold_rule']['evaluation_periods'] = 3 json['threshold_rule']['period'] = 180 self._verify_alarm(json, alarms[0], 'added_alarm') def test_post_alarm_outlier_exclusion_set(self): self._do_test_post_alarm(True) def test_post_alarm_outlier_exclusion_clear(self): self._do_test_post_alarm(False) def test_post_alarm_outlier_exclusion_defaulted(self): self._do_test_post_alarm() def test_post_alarm_noauth(self): json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': '3', 'exclude_outliers': False, 'period': '180', } } self.post_json('/alarms', params=json, status=201) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) # to check to BoundedInt type conversion json['threshold_rule']['evaluation_periods'] = 3 json['threshold_rule']['period'] = 180 if alarms[0].name == 'added_alarm': for key in json: if key.endswith('_rule'): storage_key = 'rule' else: storage_key = key self.assertEqual(getattr(alarms[0], storage_key), json[key]) else: self.fail("Alarm not found") def _do_test_post_alarm_as_admin(self, explicit_project_constraint): """Test the creation of an alarm as admin for another project.""" json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'user_id': 'auseridthatisnotmine', 'project_id': 'aprojectidthatisnotmine', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } if explicit_project_constraint: project_constraint = {'field': 'project_id', 'op': 'eq', 'value': 'aprojectidthatisnotmine'} json['threshold_rule']['query'].append(project_constraint) headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'admin' self.post_json('/alarms', params=json, status=201, headers=headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) self.assertEqual('auseridthatisnotmine', alarms[0].user_id) self.assertEqual('aprojectidthatisnotmine', alarms[0].project_id) self._add_default_threshold_rule(json) if alarms[0].name == 'added_alarm': for key in json: if key.endswith('_rule'): storage_key = 'rule' if explicit_project_constraint: self.assertEqual(json[key], getattr(alarms[0], storage_key)) else: query = getattr(alarms[0], storage_key).get('query') self.assertEqual(2, len(query)) implicit_constraint = { u'field': u'project_id', u'value': u'aprojectidthatisnotmine', u'op': u'eq' } self.assertEqual(implicit_constraint, query[1]) else: self.assertEqual(json[key], getattr(alarms[0], key)) else: self.fail("Alarm not found") def test_post_alarm_as_admin_explicit_project_constraint(self): """Test the creation of an alarm as admin for another project, with an explicit query constraint on the owner's project ID. """ self._do_test_post_alarm_as_admin(True) def test_post_alarm_as_admin_implicit_project_constraint(self): """Test the creation of an alarm as admin for another project, without an explicit query constraint on the owner's project ID. """ self._do_test_post_alarm_as_admin(False) def test_post_alarm_as_admin_no_user(self): """Test the creation of an alarm as admin for another project but forgetting to set the values. """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'project_id': 'aprojectidthatisnotmine', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}, {'field': 'project_id', 'op': 'eq', 'value': 'aprojectidthatisnotmine'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'admin' self.post_json('/alarms', params=json, status=201, headers=headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) self.assertEqual(self.auth_headers['X-User-Id'], alarms[0].user_id) self.assertEqual('aprojectidthatisnotmine', alarms[0].project_id) self._verify_alarm(json, alarms[0], 'added_alarm') def test_post_alarm_as_admin_no_project(self): """Test the creation of an alarm as admin for another project but forgetting to set the values. """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'user_id': 'auseridthatisnotmine', 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}, {'field': 'project_id', 'op': 'eq', 'value': 'aprojectidthatisnotmine'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'admin' self.post_json('/alarms', params=json, status=201, headers=headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) self.assertEqual('auseridthatisnotmine', alarms[0].user_id) self.assertEqual(self.auth_headers['X-Project-Id'], alarms[0].project_id) self._verify_alarm(json, alarms[0], 'added_alarm') @staticmethod def _alarm_representation_owned_by(identifiers): json = { 'name': 'added_alarm', 'enabled': False, 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } for aspect, id in identifiers.iteritems(): json['%s_id' % aspect] = id return json def _do_test_post_alarm_as_nonadmin_on_behalf_of_another(self, identifiers): """Test that posting an alarm as non-admin on behalf of another user/project fails with an explicit 401 instead of reverting to the requestor's identity. """ json = self._alarm_representation_owned_by(identifiers) headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'demo' resp = self.post_json('/alarms', params=json, status=401, headers=headers) aspect = 'user' if 'user' in identifiers else 'project' params = dict(aspect=aspect, id=identifiers[aspect]) self.assertEqual("Not Authorized to access %(aspect)s %(id)s" % params, jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_post_alarm_as_nonadmin_on_behalf_of_another_user(self): identifiers = dict(user='auseridthatisnotmine') self._do_test_post_alarm_as_nonadmin_on_behalf_of_another(identifiers) def test_post_alarm_as_nonadmin_on_behalf_of_another_project(self): identifiers = dict(project='aprojectidthatisnotmine') self._do_test_post_alarm_as_nonadmin_on_behalf_of_another(identifiers) def test_post_alarm_as_nonadmin_on_behalf_of_another_creds(self): identifiers = dict(user='auseridthatisnotmine', project='aprojectidthatisnotmine') self._do_test_post_alarm_as_nonadmin_on_behalf_of_another(identifiers) def _do_test_post_alarm_as_nonadmin_on_behalf_of_self(self, identifiers): """Test posting an alarm as non-admin on behalf of own user/project creates alarm associated with the requestor's identity. """ json = self._alarm_representation_owned_by(identifiers) headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'demo' self.post_json('/alarms', params=json, status=201, headers=headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) self.assertEqual(alarms[0].user_id, self.auth_headers['X-User-Id']) self.assertEqual(alarms[0].project_id, self.auth_headers['X-Project-Id']) def test_post_alarm_as_nonadmin_on_behalf_of_own_user(self): identifiers = dict(user=self.auth_headers['X-User-Id']) self._do_test_post_alarm_as_nonadmin_on_behalf_of_self(identifiers) def test_post_alarm_as_nonadmin_on_behalf_of_own_project(self): identifiers = dict(project=self.auth_headers['X-Project-Id']) self._do_test_post_alarm_as_nonadmin_on_behalf_of_self(identifiers) def test_post_alarm_as_nonadmin_on_behalf_of_own_creds(self): identifiers = dict(user=self.auth_headers['X-User-Id'], project=self.auth_headers['X-Project-Id']) self._do_test_post_alarm_as_nonadmin_on_behalf_of_self(identifiers) def test_post_alarm_combination(self): json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['a', 'b'], 'operator': 'and', } } self.post_json('/alarms', params=json, status=201, headers=self.auth_headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) if alarms[0].name == 'added_alarm': for key in json: if key.endswith('_rule'): storage_key = 'rule' else: storage_key = key self.assertEqual(json[key], getattr(alarms[0], storage_key)) else: self.fail("Alarm not found") def test_post_combination_alarm_as_user_with_unauthorized_alarm(self): """Test that post a combination alarm as normal user/project with an alarm_id unauthorized for this project/user """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['a', 'b'], 'operator': 'and', } } an_other_user_auth = {'X-User-Id': str(uuid.uuid4()), 'X-Project-Id': str(uuid.uuid4())} resp = self.post_json('/alarms', params=json, status=404, headers=an_other_user_auth) self.assertEqual("Alarm a Not Found", jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_post_combination_alarm_as_admin_on_behalf_of_an_other_user(self): """Test that post a combination alarm as admin on behalf of an other user/project with an alarm_id unauthorized for this project/user """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'user_id': 'auseridthatisnotmine', 'project_id': 'aprojectidthatisnotmine', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['a', 'b'], 'operator': 'and', } } headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'admin' resp = self.post_json('/alarms', params=json, status=404, headers=headers) self.assertEqual("Alarm a Not Found", jsonutils.loads(resp.body)['error_message'] ['faultstring']) def test_post_combination_alarm_with_reasonable_description(self): """Test that post a combination alarm with two blanks around the operator in alarm description. """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['a', 'b'], 'operator': 'and', } } self.post_json('/alarms', params=json, status=201, headers=self.auth_headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(1, len(alarms)) self.assertEqual(u'Combined state of alarms a and b', alarms[0].description) def test_post_combination_alarm_as_admin_success_owner_unset(self): self._do_post_combination_alarm_as_admin_success(False) def test_post_combination_alarm_as_admin_success_owner_set(self): self._do_post_combination_alarm_as_admin_success(True) def test_post_combination_alarm_with_threshold_rule(self): """Test the creation of an combination alarm with threshold rule. """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': '3', 'period': '180', } } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) self.assertEqual( "combination_rule must be set for combination type alarm", resp.json['error_message']['faultstring']) def test_post_threshold_alarm_with_combination_rule(self): """Test the creation of an threshold alarm with combination rule. """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['a', 'b'], 'operator': 'and', } } resp = self.post_json('/alarms', params=json, expect_errors=True, status=400, headers=self.auth_headers) self.assertEqual( "threshold_rule must be set for threshold type alarm", resp.json['error_message']['faultstring']) def _do_post_combination_alarm_as_admin_success(self, owner_is_set): """Test that post a combination alarm as admin on behalf of nobody with an alarm_id of someone else, with owner set or not """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['a', 'b'], 'operator': 'and', } } an_other_admin_auth = {'X-User-Id': str(uuid.uuid4()), 'X-Project-Id': str(uuid.uuid4()), 'X-Roles': 'admin'} if owner_is_set: json['project_id'] = an_other_admin_auth['X-Project-Id'] json['user_id'] = an_other_admin_auth['X-User-Id'] self.post_json('/alarms', params=json, status=201, headers=an_other_admin_auth) alarms = list(self.conn.get_alarms(enabled=False)) if alarms[0].name == 'added_alarm': for key in json: if key.endswith('_rule'): storage_key = 'rule' else: storage_key = key self.assertEqual(json[key], getattr(alarms[0], storage_key)) else: self.fail("Alarm not found") def test_post_invalid_alarm_combination(self): """Test that post a combination alarm with a not existing alarm id """ json = { 'enabled': False, 'name': 'added_alarm', 'state': 'ok', 'type': 'combination', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'combination_rule': { 'alarm_ids': ['not_exists', 'b'], 'operator': 'and', } } self.post_json('/alarms', params=json, status=404, headers=self.auth_headers) alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(0, len(alarms)) def test_put_alarm(self): json = { 'enabled': False, 'name': 'name_put', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } data = self.get_json('/alarms', q=[{'field': 'name', 'value': 'name1', }]) self.assertEqual(1, len(data)) alarm_id = data[0]['alarm_id'] self.put_json('/alarms/%s' % alarm_id, params=json, headers=self.auth_headers) alarm = list(self.conn.get_alarms(alarm_id=alarm_id, enabled=False))[0] json['threshold_rule']['query'].append({ 'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']}) self._verify_alarm(json, alarm) def test_put_alarm_as_admin(self): json = { 'user_id': 'myuserid', 'project_id': 'myprojectid', 'enabled': False, 'name': 'name_put', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}, {'field': 'project_id', 'op': 'eq', 'value': 'myprojectid'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } headers = {} headers.update(self.auth_headers) headers['X-Roles'] = 'admin' data = self.get_json('/alarms', headers=headers, q=[{'field': 'name', 'value': 'name1', }]) self.assertEqual(1, len(data)) alarm_id = data[0]['alarm_id'] self.put_json('/alarms/%s' % alarm_id, params=json, headers=headers) alarm = list(self.conn.get_alarms(alarm_id=alarm_id, enabled=False))[0] self.assertEqual('myuserid', alarm.user_id) self.assertEqual('myprojectid', alarm.project_id) self._verify_alarm(json, alarm) def test_put_alarm_wrong_field(self): # Note: wsme will ignore unknown fields so will just not appear in # the Alarm. json = { 'this_can_not_be_correct': 'ha', 'enabled': False, 'name': 'name1', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } data = self.get_json('/alarms', q=[{'field': 'name', 'value': 'name1', }]) self.assertEqual(1, len(data)) alarm_id = data[0]['alarm_id'] resp = self.put_json('/alarms/%s' % alarm_id, params=json, headers=self.auth_headers) self.assertEqual(200, resp.status_code) def test_put_alarm_with_existing_name(self): """Test that update a threshold alarm with an existing name. """ json = { 'enabled': False, 'name': 'name1', 'state': 'ok', 'type': 'threshold', 'ok_actions': ['http://something/ok'], 'alarm_actions': ['http://something/alarm'], 'insufficient_data_actions': ['http://something/no'], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'ameter', 'query': [{'field': 'metadata.field', 'op': 'eq', 'value': '5', 'type': 'string'}], 'comparison_operator': 'le', 'statistic': 'count', 'threshold': 50, 'evaluation_periods': 3, 'period': 180, } } data = self.get_json('/alarms', q=[{'field': 'name', 'value': 'name2', }]) self.assertEqual(1, len(data)) alarm_id = data[0]['alarm_id'] resp = self.put_json('/alarms/%s' % alarm_id, expect_errors=True, status=409, params=json, headers=self.auth_headers) self.assertEqual( 'Alarm with name=name1 exists', resp.json['error_message']['faultstring']) def test_delete_alarm(self): data = self.get_json('/alarms') self.assertEqual(4, len(data)) resp = self.delete('/alarms/%s' % data[0]['alarm_id'], headers=self.auth_headers, status=204) self.assertEqual('', resp.body) alarms = list(self.conn.get_alarms()) self.assertEqual(3, len(alarms)) def test_get_state_alarm(self): data = self.get_json('/alarms') self.assertEqual(4, len(data)) resp = self.get_json('/alarms/%s/state' % data[0]['alarm_id'], headers=self.auth_headers) self.assertEqual(resp, data[0]['state']) def test_set_state_alarm(self): data = self.get_json('/alarms') self.assertEqual(4, len(data)) resp = self.put_json('/alarms/%s/state' % data[0]['alarm_id'], headers=self.auth_headers, params='alarm') alarms = list(self.conn.get_alarms(alarm_id=data[0]['alarm_id'])) self.assertEqual(1, len(alarms)) self.assertEqual('alarm', alarms[0].state) self.assertEqual('alarm', resp.json) def test_set_invalid_state_alarm(self): data = self.get_json('/alarms') self.assertEqual(4, len(data)) self.put_json('/alarms/%s/state' % data[0]['alarm_id'], headers=self.auth_headers, params='not valid', status=400) def _get_alarm(self, id): data = self.get_json('/alarms') match = [a for a in data if a['alarm_id'] == id] self.assertEqual(1, len(match), 'alarm %s not found' % id) return match[0] def _get_alarm_history(self, alarm, auth_headers=None, query=None, expect_errors=False, status=200): url = '/alarms/%s/history' % alarm['alarm_id'] if query: url += '?q.op=%(op)s&q.value=%(value)s&q.field=%(field)s' % query resp = self.get_json(url, headers=auth_headers or self.auth_headers, expect_errors=expect_errors) if expect_errors: self.assertEqual(status, resp.status_code) return resp def _update_alarm(self, alarm, updated_data, auth_headers=None): data = self._get_alarm(alarm['alarm_id']) data.update(updated_data) self.put_json('/alarms/%s' % alarm['alarm_id'], params=data, headers=auth_headers or self.auth_headers) def _delete_alarm(self, alarm, auth_headers=None): self.delete('/alarms/%s' % alarm['alarm_id'], headers=auth_headers or self.auth_headers, status=204) def _assert_is_subset(self, expected, actual): for k, v in expected.iteritems(): self.assertEqual(v, actual.get(k), 'mismatched field: %s' % k) self.assertIsNotNone(actual['event_id']) def _assert_in_json(self, expected, actual): actual = jsonutils.dumps(jsonutils.loads(actual), sort_keys=True) for k, v in expected.iteritems(): fragment = jsonutils.dumps({k: v}, sort_keys=True)[1:-1] self.assertTrue(fragment in actual, '%s not in %s' % (fragment, actual)) def test_record_alarm_history_config(self): self.CONF.set_override('record_history', False, group='alarm') alarm = self._get_alarm('a') history = self._get_alarm_history(alarm) self.assertEqual([], history) self._update_alarm(alarm, dict(name='renamed')) history = self._get_alarm_history(alarm) self.assertEqual([], history) self.CONF.set_override('record_history', True, group='alarm') self._update_alarm(alarm, dict(name='foobar')) history = self._get_alarm_history(alarm) self.assertEqual(1, len(history)) def test_get_recorded_alarm_history_on_create(self): new_alarm = { 'name': 'new_alarm', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'query': [], 'comparison_operator': 'le', 'statistic': 'max', 'threshold': 42.0, 'period': 60, 'evaluation_periods': 1, } } self.post_json('/alarms', params=new_alarm, status=201, headers=self.auth_headers) alarms = self.get_json('/alarms', q=[{'field': 'name', 'value': 'new_alarm', }]) self.assertEqual(1, len(alarms)) alarm = alarms[0] history = self._get_alarm_history(alarm) self.assertEqual(1, len(history)) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], on_behalf_of=alarm['project_id'], project_id=alarm['project_id'], type='creation', user_id=alarm['user_id']), history[0]) self._add_default_threshold_rule(new_alarm) new_alarm['rule'] = new_alarm['threshold_rule'] del new_alarm['threshold_rule'] new_alarm['rule']['query'].append({ 'field': 'project_id', 'op': 'eq', 'value': self.auth_headers['X-Project-Id']}) self._assert_in_json(new_alarm, history[0]['detail']) def _do_test_get_recorded_alarm_history_on_update(self, data, type, detail, auth=None): alarm = self._get_alarm('a') history = self._get_alarm_history(alarm) self.assertEqual([], history) self._update_alarm(alarm, data, auth) history = self._get_alarm_history(alarm) self.assertEqual(1, len(history)) project_id = auth['X-Project-Id'] if auth else alarm['project_id'] user_id = auth['X-User-Id'] if auth else alarm['user_id'] self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], detail=detail, on_behalf_of=alarm['project_id'], project_id=project_id, type=type, user_id=user_id), history[0]) def test_get_recorded_alarm_history_rule_change(self): data = dict(name='renamed') detail = '{"name": "renamed"}' self._do_test_get_recorded_alarm_history_on_update(data, 'rule change', detail) def test_get_recorded_alarm_history_state_transition_on_behalf_of(self): # credentials for new non-admin user, on who's behalf the alarm # is created member_user = str(uuid.uuid4()) member_project = str(uuid.uuid4()) member_auth = {'X-Roles': 'member', 'X-User-Id': member_user, 'X-Project-Id': member_project} new_alarm = { 'name': 'new_alarm', 'type': 'threshold', 'state': 'ok', 'threshold_rule': { 'meter_name': 'other_meter', 'query': [{'field': 'project_id', 'op': 'eq', 'value': member_project}], 'comparison_operator': 'le', 'statistic': 'max', 'threshold': 42.0, 'evaluation_periods': 1, 'period': 60 } } self.post_json('/alarms', params=new_alarm, status=201, headers=member_auth) alarm = self.get_json('/alarms', headers=member_auth)[0] # effect a state transition as a new administrative user admin_user = str(uuid.uuid4()) admin_project = str(uuid.uuid4()) admin_auth = {'X-Roles': 'admin', 'X-User-Id': admin_user, 'X-Project-Id': admin_project} data = dict(state='alarm') self._update_alarm(alarm, data, auth_headers=admin_auth) self._add_default_threshold_rule(new_alarm) new_alarm['rule'] = new_alarm['threshold_rule'] del new_alarm['threshold_rule'] # ensure that both the creation event and state transition # are visible to the non-admin alarm owner and admin user alike for auth in [member_auth, admin_auth]: history = self._get_alarm_history(alarm, auth_headers=auth) self.assertEqual(2, len(history), 'hist: %s' % history) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], detail='{"state": "alarm"}', on_behalf_of=alarm['project_id'], project_id=admin_project, type='rule change', user_id=admin_user), history[0]) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], on_behalf_of=alarm['project_id'], project_id=member_project, type='creation', user_id=member_user), history[1]) self._assert_in_json(new_alarm, history[1]['detail']) # ensure on_behalf_of cannot be constrained in an API call query = dict(field='on_behalf_of', op='eq', value=alarm['project_id']) self._get_alarm_history(alarm, auth_headers=auth, query=query, expect_errors=True, status=400) def test_get_recorded_alarm_history_segregation(self): data = dict(name='renamed') detail = '{"name": "renamed"}' self._do_test_get_recorded_alarm_history_on_update(data, 'rule change', detail) auth = {'X-Roles': 'member', 'X-User-Id': str(uuid.uuid4()), 'X-Project-Id': str(uuid.uuid4())} history = self._get_alarm_history(self._get_alarm('a'), auth) self.assertEqual([], history) def test_get_recorded_alarm_history_preserved_after_deletion(self): alarm = self._get_alarm('a') history = self._get_alarm_history(alarm) self.assertEqual([], history) self._update_alarm(alarm, dict(name='renamed')) history = self._get_alarm_history(alarm) self.assertEqual(1, len(history)) alarm = self._get_alarm('a') self.delete('/alarms/%s' % alarm['alarm_id'], headers=self.auth_headers, status=204) history = self._get_alarm_history(alarm) self.assertEqual(2, len(history)) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], on_behalf_of=alarm['project_id'], project_id=alarm['project_id'], type='deletion', user_id=alarm['user_id']), history[0]) alarm['rule'] = alarm['threshold_rule'] del alarm['threshold_rule'] self._assert_in_json(alarm, history[0]['detail']) detail = '{"name": "renamed"}' self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], detail=detail, on_behalf_of=alarm['project_id'], project_id=alarm['project_id'], type='rule change', user_id=alarm['user_id']), history[1]) def test_get_alarm_history_ordered_by_recentness(self): alarm = self._get_alarm('a') for i in moves.xrange(10): self._update_alarm(alarm, dict(name='%s' % i)) alarm = self._get_alarm('a') self._delete_alarm(alarm) history = self._get_alarm_history(alarm) self.assertEqual(11, len(history), 'hist: %s' % history) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], type='deletion'), history[0]) alarm['rule'] = alarm['threshold_rule'] del alarm['threshold_rule'] self._assert_in_json(alarm, history[0]['detail']) for i in moves.xrange(1, 10): detail = '{"name": "%s"}' % (10 - i) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], detail=detail, type='rule change'), history[i]) def test_get_alarm_history_constrained_by_timestamp(self): alarm = self._get_alarm('a') self._update_alarm(alarm, dict(name='renamed')) after = datetime.datetime.utcnow().isoformat() query = dict(field='timestamp', op='gt', value=after) history = self._get_alarm_history(alarm, query=query) self.assertEqual(0, len(history)) query['op'] = 'le' history = self._get_alarm_history(alarm, query=query) self.assertEqual(1, len(history)) detail = '{"name": "renamed"}' self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], detail=detail, on_behalf_of=alarm['project_id'], project_id=alarm['project_id'], type='rule change', user_id=alarm['user_id']), history[0]) def test_get_alarm_history_constrained_by_type(self): alarm = self._get_alarm('a') self._delete_alarm(alarm) query = dict(field='type', op='eq', value='deletion') history = self._get_alarm_history(alarm, query=query) self.assertEqual(1, len(history)) self._assert_is_subset(dict(alarm_id=alarm['alarm_id'], on_behalf_of=alarm['project_id'], project_id=alarm['project_id'], type='deletion', user_id=alarm['user_id']), history[0]) alarm['rule'] = alarm['threshold_rule'] del alarm['threshold_rule'] self._assert_in_json(alarm, history[0]['detail']) def test_get_nonexistent_alarm_history(self): # the existence of alarm history is independent of the # continued existence of the alarm itself history = self._get_alarm_history(dict(alarm_id='foobar')) self.assertEqual([], history) def test_alarms_sends_notification(self): # Hit the AlarmsController ... json = { 'name': 'sent_notification', 'type': 'threshold', 'threshold_rule': { 'meter_name': 'ameter', 'comparison_operator': 'gt', 'threshold': 2.0, 'statistic': 'avg', } } with mock.patch('ceilometer.openstack.common.notifier.api.notify') \ as notifier: self.post_json('/alarms', params=json, headers=self.auth_headers) calls = notifier.call_args_list self.assertEqual(1, len(calls)) args, _ = calls[0] context, publisher, event_type, priority, payload = args self.assertTrue(publisher.startswith('ceilometer.api')) self.assertEqual('alarm.creation', event_type) self.assertEqual('INFO', priority) self.assertEqual('sent_notification', payload['detail']['name']) self.assertTrue(set(['alarm_id', 'detail', 'event_id', 'on_behalf_of', 'project_id', 'timestamp', 'type', 'user_id']).issubset(payload.keys())) def test_alarm_sends_notification(self): # Hit the AlarmController (with alarm_id supplied) ... data = self.get_json('/alarms') with mock.patch('ceilometer.openstack.common.notifier.api.notify') \ as notifier: self.delete('/alarms/%s' % data[0]['alarm_id'], headers=self.auth_headers, status=204) calls = notifier.call_args_list self.assertEqual(1, len(calls)) args, _ = calls[0] context, publisher, event_type, priority, payload = args self.assertTrue(publisher.startswith('ceilometer.api')) self.assertEqual('alarm.deletion', event_type) self.assertEqual('INFO', priority) self.assertEqual('name1', payload['detail']['name']) self.assertTrue(set(['alarm_id', 'detail', 'event_id', 'on_behalf_of', 'project_id', 'timestamp', 'type', 'user_id']).issubset(payload.keys())) ceilometer-2014.1/ceilometer/tests/api/v2/test_complex_query.py0000664000175300017540000004042112323717130025765 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright Ericsson AB 2013. All rights reserved # # Authors: Ildiko Vancsa # Balazs Gibizer # # 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. """Test the methods related to complex query.""" import datetime import fixtures import jsonschema import mock import wsme from ceilometer.api.controllers import v2 as api from ceilometer.openstack.common import test from ceilometer import storage as storage class FakeComplexQuery(api.ValidatedComplexQuery): def __init__(self, db_model, additional_name_mapping={}, metadata=False): super(FakeComplexQuery, self).__init__(query=None, db_model=db_model, additional_name_mapping= additional_name_mapping, metadata_allowed=metadata) sample_name_mapping = {"resource": "resource_id", "meter": "counter_name", "type": "counter_type", "unit": "counter_unit", "volume": "counter_volume"} class TestComplexQuery(test.BaseTestCase): def setUp(self): super(TestComplexQuery, self).setUp() self.useFixture(fixtures.MonkeyPatch( 'pecan.response', mock.MagicMock())) self.query = FakeComplexQuery(storage.models.Sample, sample_name_mapping, True) self.query_alarm = FakeComplexQuery(storage.models.Alarm) self.query_alarmchange = FakeComplexQuery( storage.models.AlarmChange) def test_replace_isotime_utc(self): filter_expr = {"=": {"timestamp": "2013-12-05T19:38:29Z"}} self.query._replace_isotime_with_datetime(filter_expr) self.assertEqual(datetime.datetime(2013, 12, 5, 19, 38, 29), filter_expr["="]["timestamp"]) def test_replace_isotime_timezone_removed(self): filter_expr = {"=": {"timestamp": "2013-12-05T20:38:29+01:00"}} self.query._replace_isotime_with_datetime(filter_expr) self.assertEqual(datetime.datetime(2013, 12, 5, 20, 38, 29), filter_expr["="]["timestamp"]) def test_replace_isotime_wrong_syntax(self): filter_expr = {"=": {"timestamp": "not a valid isotime string"}} self.assertRaises(wsme.exc.ClientSideError, self.query._replace_isotime_with_datetime, filter_expr) def test_replace_isotime_in_complex_filter(self): filter_expr = {"and": [{"=": {"timestamp": "2013-12-05T19:38:29Z"}}, {"=": {"timestamp": "2013-12-06T19:38:29Z"}}]} self.query._replace_isotime_with_datetime(filter_expr) self.assertEqual(datetime.datetime(2013, 12, 5, 19, 38, 29), filter_expr["and"][0]["="]["timestamp"]) self.assertEqual(datetime.datetime(2013, 12, 6, 19, 38, 29), filter_expr["and"][1]["="]["timestamp"]) def test_replace_isotime_in_complex_filter_with_unbalanced_tree(self): subfilter = {"and": [{"=": {"project_id": 42}}, {"=": {"timestamp": "2013-12-06T19:38:29Z"}}]} filter_expr = {"or": [{"=": {"timestamp": "2013-12-05T19:38:29Z"}}, subfilter]} self.query._replace_isotime_with_datetime(filter_expr) self.assertEqual(datetime.datetime(2013, 12, 5, 19, 38, 29), filter_expr["or"][0]["="]["timestamp"]) self.assertEqual(datetime.datetime(2013, 12, 6, 19, 38, 29), filter_expr["or"][1]["and"][1]["="]["timestamp"]) def test_convert_operator_to_lower_case(self): filter_expr = {"AND": [{"=": {"project_id": 42}}, {"=": {"project_id": 44}}]} self.query._convert_operator_to_lower_case(filter_expr) self.assertEqual("and", filter_expr.keys()[0]) filter_expr = {"Or": [{"=": {"project_id": 43}}, {"anD": [{"=": {"project_id": 44}}, {"=": {"project_id": 42}}]}]} self.query._convert_operator_to_lower_case(filter_expr) self.assertEqual("or", filter_expr.keys()[0]) self.assertEqual("and", filter_expr["or"][1].keys()[0]) def test_invalid_filter_misstyped_field_name_samples(self): filter = {"=": {"project_id11": 42}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_invalid_filter_misstyped_field_name_alarms(self): filter = {"=": {"enabbled": True}} self.assertRaises(jsonschema.ValidationError, self.query_alarm._validate_filter, filter) def test_invalid_filter_misstyped_field_name_alarmchange(self): filter = {"=": {"tpe": "rule change"}} self.assertRaises(jsonschema.ValidationError, self.query_alarmchange._validate_filter, filter) def test_invalid_complex_filter_wrong_field_names(self): filter = {"and": [{"=": {"non_existing_field": 42}}, {"=": {"project_id": 42}}]} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) filter = {"and": [{"=": {"project_id": 42}}, {"=": {"non_existing_field": 42}}]} self.assertRaises(jsonschema.ValidationError, self.query_alarm._validate_filter, filter) filter = {"and": [{"=": {"project_id11": 42}}, {"=": {"project_id": 42}}]} self.assertRaises(jsonschema.ValidationError, self.query_alarmchange._validate_filter, filter) filter = {"or": [{"=": {"non_existing_field": 42}}, {"and": [{"=": {"project_id": 44}}, {"=": {"project_id": 42}}]}]} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) filter = {"or": [{"=": {"project_id": 43}}, {"and": [{"=": {"project_id": 44}}, {"=": {"non_existing_field": 42}}]}]} self.assertRaises(jsonschema.ValidationError, self.query_alarm._validate_filter, filter) def test_convert_orderby(self): orderby = [] self.query._convert_orderby_to_lower_case(orderby) self.assertEqual([], orderby) orderby = [{"project_id": "DESC"}] self.query._convert_orderby_to_lower_case(orderby) self.assertEqual([{"project_id": "desc"}], orderby) orderby = [{"project_id": "ASC"}, {"resource_id": "DESC"}] self.query._convert_orderby_to_lower_case(orderby) self.assertEqual([{"project_id": "asc"}, {"resource_id": "desc"}], orderby) def test_validate_orderby_empty_direction(self): orderby = [{"project_id": ""}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) orderby = [{"project_id": "asc"}, {"resource_id": ""}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) def test_validate_orderby_wrong_order_string(self): orderby = [{"project_id": "not a valid order"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) def test_validate_orderby_wrong_multiple_item_order_string(self): orderby = [{"project_id": "not a valid order"}, {"resource_id": "ASC"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) def test_validate_orderby_empty_field_name(self): orderby = [{"": "ASC"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) orderby = [{"project_id": "asc"}, {"": "desc"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) def test_validate_orderby_wrong_field_name(self): orderby = [{"project_id11": "ASC"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) def test_validate_orderby_wrong_field_name_multiple_item_orderby(self): orderby = [{"project_id": "asc"}, {"resource_id11": "ASC"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) def test_validate_orderby_metadata_is_not_allowed(self): orderby = [{"metadata.display_name": "asc"}] self.assertRaises(jsonschema.ValidationError, self.query._validate_orderby, orderby) class TestFilterSyntaxValidation(test.BaseTestCase): def setUp(self): super(TestFilterSyntaxValidation, self).setUp() self.query = FakeComplexQuery(storage.models.Sample, sample_name_mapping, True) def test_simple_operator(self): filter = {"=": {"project_id": "string_value"}} self.query._validate_filter(filter) filter = {"=>": {"project_id": "string_value"}} self.query._validate_filter(filter) def test_valid_value_types(self): filter = {"=": {"project_id": "string_value"}} self.query._validate_filter(filter) filter = {"=": {"project_id": 42}} self.query._validate_filter(filter) filter = {"=": {"project_id": 3.14}} self.query._validate_filter(filter) filter = {"=": {"project_id": True}} self.query._validate_filter(filter) filter = {"=": {"project_id": False}} self.query._validate_filter(filter) def test_invalid_simple_operator(self): filter = {"==": {"project_id": "string_value"}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) filter = {"": {"project_id": "string_value"}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_more_than_one_operator_is_invalid(self): filter = {"=": {"project_id": "string_value"}, "<": {"": ""}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_empty_expression_is_invalid(self): filter = {} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_invalid_field_name(self): filter = {"=": {"": "value"}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) filter = {"=": {" ": "value"}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) filter = {"=": {"\t": "value"}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_more_than_one_field_is_invalid(self): filter = {"=": {"project_id": "value", "resource_id": "value"}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_missing_field_after_simple_op_is_invalid(self): filter = {"=": {}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_and_or(self): filter = {"and": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}]} self.query._validate_filter(filter) filter = {"or": [{"and": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}]}, {"=": {"counter_name": "value"}}]} self.query._validate_filter(filter) filter = {"or": [{"and": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}, {"<": {"counter_name": 42}}]}, {"=": {"counter_name": "value"}}]} self.query._validate_filter(filter) def test_complex_operator_with_in(self): filter = {"and": [{"<": {"counter_volume": 42}}, {">=": {"counter_volume": 36}}, {"in": {"project_id": ["project_id1", "project_id2", "project_id3"]}}]} self.query._validate_filter(filter) def test_invalid_complex_operator(self): filter = {"xor": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}]} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_and_or_with_one_child_is_invalid(self): filter = {"or": [{"=": {"project_id": "string_value"}}]} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_complex_operator_with_zero_child_is_invalid(self): filter = {"or": []} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_more_than_one_complex_operator_is_invalid(self): filter = {"and": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}], "or": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}]} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_not(self): filter = {"not": {"=": {"project_id": "value"}}} self.query._validate_filter(filter) filter = { "not": {"or": [{"and": [{"=": {"project_id": "string_value"}}, {"=": {"resource_id": "value"}}, {"<": {"counter_name": 42}}]}, {"=": {"counter_name": "value"}}]}} self.query._validate_filter(filter) def test_not_with_zero_child_is_invalid(self): filter = {"not": {}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) def test_not_with_more_than_one_child_is_invalid(self): filter = {"not": {"=": {"project_id": "value"}, "!=": {"resource_id": "value"}}} self.assertRaises(jsonschema.ValidationError, self.query._validate_filter, filter) ceilometer-2014.1/ceilometer/tests/api/v2/test_compute_duration_by_resource_scenarios.py0000664000175300017540000001755012323717132033132 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Test listing raw events. """ import datetime import logging import mock import testscenarios from ceilometer.openstack.common import timeutils from ceilometer.storage import models from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestComputeDurationByResource(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestComputeDurationByResource, self).setUp() # Create events relative to the range and pretend # that the intervening events exist. self.early1 = datetime.datetime(2012, 8, 27, 7, 0) self.early2 = datetime.datetime(2012, 8, 27, 17, 0) self.start = datetime.datetime(2012, 8, 28, 0, 0) self.middle1 = datetime.datetime(2012, 8, 28, 8, 0) self.middle2 = datetime.datetime(2012, 8, 28, 18, 0) self.end = datetime.datetime(2012, 8, 28, 23, 59) self.late1 = datetime.datetime(2012, 8, 29, 9, 0) self.late2 = datetime.datetime(2012, 8, 29, 19, 0) def _patch_get_interval(self, start, end): def get_interval(event_filter, period, groupby, aggregate): assert event_filter.start assert event_filter.end if (event_filter.start > end or event_filter.end < start): return [] duration_start = max(event_filter.start, start) duration_end = min(event_filter.end, end) duration = timeutils.delta_seconds(duration_start, duration_end) return [ models.Statistics( unit='', min=0, max=0, avg=0, sum=0, count=0, period=None, period_start=None, period_end=None, duration=duration, duration_start=duration_start, duration_end=duration_end, groupby=None, ) ] return mock.patch.object(type(self.conn), 'get_meter_statistics', side_effect=get_interval) def _invoke_api(self): return self.get_json('/meters/instance:m1.tiny/statistics', q=[{'field': 'timestamp', 'op': 'ge', 'value': self.start.isoformat()}, {'field': 'timestamp', 'op': 'le', 'value': self.end.isoformat()}, {'field': 'search_offset', 'value': 10}]) def test_before_range(self): with self._patch_get_interval(self.early1, self.early2): data = self._invoke_api() self.assertEqual([], data) def _assert_times_match(self, actual, expected): if actual: actual = timeutils.parse_isotime(actual) actual = actual.replace(tzinfo=None) self.assertEqual(expected, actual) def test_overlap_range_start(self): with self._patch_get_interval(self.early1, self.middle1): data = self._invoke_api() self._assert_times_match(data[0]['duration_start'], self.start) self._assert_times_match(data[0]['duration_end'], self.middle1) self.assertEqual(8 * 60 * 60, data[0]['duration']) def test_within_range(self): with self._patch_get_interval(self.middle1, self.middle2): data = self._invoke_api() self._assert_times_match(data[0]['duration_start'], self.middle1) self._assert_times_match(data[0]['duration_end'], self.middle2) self.assertEqual(10 * 60 * 60, data[0]['duration']) def test_within_range_zero_duration(self): with self._patch_get_interval(self.middle1, self.middle1): data = self._invoke_api() self._assert_times_match(data[0]['duration_start'], self.middle1) self._assert_times_match(data[0]['duration_end'], self.middle1) self.assertEqual(0, data[0]['duration']) def test_overlap_range_end(self): with self._patch_get_interval(self.middle2, self.late1): data = self._invoke_api() self._assert_times_match(data[0]['duration_start'], self.middle2) self._assert_times_match(data[0]['duration_end'], self.end) self.assertEqual(((6 * 60) - 1) * 60, data[0]['duration']) def test_after_range(self): with self._patch_get_interval(self.late1, self.late2): data = self._invoke_api() self.assertEqual([], data) def test_without_end_timestamp(self): statistics = [ models.Statistics( unit=None, count=0, min=None, max=None, avg=None, duration=None, duration_start=self.late1, duration_end=self.late2, sum=0, period=None, period_start=None, period_end=None, groupby=None, ) ] with mock.patch.object(type(self.conn), 'get_meter_statistics', return_value=statistics): data = self.get_json('/meters/instance:m1.tiny/statistics', q=[{'field': 'timestamp', 'op': 'ge', 'value': self.late1.isoformat()}, {'field': 'resource_id', 'value': 'resource-id'}, {'field': 'search_offset', 'value': 10}]) self._assert_times_match(data[0]['duration_start'], self.late1) self._assert_times_match(data[0]['duration_end'], self.late2) def test_without_start_timestamp(self): statistics = [ models.Statistics( unit=None, count=0, min=None, max=None, avg=None, duration=None, duration_start=self.early1, duration_end=self.early2, sum=0, period=None, period_start=None, period_end=None, groupby=None, ) ] with mock.patch.object(type(self.conn), 'get_meter_statistics', return_value=statistics): data = self.get_json('/meters/instance:m1.tiny/statistics', q=[{'field': 'timestamp', 'op': 'le', 'value': self.early2.isoformat()}, {'field': 'resource_id', 'value': 'resource-id'}, {'field': 'search_offset', 'value': 10}]) self._assert_times_match(data[0]['duration_start'], self.early1) self._assert_times_match(data[0]['duration_end'], self.early2) ceilometer-2014.1/ceilometer/tests/api/v2/test_acl_scenarios.py0000664000175300017540000002251312323717132025702 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Julien Danjou # # 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. """Test ACL.""" import datetime import json import testscenarios from ceilometer.api import acl from ceilometer.api.controllers import v2 as v2_api from ceilometer.openstack.common import timeutils from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests.api.v2 import FunctionalTest from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios VALID_TOKEN = '4562138218392831' VALID_TOKEN2 = '4562138218392832' class FakeMemcache(object): @staticmethod def get(key): if key == "tokens/%s" % VALID_TOKEN: dt = timeutils.utcnow() + datetime.timedelta(minutes=5) return json.dumps(({'access': { 'token': {'id': VALID_TOKEN}, 'user': { 'id': 'user_id1', 'name': 'user_name1', 'tenantId': '123i2910', 'tenantName': 'mytenant', 'roles': [ {'name': 'admin'}, ]}, }}, timeutils.isotime(dt))) if key == "tokens/%s" % VALID_TOKEN2: dt = timeutils.utcnow() + datetime.timedelta(minutes=5) return json.dumps(({'access': { 'token': {'id': VALID_TOKEN2}, 'user': { 'id': 'user_id2', 'name': 'user-good', 'tenantId': 'project-good', 'tenantName': 'goodies', 'roles': [ {'name': 'Member'}, ]}, }}, timeutils.isotime(dt))) @staticmethod def set(key, value, **kwargs): pass class TestAPIACL(FunctionalTest, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestAPIACL, self).setUp() self.environ = {'fake.cache': FakeMemcache()} for cnt in [ sample.Sample( 'meter.test', 'cumulative', '', 1, 'user-good', 'project-good', 'resource-good', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='test_source'), sample.Sample( 'meter.mine', 'gauge', '', 1, 'user-fred', 'project-good', 'resource-56', timestamp=datetime.datetime(2012, 7, 2, 10, 43), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample4'}, source='test_source')]: msg = utils.meter_message_from_counter( cnt, self.CONF.publisher.metering_secret) self.conn.record_metering_data(msg) def get_json(self, path, expect_errors=False, headers=None, q=[], **params): return super(TestAPIACL, self).get_json(path, expect_errors=expect_errors, headers=headers, q=q, extra_environ=self.environ, **params) def _make_app(self): self.CONF.set_override("cache", "fake.cache", group=acl.OPT_GROUP_NAME) return super(TestAPIACL, self)._make_app(enable_acl=True) def test_non_authenticated(self): response = self.get_json('/meters', expect_errors=True) self.assertEqual(401, response.status_int) def test_authenticated_wrong_role(self): response = self.get_json('/meters', expect_errors=True, headers={ "X-Roles": "Member", "X-Tenant-Name": "admin", "X-Project-Id": "bc23a9d531064583ace8f67dad60f6bb", }) self.assertEqual(401, response.status_int) # FIXME(dhellmann): This test is not properly looking at the tenant # info. We do not correctly detect the improper tenant. That's # really something the keystone middleware would have to do using # the incoming token, which we aren't providing. # # def test_authenticated_wrong_tenant(self): # response = self.get_json('/meters', # expect_errors=True, # headers={ # "X-Roles": "admin", # "X-Tenant-Name": "achoo", # "X-Project-Id": "bc23a9d531064583ace8f67dad60f6bb", # }) # self.assertEqual(401, response.status_int) def test_authenticated(self): data = self.get_json('/meters', headers={"X-Auth-Token": VALID_TOKEN, "X-Roles": "admin", "X-Tenant-Name": "admin", "X-Project-Id": "bc23a9d531064583ace8f67dad60f6bb", }) ids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-good', 'resource-56']), ids) def test_with_non_admin_missing_project_query(self): data = self.get_json('/meters', headers={"X-Roles": "Member", "X-Auth-Token": VALID_TOKEN2, "X-Project-Id": "project-good"}) ids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-good', 'resource-56']), ids) def test_with_non_admin(self): data = self.get_json('/meters', headers={"X-Roles": "Member", "X-Auth-Token": VALID_TOKEN2, "X-Project-Id": "project-good"}, q=[{'field': 'project_id', 'value': 'project-good', }]) ids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-good', 'resource-56']), ids) def test_non_admin_wrong_project(self): data = self.get_json('/meters', expect_errors=True, headers={"X-Roles": "Member", "X-Auth-Token": VALID_TOKEN2, "X-Project-Id": "project-good"}, q=[{'field': 'project_id', 'value': 'project-wrong', }]) self.assertEqual(401, data.status_int) def test_non_admin_two_projects(self): data = self.get_json('/meters', expect_errors=True, headers={"X-Roles": "Member", "X-Auth-Token": VALID_TOKEN2, "X-Project-Id": "project-good"}, q=[{'field': 'project_id', 'value': 'project-good', }, {'field': 'project_id', 'value': 'project-naughty', }]) self.assertEqual(401, data.status_int) def test_non_admin_get_events(self): # NOTE(herndon): wsme does not handle the error that is being # raised in by requires_admin dues to the decorator ordering. wsme # does not play nice with other decorators, and so requires_admin # must call wsme.wsexpose, and not the other way arou. The # implication is that I can't look at the status code in the # return value. Work around is to catch the exception here and # verify that the status code is correct. try: # Intentionally *not* using assertRaises here so I can look # at the status code of the exception. self.get_json('/event_types', expect_errors=True, headers={"X-Roles": "Member", "X-Auth-Token": VALID_TOKEN2, "X-Project-Id": "project-good"}) except v2_api.ClientSideError as ex: self.assertEqual(401, ex.code) else: self.fail() ceilometer-2014.1/ceilometer/tests/api/test_app.py0000664000175300017540000000307412323717130023325 0ustar jenkinsjenkins00000000000000# vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2014 IBM Corp. # 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 socket from oslo.config import cfg from ceilometer.api import app from ceilometer.openstack.common.fixture import config from ceilometer.tests import base class TestApp(base.BaseTestCase): def setUp(self): super(TestApp, self).setUp() self.CONF = self.useFixture(config.Config()).conf def test_WSGI_address_family(self): self.CONF.set_override('host', '::', group='api') server_cls = app.get_server_cls(cfg.CONF.api.host) self.assertEqual(server_cls.address_family, socket.AF_INET6) self.CONF.set_override('host', '127.0.0.1', group='api') server_cls = app.get_server_cls(cfg.CONF.api.host) self.assertEqual(server_cls.address_family, socket.AF_INET) self.CONF.set_override('host', 'ddddd', group='api') server_cls = app.get_server_cls(cfg.CONF.api.host) self.assertEqual(server_cls.address_family, socket.AF_INET) ceilometer-2014.1/ceilometer/tests/api/v1/0000775000175300017540000000000012323717426021466 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/api/v1/test_max_project_volume_scenarios.py0000664000175300017540000000766412323717132031056 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Steven Berler # Julien Danjou # # 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. """Test getting the max resource volume. """ import datetime import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestMaxProjectVolume(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestMaxProjectVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id-%s' % i, timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get('/projects/project1/meters/volume.size/volume/max') expected = {'volume': 7} self.assertEqual(expected, data) def test_no_time_bounds_non_admin(self): data = self.get('/projects/project1/meters/volume.size/volume/max', headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual({'volume': 7}, data) def test_no_time_bounds_wrong_tenant(self): resp = self.get('/projects/project1/meters/volume.size/volume/max', headers={"X-Roles": "Member", "X-Project-Id": "?"}) self.assertEqual(404, resp.status_code) def test_start_timestamp(self): data = self.get('/projects/project1/meters/volume.size/volume/max', start_timestamp='2012-09-25T11:30:00') expected = {'volume': 7} self.assertEqual(expected, data) def test_start_timestamp_after(self): data = self.get('/projects/project1/meters/volume.size/volume/max', start_timestamp='2012-09-25T12:34:00') expected = {'volume': None} self.assertEqual(expected, data) def test_end_timestamp(self): data = self.get('/projects/project1/meters/volume.size/volume/max', end_timestamp='2012-09-25T11:30:00') expected = {'volume': 5} self.assertEqual(expected, data) def test_end_timestamp_before(self): data = self.get('/projects/project1/meters/volume.size/volume/max', end_timestamp='2012-09-25T09:54:00') expected = {'volume': None} self.assertEqual(expected, data) def test_start_end_timestamp(self): data = self.get('/projects/project1/meters/volume.size/volume/max', start_timestamp='2012-09-25T11:30:00', end_timestamp='2012-09-25T11:32:00') expected = {'volume': 6} self.assertEqual(expected, data) ceilometer-2014.1/ceilometer/tests/api/v1/test_list_users_scenarios.py0000664000175300017540000000702712323717132027341 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # # 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. """Test listing users. """ import datetime import logging import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEmptyUsers(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get('/users') self.assertEqual({'users': []}, data) class TestListUsers(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListUsers, self).setUp() sample1 = sample.Sample( 'instance', 'cumulative', 'instance', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample', }, source='test_list_users', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2', }, source='not-test', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) def test_users(self): data = self.get('/users') self.assertEqual(['user-id', 'user-id2'], data['users']) def test_users_non_admin(self): data = self.get('/users', headers={"X-Roles": "Member", "X-User-Id": "user-id", "X-Project-Id": "project-id"}) self.assertEqual(['user-id'], data['users']) def test_with_source(self): data = self.get('/sources/test_list_users/users') self.assertEqual(data['users'], ['user-id']) def test_with_source_non_admin(self): data = self.get('/sources/test_list_users/users', headers={"X-Roles": "Member", "X-User-Id": "user-id", "X-Project-Id": "project-id"}) self.assertEqual(['user-id'], data['users']) ceilometer-2014.1/ceilometer/tests/api/v1/test_app.py0000664000175300017540000000433012323717132023651 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Julien Danjou # # Author: Julien Danjou # # 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. """Test basic ceilometer-api app """ import os from ceilometer.api import acl from ceilometer.api.v1 import app from ceilometer.openstack.common import fileutils from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test from ceilometer import service class TestApp(test.BaseTestCase): def setUp(self): super(TestApp, self).setUp() self.CONF = self.useFixture(config.Config()).conf def test_keystone_middleware_conf(self): self.CONF.set_override("auth_protocol", "foottp", group=acl.OPT_GROUP_NAME) self.CONF.set_override("auth_version", "v2.0", group=acl.OPT_GROUP_NAME) self.CONF.set_override("auth_uri", None, group=acl.OPT_GROUP_NAME) api_app = app.make_app(self.CONF, attach_storage=False) self.assertTrue(api_app.wsgi_app.auth_uri.startswith('foottp')) def test_keystone_middleware_parse_conffile(self): content = "[{0}]\nauth_protocol = barttp"\ "\nauth_version = v2.0".format(acl.OPT_GROUP_NAME) tmpfile = fileutils.write_to_tempfile(content=content, prefix='ceilometer', suffix='.conf') service.prepare_service(['ceilometer-api', '--config-file=%s' % tmpfile]) api_app = app.make_app(self.CONF, attach_storage=False) self.assertTrue(api_app.wsgi_app.auth_uri.startswith('barttp')) os.unlink(tmpfile) ceilometer-2014.1/ceilometer/tests/api/v1/test_list_events_scenarios.py0000664000175300017540000002072312323717132027502 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # # 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. """Test listing raw events. """ import datetime import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestListEvents(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListEvents, self).setUp() for cnt in [ sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='source1', ), sample.Sample( 'instance', 'cumulative', '', 2, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='source1', ), sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project2', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 42), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2'}, source='source1', ), ]: msg = utils.meter_message_from_counter( cnt, self.CONF.publisher.metering_secret) self.conn.record_metering_data(msg) def test_empty_project(self): data = self.get('/projects/no-such-project/meters/instance') self.assertEqual({'events': []}, data) def test_by_project(self): data = self.get('/projects/project1/meters/instance') self.assertEqual(2, len(data['events'])) def test_by_project_non_admin(self): data = self.get('/projects/project1/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual(2, len(data['events'])) def test_by_project_wrong_tenant(self): resp = self.get('/projects/project1/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "this-is-my-project"}) self.assertEqual(404, resp.status_code) def test_by_project_with_timestamps(self): data = self.get('/projects/project1/meters/instance', start_timestamp=datetime.datetime(2012, 7, 2, 10, 42)) self.assertEqual(0, len(data['events'])) def test_empty_resource(self): data = self.get('/resources/no-such-resource/meters/instance') self.assertEqual({'events': []}, data) def test_by_resource(self): data = self.get('/resources/resource-id/meters/instance') self.assertEqual(2, len(data['events'])) def test_by_resource_non_admin(self): data = self.get('/resources/resource-id-alternate/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "project2"}) self.assertEqual(1, len(data['events'])) def test_by_resource_some_tenant(self): data = self.get('/resources/resource-id/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "project2"}) self.assertEqual(0, len(data['events'])) def test_empty_source(self): data = self.get('/sources/no-such-source/meters/instance') self.assertEqual({'events': []}, data) def test_by_source(self): data = self.get('/sources/source1/meters/instance') self.assertEqual(3, len(data['events'])) def test_by_source_non_admin(self): data = self.get('/sources/source1/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "project2"}) self.assertEqual(1, len(data['events'])) def test_by_source_with_timestamps(self): data = self.get('/sources/source1/meters/instance', end_timestamp=datetime.datetime(2012, 7, 2, 10, 42)) self.assertEqual(2, len(data['events'])) def test_empty_user(self): data = self.get('/users/no-such-user/meters/instance') self.assertEqual({'events': []}, data) def test_by_user(self): data = self.get('/users/user-id/meters/instance') self.assertEqual(2, len(data['events'])) def test_by_user_non_admin(self): data = self.get('/users/user-id/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual(2, len(data['events'])) def test_by_user_wrong_tenant(self): data = self.get('/users/user-id/meters/instance', headers={"X-Roles": "Member", "X-Project-Id": "project2"}) self.assertEqual(0, len(data['events'])) def test_by_user_with_timestamps(self): data = self.get('/users/user-id/meters/instance', start_timestamp=datetime.datetime(2012, 7, 2, 10, 41), end_timestamp=datetime.datetime(2012, 7, 2, 10, 42)) self.assertEqual(1, len(data['events'])) def test_template_list_event(self): rv = self.get('/resources/resource-id/meters/instance', headers={"Accept": "text/html"}) self.assertEqual(200, rv.status_code) self.assertTrue("text/html" in rv.content_type) class TestListEventsMetaquery(TestListEvents, tests_db.MixinTestsWithBackendScenarios): def test_metaquery1(self): q = '/sources/source1/meters/instance' data = self.get('%s?metadata.tag=self.sample2' % q) self.assertEqual(1, len(data['events'])) def test_metaquery1_wrong_tenant(self): q = '/sources/source1/meters/instance' data = self.get('%s?metadata.tag=self.sample2' % q, headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual(0, len(data['events'])) def test_metaquery2(self): q = '/sources/source1/meters/instance' data = self.get('%s?metadata.tag=self.sample' % q) self.assertEqual(2, len(data['events'])) def test_metaquery2_non_admin(self): q = '/sources/source1/meters/instance' data = self.get('%s?metadata.tag=self.sample' % q, headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual(2, len(data['events'])) def test_metaquery3(self): q = '/sources/source1/meters/instance' data = self.get('%s?metadata.display_name=test-server' % q) self.assertEqual(3, len(data['events'])) def test_metaquery3_with_project(self): q = '/sources/source1/meters/instance' data = self.get('%s?metadata.display_name=test-server' % q, headers={"X-Roles": "Member", "X-Project-Id": "project2"}) self.assertEqual(1, len(data['events'])) ceilometer-2014.1/ceilometer/tests/api/v1/test_sum_project_volume_scenarios.py0000664000175300017540000000771112323717132031066 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Steven Berler # Julien Danjou # # 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. """Test getting the sum project volume. """ import datetime import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestSumProjectVolume(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestSumProjectVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id-%s' % i, timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get('/projects/project1/meters/volume.size/volume/sum') expected = {'volume': 5 + 6 + 7} self.assertEqual(expected, data) def test_no_time_bounds_non_admin(self): data = self.get('/projects/project1/meters/volume.size/volume/sum', headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual({'volume': 5 + 6 + 7}, data) def test_no_time_bounds_wrong_tenant(self): resp = self.get('/projects/project1/meters/volume.size/volume/sum', headers={"X-Roles": "Member", "X-Project-Id": "???"}) self.assertEqual(404, resp.status_code) def test_start_timestamp(self): data = self.get('/projects/project1/meters/volume.size/volume/sum', start_timestamp='2012-09-25T11:30:00') expected = {'volume': 6 + 7} self.assertEqual(expected, data) def test_start_timestamp_after(self): data = self.get('/projects/project1/meters/volume.size/volume/sum', start_timestamp='2012-09-25T12:34:00') expected = {'volume': None} self.assertEqual(expected, data) def test_end_timestamp(self): data = self.get('/projects/project1/meters/volume.size/volume/sum', end_timestamp='2012-09-25T11:30:00') expected = {'volume': 5} self.assertEqual(expected, data) def test_end_timestamp_before(self): data = self.get('/projects/project1/meters/volume.size/volume/sum', end_timestamp='2012-09-25T09:54:00') expected = {'volume': None} self.assertEqual(expected, data) def test_start_end_timestamp(self): data = self.get('/projects/project1/meters/volume.size/volume/sum', start_timestamp='2012-09-25T11:30:00', end_timestamp='2012-09-25T11:32:00') expected = {'volume': 6} self.assertEqual(expected, data) ceilometer-2014.1/ceilometer/tests/api/v1/test_list_meters_scenarios.py0000664000175300017540000002317612323717132027502 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright 2012 Red Hat, Inc. # # Author: Angus Salkeld # Julien Danjou # # 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. """Test listing meters. """ import datetime import logging import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEmptyMeters(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get('/meters') self.assertEqual({'meters': []}, data) class TestListMeters(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListMeters, self).setUp() for cnt in [ sample.Sample( 'meter.test', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='test_list_resources'), sample.Sample( 'meter.test', 'cumulative', '', 3, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 11, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='test_list_resources'), sample.Sample( 'meter.mine', 'gauge', '', 1, 'user-id', 'project-id', 'resource-id2', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'two.sample'}, source='test_list_resources'), sample.Sample( 'meter.test', 'cumulative', '', 1, 'user-id2', 'project-id2', 'resource-id3', timestamp=datetime.datetime(2012, 7, 2, 10, 42), resource_metadata={'display_name': 'test-server', 'tag': 'three.sample'}, source='test_list_resources'), sample.Sample( 'meter.mine', 'gauge', '', 1, 'user-id4', 'project-id2', 'resource-id4', timestamp=datetime.datetime(2012, 7, 2, 10, 43), resource_metadata={'display_name': 'test-server', 'tag': 'four.sample'}, source='test_list_resources')]: msg = utils.meter_message_from_counter( cnt, self.CONF.publisher.metering_secret) self.conn.record_metering_data(msg) def test_list_meters(self): data = self.get('/meters') self.assertEqual(4, len(data['meters'])) self.assertEqual(set(['resource-id', 'resource-id2', 'resource-id3', 'resource-id4']), set(r['resource_id'] for r in data['meters'])) self.assertEqual(set(['meter.test', 'meter.mine']), set(r['name'] for r in data['meters'])) def test_list_meters_non_admin(self): data = self.get('/meters', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(2, len(data['meters'])) self.assertEqual(set(['resource-id', 'resource-id2']), set(r['resource_id'] for r in data['meters'])) self.assertEqual(set(['meter.test', 'meter.mine']), set(r['name'] for r in data['meters'])) def test_with_resource(self): data = self.get('/resources/resource-id/meters') ids = set(r['name'] for r in data['meters']) self.assertEqual(set(['meter.test']), ids) def test_with_source(self): data = self.get('/sources/test_list_resources/meters') ids = set(r['resource_id'] for r in data['meters']) self.assertEqual(set(['resource-id', 'resource-id2', 'resource-id3', 'resource-id4']), ids) def test_with_source_non_admin(self): data = self.get('/sources/test_list_resources/meters', headers={"X-Roles": "Member", "X-Project-Id": "project-id2"}) ids = set(r['resource_id'] for r in data['meters']) self.assertEqual(set(['resource-id3', 'resource-id4']), ids) def test_with_source_non_existent(self): data = self.get('/sources/test_list_resources_dont_exist/meters') self.assertEqual([], data['meters']) def test_with_user(self): data = self.get('/users/user-id/meters') nids = set(r['name'] for r in data['meters']) self.assertEqual(set(['meter.mine', 'meter.test']), nids) rids = set(r['resource_id'] for r in data['meters']) self.assertEqual(set(['resource-id', 'resource-id2']), rids) def test_with_user_non_admin(self): data = self.get('/users/user-id/meters', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) nids = set(r['name'] for r in data['meters']) self.assertEqual(set(['meter.mine', 'meter.test']), nids) rids = set(r['resource_id'] for r in data['meters']) self.assertEqual(set(['resource-id', 'resource-id2']), rids) def test_with_user_wrong_tenant(self): data = self.get('/users/user-id/meters', headers={"X-Roles": "Member", "X-Project-Id": "project666"}) self.assertEqual([], data['meters']) def test_with_user_non_existent(self): data = self.get('/users/user-id-foobar123/meters') self.assertEqual([], data['meters']) def test_with_project(self): data = self.get('/projects/project-id2/meters') ids = set(r['resource_id'] for r in data['meters']) self.assertEqual(set(['resource-id3', 'resource-id4']), ids) def test_with_project_non_admin(self): data = self.get('/projects/project-id2/meters', headers={"X-Roles": "Member", "X-Project-Id": "project-id2"}) ids = set(r['resource_id'] for r in data['meters']) self.assertEqual(set(['resource-id3', 'resource-id4']), ids) def test_with_project_wrong_tenant(self): data = self.get('/projects/project-id2/meters', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(404, data.status_code) def test_with_project_non_existent(self): data = self.get('/projects/jd-was-here/meters') self.assertEqual([], data['meters']) class TestListMetersMetaquery(TestListMeters, tests_db.MixinTestsWithBackendScenarios): def test_metaquery1(self): data = self.get('/meters?metadata.tag=self.sample') self.assertEqual(1, len(data['meters'])) def test_metaquery1_non_admin(self): data = self.get('/meters?metadata.tag=self.sample', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(1, len(data['meters'])) def test_metaquery1_wrong_tenant(self): data = self.get('/meters?metadata.tag=self.sample', headers={"X-Roles": "Member", "X-Project-Id": "project-666"}) self.assertEqual(0, len(data['meters'])) def test_metaquery2(self): data = self.get('/meters?metadata.tag=four.sample') self.assertEqual(1, len(data['meters'])) def test_metaquery2_non_admin(self): data = self.get('/meters?metadata.tag=four.sample', headers={"X-Roles": "Member", "X-Project-Id": "project-id2"}) self.assertEqual(1, len(data['meters'])) def test_metaquery2_non_admin_wrong_project(self): data = self.get('/meters?metadata.tag=four.sample', headers={"X-Roles": "Member", "X-Project-Id": "project-666"}) self.assertEqual(0, len(data['meters'])) ceilometer-2014.1/ceilometer/tests/api/v1/__init__.py0000664000175300017540000000000012323717130023555 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/api/v1/test_max_resource_volume_scenarios.py0000664000175300017540000000764512323717132031236 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Steven Berler # # 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. """Test getting the max resource volume. """ import datetime import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestMaxResourceVolume(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestMaxResourceVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max') expected = {'volume': 7} self.assertEqual(expected, data) def test_no_time_bounds_non_admin(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual({'volume': 7}, data) def test_no_time_bounds_wrong_tenant(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', headers={"X-Roles": "Member", "X-Project-Id": "??"}) self.assertEqual({'volume': None}, data) def test_start_timestamp(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', start_timestamp='2012-09-25T11:30:00') expected = {'volume': 7} self.assertEqual(expected, data) def test_start_timestamp_after(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', start_timestamp='2012-09-25T12:34:00') expected = {'volume': None} self.assertEqual(expected, data) def test_end_timestamp(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', end_timestamp='2012-09-25T11:30:00') expected = {'volume': 5} self.assertEqual(expected, data) def test_end_timestamp_before(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', end_timestamp='2012-09-25T09:54:00') expected = {'volume': None} self.assertEqual(expected, data) def test_start_end_timestamp(self): data = self.get('/resources/resource-id/meters/volume.size/volume/max', start_timestamp='2012-09-25T11:30:00', end_timestamp='2012-09-25T11:32:00') expected = {'volume': 6} self.assertEqual(expected, data) ceilometer-2014.1/ceilometer/tests/api/v1/test_sum_resource_volume_scenarios.py0000664000175300017540000000774712323717132031260 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # # 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. """Test getting the total resource volume. """ import datetime import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestSumResourceVolume(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestSumResourceVolume, self).setUp() for i in range(3): s = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.sample', }, source='source1', ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_no_time_bounds(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum') expected = {'volume': 5 + 6 + 7} self.assertEqual(expected, data) def test_no_time_bounds_non_admin(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', headers={"X-Roles": "Member", "X-Project-Id": "project1"}) self.assertEqual({'volume': 5 + 6 + 7}, data) def test_no_time_bounds_wrong_tenant(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', headers={"X-Roles": "Member", "X-Project-Id": "?"}) self.assertEqual({'volume': None}, data) def test_start_timestamp(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', start_timestamp='2012-09-25T11:30:00') expected = {'volume': 6 + 7} self.assertEqual(expected, data) def test_start_timestamp_after(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', start_timestamp='2012-09-25T12:34:00') expected = {'volume': None} self.assertEqual(expected, data) def test_end_timestamp(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', end_timestamp='2012-09-25T11:30:00') expected = {'volume': 5} self.assertEqual(expected, data) def test_end_timestamp_before(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', end_timestamp='2012-09-25T09:54:00') expected = {'volume': None} self.assertEqual(expected, data) def test_start_end_timestamp(self): data = self.get('/resources/resource-id/meters/volume.size/volume/sum', start_timestamp='2012-09-25T11:30:00', end_timestamp='2012-09-25T11:32:00') expected = {'volume': 6} self.assertEqual(expected, data) ceilometer-2014.1/ceilometer/tests/api/v1/test_list_resources_scenarios.py0000664000175300017540000003047412323717132030214 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # # 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. """Test listing resources. """ import datetime import logging import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEmptyResources(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get('/resources') self.assertEqual({'resources': []}, data) class TestListResourcesBase(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListResourcesBase, self).setUp() for cnt in [ sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='test_list_resources', ), sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2'}, source='test_list_resources', ), sample.Sample( 'instance', 'cumulative', '', 1, 'user-id2', 'project-id2', 'resource-id2', timestamp=datetime.datetime(2012, 7, 2, 10, 42), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample3'}, source='test_list_resources', ), sample.Sample( 'instance', 'cumulative', '', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 43), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample4'}, source='test_list_resources', )]: msg = utils.meter_message_from_counter( cnt, self.CONF.publisher.metering_secret) self.conn.record_metering_data(msg) class TestListResources(TestListResourcesBase): def test_list_resources(self): data = self.get('/resources') self.assertEqual(3, len(data['resources'])) self.assertEqual(set(['resource-id', 'resource-id-alternate', 'resource-id2']), set(r['resource_id'] for r in data['resources'])) def test_list_resources_non_admin(self): data = self.get('/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(2, len(data['resources'])) self.assertEqual(set(['resource-id', 'resource-id-alternate']), set(r['resource_id'] for r in data['resources'])) def test_list_resources_with_timestamps(self): data = self.get('/resources', start_timestamp=datetime.datetime( 2012, 7, 2, 10, 41).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 43).isoformat()) self.assertEqual(set(['resource-id-alternate', 'resource-id2']), set(r['resource_id'] for r in data['resources'])) def test_list_resources_with_timestamps_non_admin(self): data = self.get('/resources', start_timestamp=datetime.datetime( 2012, 7, 2, 10, 41).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 43).isoformat(), headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(set(['resource-id-alternate']), set(r['resource_id'] for r in data['resources'])) def test_with_source(self): data = self.get('/sources/test_list_resources/resources') ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id', 'resource-id2', 'resource-id-alternate']), ids) def test_with_source_non_admin(self): data = self.get('/sources/test_list_resources/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id', 'resource-id-alternate']), ids) def test_with_source_with_timestamps(self): data = self.get('/sources/test_list_resources/resources', start_timestamp=datetime.datetime( 2012, 7, 2, 10, 41).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 43).isoformat()) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id2', 'resource-id-alternate']), ids) def test_with_source_with_timestamps_non_admin(self): data = self.get('/sources/test_list_resources/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}, start_timestamp=datetime.datetime( 2012, 7, 2, 10, 41).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 43).isoformat()) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id-alternate']), ids) def test_with_source_non_existent(self): data = self.get('/sources/test_list_resources_dont_exist/resources') self.assertEqual([], data['resources']) def test_with_user(self): data = self.get('/users/user-id/resources') ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id', 'resource-id-alternate']), ids) def test_with_user_non_admin(self): data = self.get('/users/user-id/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id', 'resource-id-alternate']), ids) def test_with_user_wrong_tenant(self): data = self.get('/users/user-id/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-jd"}) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(), ids) def test_with_user_with_timestamps(self): data = self.get('/users/user-id/resources', start_timestamp=datetime.datetime( 2012, 7, 2, 10, 42).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 42).isoformat()) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(), ids) def test_with_user_with_timestamps_non_admin(self): data = self.get('/users/user-id/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}, start_timestamp=datetime.datetime( 2012, 7, 2, 10, 42).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 42).isoformat()) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(), ids) def test_with_user_non_existent(self): data = self.get('/users/user-id-foobar123/resources') self.assertEqual([], data['resources']) def test_with_project(self): data = self.get('/projects/project-id/resources') ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id', 'resource-id-alternate']), ids) def test_with_project_non_admin(self): data = self.get('/projects/project-id/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id', 'resource-id-alternate']), ids) def test_with_project_with_timestamp(self): data = self.get('/projects/project-id/resources', start_timestamp=datetime.datetime( 2012, 7, 2, 10, 40).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 41).isoformat()) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id']), ids) def test_with_project_with_timestamp_non_admin(self): data = self.get('/projects/project-id/resources', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}, start_timestamp=datetime.datetime( 2012, 7, 2, 10, 40).isoformat(), end_timestamp=datetime.datetime( 2012, 7, 2, 10, 41).isoformat()) ids = set(r['resource_id'] for r in data['resources']) self.assertEqual(set(['resource-id']), ids) def test_with_project_non_existent(self): data = self.get('/projects/jd-was-here/resources') self.assertEqual([], data['resources']) class TestListResourcesMetaquery(TestListResourcesBase, tests_db.MixinTestsWithBackendScenarios): def test_metaquery1(self): q = '/sources/test_list_resources/resources' data = self.get('%s?metadata.display_name=test-server' % q) self.assertEqual(3, len(data['resources'])) def test_metaquery1_non_admin(self): q = '/sources/test_list_resources/resources' data = self.get('%s?metadata.display_name=test-server' % q, headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(2, len(data['resources'])) def test_metaquery2(self): q = '/sources/test_list_resources/resources' data = self.get('%s?metadata.tag=self.sample4' % q) self.assertEqual(1, len(data['resources'])) def test_metaquery2_non_admin(self): q = '/sources/test_list_resources/resources' data = self.get('%s?metadata.tag=self.sample4' % q, headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(1, len(data['resources'])) ceilometer-2014.1/ceilometer/tests/api/v1/test_list_projects_scenarios.py0000664000175300017540000000667212323717132030036 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Julien Danjou # # 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. """Test listing users. """ import datetime import logging import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios LOG = logging.getLogger(__name__) class TestListEmptyProjects(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): data = self.get('/projects') self.assertEqual({'projects': []}, data) class TestListProjects(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestListProjects, self).setUp() sample1 = sample.Sample( 'instance', 'cumulative', 'instance', 1, 'user-id', 'project-id', 'resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample'}, source='test_list_projects', ) msg = utils.meter_message_from_counter( sample1, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) sample2 = sample.Sample( 'instance', 'cumulative', 'instance', 1, 'user-id2', 'project-id2', 'resource-id-alternate', timestamp=datetime.datetime(2012, 7, 2, 10, 41), resource_metadata={'display_name': 'test-server', 'tag': 'self.sample2'}, source='test_list_users', ) msg2 = utils.meter_message_from_counter( sample2, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg2) def test_projects(self): data = self.get('/projects') self.assertEqual(['project-id', 'project-id2'], data['projects']) def test_projects_non_admin(self): data = self.get('/projects', headers={"X-Roles": "Member", "X-Project-Id": "project-id"}) self.assertEqual(['project-id'], data['projects']) def test_with_source(self): data = self.get('/sources/test_list_users/projects') self.assertEqual(['project-id2'], data['projects']) def test_with_source_non_admin(self): data = self.get('/sources/test_list_users/projects', headers={"X-Roles": "Member", "X-Project-Id": "project-id2"}) self.assertEqual(['project-id2'], data['projects']) ceilometer-2014.1/ceilometer/tests/api/v1/test_get_query_ts.py0000664000175300017540000000654312323717130025611 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Steven Berler # # 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. """Test the _get_query_timestamps helper function. """ import datetime from ceilometer.api.v1 import blueprint from ceilometer.openstack.common import test class TestQueryTimestamps(test.BaseTestCase): def test_get_query_timestamps_none_specified(self): result = blueprint._get_query_timestamps() expected = {'start_timestamp': None, 'end_timestamp': None, 'query_start': None, 'query_end': None, 'search_offset': 0, } self.assertEqual(expected, result) def test_get_query_timestamps_start(self): args = {'start_timestamp': '2012-09-20T12:13:14'} result = blueprint._get_query_timestamps(args) expected = {'start_timestamp': datetime.datetime(2012, 9, 20, 12, 13, 14), 'end_timestamp': None, 'query_start': datetime.datetime(2012, 9, 20, 12, 13, 14), 'query_end': None, 'search_offset': 0, } self.assertEqual(expected, result) def test_get_query_timestamps_end(self): args = {'end_timestamp': '2012-09-20T12:13:14'} result = blueprint._get_query_timestamps(args) expected = {'end_timestamp': datetime.datetime(2012, 9, 20, 12, 13, 14), 'start_timestamp': None, 'query_end': datetime.datetime(2012, 9, 20, 12, 13, 14), 'query_start': None, 'search_offset': 0, } self.assertEqual(expected, result) def test_get_query_timestamps_with_offset(self): args = {'start_timestamp': '2012-09-20T12:13:14', 'end_timestamp': '2012-09-20T13:24:25', 'search_offset': '20', } result = blueprint._get_query_timestamps(args) expected = {'query_end': datetime.datetime(2012, 9, 20, 13, 44, 25), 'query_start': datetime.datetime(2012, 9, 20, 11, 53, 14), 'end_timestamp': datetime.datetime(2012, 9, 20, 13, 24, 25), 'start_timestamp': datetime.datetime(2012, 9, 20, 12, 13, 14), 'search_offset': 20, } self.assertEqual(expected, result) ceilometer-2014.1/ceilometer/tests/api/v1/test_compute_duration_by_resource_scenarios.py0000664000175300017540000001341212323717132033122 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Test listing raw events. """ import datetime import mock import testscenarios from ceilometer.openstack.common import timeutils from ceilometer.storage import models from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestComputeDurationByResource(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(TestComputeDurationByResource, self).setUp() # Create events relative to the range and pretend # that the intervening events exist. self.early1 = datetime.datetime(2012, 8, 27, 7, 0) self.early2 = datetime.datetime(2012, 8, 27, 17, 0) self.start = datetime.datetime(2012, 8, 28, 0, 0) self.middle1 = datetime.datetime(2012, 8, 28, 8, 0) self.middle2 = datetime.datetime(2012, 8, 28, 18, 0) self.end = datetime.datetime(2012, 8, 28, 23, 59) self.late1 = datetime.datetime(2012, 8, 29, 9, 0) self.late2 = datetime.datetime(2012, 8, 29, 19, 0) def _patch_get_stats(self, start, end): statitics = models.Statistics(unit='', min=0, max=0, avg=0, sum=0, count=0, period=None, period_start=None, period_end=None, duration=end - start, duration_start=start, duration_end=end, groupby=None) return mock.patch.object(self.conn, 'get_meter_statistics', return_value=statitics) def _invoke_api(self): return self.get( '/resources/resource-id/meters/instance:m1.tiny/duration', start_timestamp=self.start.isoformat(), end_timestamp=self.end.isoformat(), search_offset=10, # this value doesn't matter, db call is mocked ) def test_before_range(self): with self._patch_get_stats(self.early1, self.early2): data = self._invoke_api() self.assertIsNone(data['start_timestamp']) self.assertIsNone(data['end_timestamp']) self.assertIsNone(data['duration']) def _assert_times_match(self, actual, expected): actual = timeutils.parse_isotime(actual).replace(tzinfo=None) self.assertEqual(expected, actual) def test_overlap_range_start(self): with self._patch_get_stats(self.early1, self.middle1): data = self._invoke_api() self._assert_times_match(data['start_timestamp'], self.start) self._assert_times_match(data['end_timestamp'], self.middle1) self.assertEqual(8 * 60 * 60, data['duration']) def test_within_range(self): with self._patch_get_stats(self.middle1, self.middle2): data = self._invoke_api() self._assert_times_match(data['start_timestamp'], self.middle1) self._assert_times_match(data['end_timestamp'], self.middle2) self.assertEqual(10 * 60 * 60, data['duration']) def test_within_range_zero_duration(self): with self._patch_get_stats(self.middle1, self.middle1): data = self._invoke_api() self._assert_times_match(data['start_timestamp'], self.middle1) self._assert_times_match(data['end_timestamp'], self.middle1) self.assertEqual(0, data['duration']) def test_overlap_range_end(self): with self._patch_get_stats(self.middle2, self.late1): data = self._invoke_api() self._assert_times_match(data['start_timestamp'], self.middle2) self._assert_times_match(data['end_timestamp'], self.end) self.assertEqual(((6 * 60) - 1) * 60, data['duration']) def test_after_range(self): with self._patch_get_stats(self.late1, self.late2): data = self._invoke_api() self.assertIsNone(data['start_timestamp']) self.assertIsNone(data['end_timestamp']) self.assertIsNone(data['duration']) def test_without_end_timestamp(self): with self._patch_get_stats(self.late1, self.late2): data = self.get( '/resources/resource-id/meters/instance:m1.tiny/duration', start_timestamp=self.late1.isoformat(), # this value doesn't matter, db call is mocked search_offset=10, ) self._assert_times_match(data['start_timestamp'], self.late1) self._assert_times_match(data['end_timestamp'], self.late2) def test_without_start_timestamp(self): with self._patch_get_stats(self.early1, self.early2): data = self.get( '/resources/resource-id/meters/instance:m1.tiny/duration', end_timestamp=self.early2.isoformat(), # this value doesn't matter, db call is mocked search_offset=10, ) self._assert_times_match(data['start_timestamp'], self.early1) self._assert_times_match(data['end_timestamp'], self.early2) ceilometer-2014.1/ceilometer/tests/api/v1/test_list_sources_scenarios.py0000664000175300017540000000235512323717132027662 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 Julien Danjou # # Author: Julien Danjou # # 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. """Test listing users. """ import testscenarios from ceilometer.tests import api as tests_api from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class TestListSource(tests_api.TestBase, tests_db.MixinTestsWithBackendScenarios): def test_source(self): ydata = self.get('/sources/test_source') self.assertIn("somekey", ydata) self.assertEqual(666, ydata["somekey"]) def test_unknownsource(self): ydata = self.get('/sources/test_source_that_does_not_exist') self.assertEqual({}, ydata) ceilometer-2014.1/ceilometer/tests/api/__init__.py0000664000175300017540000002153512323717132023251 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Base classes for API tests. """ import flask import pecan import pecan.testing from six.moves import urllib from ceilometer.api import acl from ceilometer.api.v1 import app as v1_app from ceilometer.api.v1 import blueprint as v1_blueprint from ceilometer.openstack.common import jsonutils from ceilometer import service from ceilometer.tests import db as db_test_base class TestBase(db_test_base.TestBase): """Use only for v1 API tests. """ def setUp(self): super(TestBase, self).setUp() service.prepare_service([]) self.CONF.set_override("auth_version", "v2.0", group=acl.OPT_GROUP_NAME) self.CONF.set_override("policy_file", self.path_get('etc/ceilometer/policy.json')) sources_file = self.path_get('ceilometer/tests/sources.json') self.app = v1_app.make_app(self.CONF, enable_acl=False, attach_storage=False, sources_file=sources_file) # this is needed to pass over unhandled exceptions self.app.debug = True self.app.register_blueprint(v1_blueprint.blueprint) self.test_app = self.app.test_client() @self.app.before_request def attach_storage_connection(): flask.request.storage_conn = self.conn def get(self, path, headers=None, **kwds): if kwds: query = path + '?' + urllib.parse.urlencode(kwds) else: query = path rv = self.test_app.get(query, headers=headers) if rv.status_code == 200 and rv.content_type == 'application/json': try: data = jsonutils.loads(rv.data) except ValueError: print('RAW DATA:%s' % rv) raise return data return rv class FunctionalTest(db_test_base.TestBase): """Used for functional tests of Pecan controllers where you need to test your literal application and its integration with the framework. """ PATH_PREFIX = '' def setUp(self): super(FunctionalTest, self).setUp() self.CONF.set_override("auth_version", "v2.0", group=acl.OPT_GROUP_NAME) self.CONF.set_override("policy_file", self.path_get('etc/ceilometer/policy.json')) self.app = self._make_app() def _make_app(self, enable_acl=False): # Determine where we are so we can set up paths in the config root_dir = self.path_get() self.config = { 'app': { 'root': 'ceilometer.api.controllers.root.RootController', 'modules': ['ceilometer.api'], 'static_root': '%s/public' % root_dir, 'template_path': '%s/ceilometer/api/templates' % root_dir, 'enable_acl': enable_acl, }, 'wsme': { 'debug': True, }, } return pecan.testing.load_test_app(self.config) def tearDown(self): super(FunctionalTest, self).tearDown() pecan.set_config({}, overwrite=True) def put_json(self, path, params, expect_errors=False, headers=None, extra_environ=None, status=None): """Sends simulated HTTP PUT request to Pecan test app. :param path: url path of target service :param params: content for wsgi.input of request :param expect_errors: boolean value whether an error is expected based on request :param headers: A dictionary of headers to send along with the request :param extra_environ: A dictionary of environ variables to send along with the request :param status: Expected status code of response """ return self.post_json(path=path, params=params, expect_errors=expect_errors, headers=headers, extra_environ=extra_environ, status=status, method="put") def post_json(self, path, params, expect_errors=False, headers=None, method="post", extra_environ=None, status=None): """Sends simulated HTTP POST request to Pecan test app. :param path: url path of target service :param params: content for wsgi.input of request :param expect_errors: boolean value whether an error is expected based on request :param headers: A dictionary of headers to send along with the request :param method: Request method type. Appropriate method function call should be used rather than passing attribute in. :param extra_environ: A dictionary of environ variables to send along with the request :param status: Expected status code of response """ full_path = self.PATH_PREFIX + path response = getattr(self.app, "%s_json" % method)( str(full_path), params=params, headers=headers, status=status, extra_environ=extra_environ, expect_errors=expect_errors ) return response def delete(self, path, expect_errors=False, headers=None, extra_environ=None, status=None): """Sends simulated HTTP DELETE request to Pecan test app. :param path: url path of target service :param expect_errors: boolean value whether an error is expected based on request :param headers: A dictionary of headers to send along with the request :param extra_environ: A dictionary of environ variables to send along with the request :param status: Expected status code of response """ full_path = self.PATH_PREFIX + path response = self.app.delete(str(full_path), headers=headers, status=status, extra_environ=extra_environ, expect_errors=expect_errors) return response def get_json(self, path, expect_errors=False, headers=None, extra_environ=None, q=[], groupby=[], status=None, override_params=None, **params): """Sends simulated HTTP GET request to Pecan test app. :param path: url path of target service :param expect_errors: boolean value whether an error is expected based on request :param headers: A dictionary of headers to send along with the request :param extra_environ: A dictionary of environ variables to send along with the request :param q: list of queries consisting of: field, value, op, and type keys :param groupby: list of fields to group by :param status: Expected status code of response :param override_params: literally encoded query param string :param params: content for wsgi.input of request """ full_path = self.PATH_PREFIX + path if override_params: all_params = override_params else: query_params = {'q.field': [], 'q.value': [], 'q.op': [], 'q.type': [], } for query in q: for name in ['field', 'op', 'value', 'type']: query_params['q.%s' % name].append(query.get(name, '')) all_params = {} all_params.update(params) if q: all_params.update(query_params) if groupby: all_params.update({'groupby': groupby}) response = self.app.get(full_path, params=all_params, headers=headers, extra_environ=extra_environ, expect_errors=expect_errors, status=status) if not expect_errors: response = response.json return response ceilometer-2014.1/ceilometer/tests/test_bin.py0000664000175300017540000001342712323717132022551 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # # Author: Julien Danjou # # 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 json import os import random import socket import subprocess import time import httplib2 from ceilometer.openstack.common import fileutils from ceilometer.tests import base class BinTestCase(base.BaseTestCase): def setUp(self): super(BinTestCase, self).setUp() content = ("[database]\n" "connection=log://localhost\n") self.tempfile = fileutils.write_to_tempfile(content=content, prefix='ceilometer', suffix='.conf') def tearDown(self): super(BinTestCase, self).tearDown() os.remove(self.tempfile) def test_dbsync_run(self): subp = subprocess.Popen(['ceilometer-dbsync', "--config-file=%s" % self.tempfile]) self.assertEqual(0, subp.wait()) def test_run_expirer_ttl_disabled(self): subp = subprocess.Popen(['ceilometer-expirer', '-d', "--config-file=%s" % self.tempfile], stderr=subprocess.PIPE) __, err = subp.communicate() self.assertEqual(0, subp.poll()) self.assertIn("Nothing to clean", err) def test_run_expirer_ttl_enabled(self): content = ("[database]\n" "time_to_live=1\n" "connection=log://localhost\n") self.tempfile = fileutils.write_to_tempfile(content=content, prefix='ceilometer', suffix='.conf') subp = subprocess.Popen(['ceilometer-expirer', '-d', "--config-file=%s" % self.tempfile], stderr=subprocess.PIPE) __, err = subp.communicate() self.assertEqual(0, subp.poll()) self.assertIn("Dropping data with TTL 1", err) class BinSendSampleTestCase(base.BaseTestCase): def setUp(self): super(BinSendSampleTestCase, self).setUp() pipeline_cfg_file = self.path_get('etc/ceilometer/pipeline.yaml') content = "[DEFAULT]\n"\ "rpc_backend=ceilometer.openstack.common.rpc.impl_fake\n"\ "pipeline_cfg_file={0}\n".format(pipeline_cfg_file) self.tempfile = fileutils.write_to_tempfile(content=content, prefix='ceilometer', suffix='.conf') def tearDown(self): super(BinSendSampleTestCase, self).tearDown() os.remove(self.tempfile) def test_send_counter_run(self): subp = subprocess.Popen(['ceilometer-send-sample', "--config-file=%s" % self.tempfile, "--sample-resource=someuuid", "--sample-name=mycounter"]) self.assertEqual(0, subp.wait()) class BinApiTestCase(base.BaseTestCase): def setUp(self): super(BinApiTestCase, self).setUp() self.api_port = random.randint(10000, 11000) self.http = httplib2.Http() pipeline_cfg_file = self.path_get('etc/ceilometer/pipeline.yaml') policy_file = self.path_get('etc/ceilometer/policy.json') content = "[DEFAULT]\n"\ "rpc_backend=ceilometer.openstack.common.rpc.impl_fake\n"\ "auth_strategy=noauth\n"\ "debug=true\n"\ "pipeline_cfg_file={0}\n"\ "policy_file={1}\n"\ "[api]\n"\ "port={2}\n"\ "[database]\n"\ "connection=log://localhost\n".format(pipeline_cfg_file, policy_file, self.api_port) self.tempfile = fileutils.write_to_tempfile(content=content, prefix='ceilometer', suffix='.conf') self.subp = subprocess.Popen(['ceilometer-api', "--config-file=%s" % self.tempfile]) def tearDown(self): super(BinApiTestCase, self).tearDown() self.subp.kill() self.subp.wait() os.remove(self.tempfile) def get_response(self, path): url = 'http://%s:%d/%s' % ('127.0.0.1', self.api_port, path) for x in range(10): try: r, c = self.http.request(url, 'GET') except socket.error: time.sleep(.5) self.assertIsNone(self.subp.poll()) else: return r, c return (None, None) def test_v1(self): response, content = self.get_response('v1/meters') self.assertEqual(200, response.status) self.assertEqual({'meters': []}, json.loads(content)) def test_v2(self): response, content = self.get_response('v2/meters') self.assertEqual(200, response.status) self.assertEqual([], json.loads(content)) ceilometer-2014.1/ceilometer/tests/image/0000775000175300017540000000000012323717426021451 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/image/test_notifications.py0000664000175300017540000001750212323717130025730 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 Red Hat Inc. # # Author: Eoghan Glynn # Author: Julien danjou # # 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 datetime from ceilometer.image import notifications from ceilometer.openstack.common import test from ceilometer import sample def fake_uuid(x): return '%s-%s-%s-%s' % (x * 8, x * 4, x * 4, x * 12) NOW = datetime.datetime.isoformat(datetime.datetime.utcnow()) NOTIFICATION_SEND = { u'event_type': u'image.send', u'timestamp': NOW, u'message_id': fake_uuid('a'), u'priority': u'INFO', u'publisher_id': u'images.example.com', u'payload': {u'receiver_tenant_id': fake_uuid('b'), u'destination_ip': u'1.2.3.4', u'bytes_sent': 42, u'image_id': fake_uuid('c'), u'receiver_user_id': fake_uuid('d'), u'owner_id': fake_uuid('e')} } IMAGE_META = {u'status': u'saving', u'name': u'fake image #3', u'deleted': False, u'container_format': u'ovf', u'created_at': u'2012-09-18T10:13:44.571370', u'disk_format': u'vhd', u'updated_at': u'2012-09-18T10:13:44.623120', u'properties': {u'key2': u'value2', u'key1': u'value1'}, u'min_disk': 0, u'protected': False, u'id': fake_uuid('c'), u'location': None, u'checksum': u'd990432ef91afef3ad9dbf4a975d3365', u'owner': "fake", u'is_public': False, u'deleted_at': None, u'min_ram': 0, u'size': 19} NOTIFICATION_UPDATE = {"message_id": "0c65cb9c-018c-11e2-bc91-5453ed1bbb5f", "publisher_id": "images.example.com", "event_type": "image.update", "priority": "info", "payload": IMAGE_META, "timestamp": NOW} NOTIFICATION_UPLOAD = {"message_id": "0c65cb9c-018c-11e2-bc91-5453ed1bbb5f", "publisher_id": "images.example.com", "event_type": "image.upload", "priority": "info", "payload": IMAGE_META, "timestamp": NOW} NOTIFICATION_DELETE = {"message_id": "0c65cb9c-018c-11e2-bc91-5453ed1bbb5f", "publisher_id": "images.example.com", "event_type": "image.delete", "priority": "info", "payload": IMAGE_META, "timestamp": NOW} class TestNotification(test.BaseTestCase): def _verify_common_counter(self, c, name, volume): self.assertIsNotNone(c) self.assertEqual(c.name, name) self.assertEqual(fake_uuid('c'), c.resource_id) self.assertEqual(NOW, c.timestamp) self.assertEqual(volume, c.volume) metadata = c.resource_metadata self.assertEqual(u'images.example.com', metadata.get('host')) def test_image_download(self): handler = notifications.ImageDownload() counters = list(handler.process_notification(NOTIFICATION_SEND)) self.assertEqual(1, len(counters)) download = counters[0] self._verify_common_counter(download, 'image.download', 42) self.assertEqual(fake_uuid('d'), download.user_id) self.assertEqual(fake_uuid('b'), download.project_id) self.assertEqual(sample.TYPE_DELTA, download.type) def test_image_serve(self): handler = notifications.ImageServe() counters = list(handler.process_notification(NOTIFICATION_SEND)) self.assertEqual(1, len(counters)) serve = counters[0] self._verify_common_counter(serve, 'image.serve', 42) self.assertEqual(fake_uuid('e'), serve.project_id) self.assertEqual(fake_uuid('d'), serve.resource_metadata.get('receiver_user_id')) self.assertEqual(fake_uuid('b'), serve.resource_metadata.get('receiver_tenant_id')) self.assertEqual(sample.TYPE_DELTA, serve.type) def test_image_crud_on_update(self): handler = notifications.ImageCRUD() counters = list(handler.process_notification(NOTIFICATION_UPDATE)) self.assertEqual(1, len(counters)) update = counters[0] self._verify_common_counter(update, 'image.update', 1) self.assertEqual(sample.TYPE_DELTA, update.type) def test_image_on_update(self): handler = notifications.Image() counters = list(handler.process_notification(NOTIFICATION_UPDATE)) self.assertEqual(1, len(counters)) update = counters[0] self._verify_common_counter(update, 'image', 1) self.assertEqual(sample.TYPE_GAUGE, update.type) def test_image_size_on_update(self): handler = notifications.ImageSize() counters = list(handler.process_notification(NOTIFICATION_UPDATE)) self.assertEqual(1, len(counters)) update = counters[0] self._verify_common_counter(update, 'image.size', IMAGE_META['size']) self.assertEqual(sample.TYPE_GAUGE, update.type) def test_image_crud_on_upload(self): handler = notifications.ImageCRUD() counters = list(handler.process_notification(NOTIFICATION_UPLOAD)) self.assertEqual(1, len(counters)) upload = counters[0] self._verify_common_counter(upload, 'image.upload', 1) self.assertEqual(sample.TYPE_DELTA, upload.type) def test_image_on_upload(self): handler = notifications.Image() counters = list(handler.process_notification(NOTIFICATION_UPLOAD)) self.assertEqual(1, len(counters)) upload = counters[0] self._verify_common_counter(upload, 'image', 1) self.assertEqual(sample.TYPE_GAUGE, upload.type) def test_image_size_on_upload(self): handler = notifications.ImageSize() counters = list(handler.process_notification(NOTIFICATION_UPLOAD)) self.assertEqual(1, len(counters)) upload = counters[0] self._verify_common_counter(upload, 'image.size', IMAGE_META['size']) self.assertEqual(sample.TYPE_GAUGE, upload.type) def test_image_crud_on_delete(self): handler = notifications.ImageCRUD() counters = list(handler.process_notification(NOTIFICATION_DELETE)) self.assertEqual(1, len(counters)) delete = counters[0] self._verify_common_counter(delete, 'image.delete', 1) self.assertEqual(sample.TYPE_DELTA, delete.type) def test_image_on_delete(self): handler = notifications.Image() counters = list(handler.process_notification(NOTIFICATION_DELETE)) self.assertEqual(1, len(counters)) delete = counters[0] self._verify_common_counter(delete, 'image', 1) self.assertEqual(sample.TYPE_GAUGE, delete.type) def test_image_size_on_delete(self): handler = notifications.ImageSize() counters = list(handler.process_notification(NOTIFICATION_DELETE)) self.assertEqual(1, len(counters)) delete = counters[0] self._verify_common_counter(delete, 'image.size', IMAGE_META['size']) self.assertEqual(sample.TYPE_GAUGE, delete.type) ceilometer-2014.1/ceilometer/tests/image/__init__.py0000664000175300017540000000000012323717130023540 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/image/test_glance.py0000664000175300017540000001413712323717130024311 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Julien Danjou # # 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 ceilometer.central import manager from ceilometer.image import glance from ceilometer.openstack.common import context from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import test IMAGE_LIST = [ type('Image', (object,), {u'status': u'queued', u'name': "some name", u'deleted': False, u'container_format': None, u'created_at': u'2012-09-18T16:29:46', u'disk_format': None, u'updated_at': u'2012-09-18T16:29:46', u'properties': {}, u'min_disk': 0, u'protected': False, u'id': u'1d21a8d0-25f4-4e0a-b4ec-85f40237676b', u'location': None, u'checksum': None, u'owner': u'4c8364fc20184ed7971b76602aa96184', u'is_public': True, u'deleted_at': None, u'min_ram': 0, u'size': 2048}), type('Image', (object,), {u'status': u'active', u'name': "hello world", u'deleted': False, u'container_format': None, u'created_at': u'2012-09-18T16:27:41', u'disk_format': None, u'updated_at': u'2012-09-18T16:27:41', u'properties': {}, u'min_disk': 0, u'protected': False, u'id': u'22be9f90-864d-494c-aa74-8035fd535989', u'location': None, u'checksum': None, u'owner': u'9e4f98287a0246daa42eaf4025db99d4', u'is_public': True, u'deleted_at': None, u'min_ram': 0, u'size': 0}), type('Image', (object,), {u'status': u'queued', u'name': None, u'deleted': False, u'container_format': None, u'created_at': u'2012-09-18T16:23:27', u'disk_format': "raw", u'updated_at': u'2012-09-18T16:23:27', u'properties': {}, u'min_disk': 0, u'protected': False, u'id': u'8d133f6c-38a8-403c-b02c-7071b69b432d', u'location': None, u'checksum': None, u'owner': u'5f8806a76aa34ee8b8fc8397bd154319', u'is_public': True, u'deleted_at': None, u'min_ram': 0, u'size': 1024}), # Make one duplicate private image to test the iter_images method. type('Image', (object,), {u'status': u'queued', u'name': "some name", u'deleted': False, u'container_format': None, u'created_at': u'2012-09-18T16:29:46', u'disk_format': None, u'updated_at': u'2012-09-18T16:29:46', u'properties': {}, u'min_disk': 0, u'protected': False, u'id': u'1d21a8d0-25f4-4e0a-b4ec-85f40237676b', u'location': None, u'checksum': None, u'owner': u'4c8364fc20184ed7971b76602aa96184', u'is_public': True, u'deleted_at': None, u'min_ram': 0, u'size': 2048}), ] class _BaseObject(object): pass class TestManager(manager.AgentManager): def __init__(self): super(TestManager, self).__init__() self.keystone = None class TestImagePollster(test.BaseTestCase): def fake_get_glance_client(self, ksclient): glanceclient = _BaseObject() setattr(glanceclient, "images", _BaseObject()) setattr(glanceclient.images, "list", lambda *args, **kwargs: iter(IMAGE_LIST)) return glanceclient @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestImagePollster, self).setUp() self.context = context.get_admin_context() self.manager = TestManager() self.useFixture(mockpatch.PatchObject( glance._Base, 'get_glance_client', side_effect=self.fake_get_glance_client)) def test_iter_images(self): # Tests whether the iter_images method returns an unique image # list when there is nothing in the cache images = list(glance.ImagePollster(). _iter_images(self.manager.keystone, {})) self.assertEqual(len(set(image.id for image in images)), len(images)) def test_iter_images_cached(self): # Tests whether the iter_images method returns the values from # the cache cache = {'images': []} images = list(glance.ImagePollster(). _iter_images(self.manager.keystone, cache)) self.assertEqual([], images) def test_image(self): samples = list(glance.ImagePollster().get_samples(self.manager, {})) self.assertEqual(3, len(samples)) for sample in samples: self.assertEqual(1, sample.volume) def test_image_size(self): samples = list(glance.ImageSizePollster().get_samples(self.manager, {})) self.assertEqual(3, len(samples)) for image in IMAGE_LIST: self.assertTrue( any(map(lambda sample: sample.volume == image.size, samples))) def test_image_get_sample_names(self): samples = list(glance.ImagePollster().get_samples(self.manager, {})) self.assertEqual(set(['image']), set([s.name for s in samples])) def test_image_size_get_sample_names(self): samples = list(glance.ImageSizePollster().get_samples(self.manager, {})) self.assertEqual(set(['image.size']), set([s.name for s in samples])) ceilometer-2014.1/ceilometer/tests/test_utils.py0000664000175300017540000001170412323717130023133 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # Copyright (c) 2013 OpenStack Foundation # # Author: Doug Hellmann # 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. """Tests for ceilometer/utils.py """ import datetime import decimal from ceilometer.openstack.common import test from ceilometer import utils class TestUtils(test.BaseTestCase): def test_datetime_to_decimal(self): expected = 1356093296.12 utc_datetime = datetime.datetime.utcfromtimestamp(expected) actual = utils.dt_to_decimal(utc_datetime) self.assertEqual(expected, float(actual)) def test_decimal_to_datetime(self): expected = 1356093296.12 dexpected = decimal.Decimal(str(expected)) # Python 2.6 wants str() expected_datetime = datetime.datetime.utcfromtimestamp(expected) actual_datetime = utils.decimal_to_dt(dexpected) self.assertEqual(expected_datetime, actual_datetime) def test_recursive_keypairs(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B'}} pairs = list(utils.recursive_keypairs(data)) self.assertEqual([('a', 'A'), ('b', 'B'), ('nested:a', 'A'), ('nested:b', 'B')], pairs) def test_recursive_keypairs_with_separator(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', }, } separator = '.' pairs = list(utils.recursive_keypairs(data, separator)) self.assertEqual([('a', 'A'), ('b', 'B'), ('nested.a', 'A'), ('nested.b', 'B')], pairs) def test_recursive_keypairs_with_list_of_dict(self): small = 1 big = 1 << 64 expected = [('a', 'A'), ('b', 'B'), ('nested:list', ['{%d: 99, %dL: 42}' % (small, big)])] # the keys 1 and 1<<64 cause a hash collision on 64bit platforms for nested in [{small: 99, big: 42}, {big: 42, small: 99}]: data = {'a': 'A', 'b': 'B', 'nested': {'list': [nested]}} pairs = list(utils.recursive_keypairs(data)) self.assertEqual(expected, pairs) def test_restore_nesting_unested(self): metadata = {'a': 'A', 'b': 'B'} unwound = utils.restore_nesting(metadata) self.assertIs(metadata, unwound) def test_restore_nesting(self): metadata = {'a': 'A', 'b': 'B', 'nested:a': 'A', 'nested:b': 'B', 'nested:twice:c': 'C', 'nested:twice:d': 'D', 'embedded:e': 'E'} unwound = utils.restore_nesting(metadata) expected = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', 'twice': {'c': 'C', 'd': 'D'}}, 'embedded': {'e': 'E'}} self.assertEqual(expected, unwound) self.assertIsNot(metadata, unwound) def test_restore_nesting_with_separator(self): metadata = {'a': 'A', 'b': 'B', 'nested.a': 'A', 'nested.b': 'B', 'nested.twice.c': 'C', 'nested.twice.d': 'D', 'embedded.e': 'E'} unwound = utils.restore_nesting(metadata, separator='.') expected = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', 'twice': {'c': 'C', 'd': 'D'}}, 'embedded': {'e': 'E'}} self.assertEqual(expected, unwound) self.assertIsNot(metadata, unwound) def test_decimal_to_dt_with_none_parameter(self): self.assertIsNone(utils.decimal_to_dt(None)) def test_dict_to_kv(self): data = {'a': 'A', 'b': 'B', 'nested': {'a': 'A', 'b': 'B', }, 'nested2': [{'c': 'A'}, {'c': 'B'}] } pairs = list(utils.dict_to_keyval(data)) self.assertEqual([('a', 'A'), ('b', 'B'), ('nested2[0].c', 'A'), ('nested2[1].c', 'B'), ('nested.a', 'A'), ('nested.b', 'B')], pairs) ceilometer-2014.1/ceilometer/tests/test_collector.py0000664000175300017540000001440412323717132023763 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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 socket import mock from mock import patch import msgpack from stevedore import extension from ceilometer import collector from ceilometer.openstack.common.fixture import config from ceilometer import sample from ceilometer.tests import base as tests_base class FakeConnection(): def create_worker(self, topic, proxy, pool_name): pass class TestCollector(tests_base.BaseTestCase): def setUp(self): super(TestCollector, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override("connection", "log://", group='database') self.srv = collector.CollectorService('the-host', 'the-topic') self.counter = sample.Sample( name='foobar', type='bad', unit='F', volume=1, user_id='jd', project_id='ceilometer', resource_id='cat', timestamp='NOW!', resource_metadata={}, ).as_dict() def _make_test_manager(self, plugin): return extension.ExtensionManager.make_test_instance([ extension.Extension( 'test', None, None, plugin, ), ]) def _make_fake_socket(self): def recvfrom(size): # Make the loop stop self.srv.stop() return (msgpack.dumps(self.counter), ('127.0.0.1', 12345)) sock = mock.Mock() sock.recvfrom = recvfrom return sock def _verify_udp_socket(self, udp_socket): conf = self.CONF.collector udp_socket.setsockopt.assert_called_once_with(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) udp_socket.bind.assert_called_once_with((conf.udp_address, conf.udp_port)) def test_record_metering_data(self): mock_dispatcher = mock.MagicMock() self.srv.dispatcher_manager = self._make_test_manager(mock_dispatcher) self.srv.record_metering_data(None, self.counter) mock_dispatcher.record_metering_data.assert_called_once_with( data=self.counter) def test_udp_receive(self): mock_dispatcher = mock.MagicMock() self.srv.dispatcher_manager = self._make_test_manager(mock_dispatcher) self.counter['source'] = 'mysource' self.counter['counter_name'] = self.counter['name'] self.counter['counter_volume'] = self.counter['volume'] self.counter['counter_type'] = self.counter['type'] self.counter['counter_unit'] = self.counter['unit'] udp_socket = self._make_fake_socket() with patch('socket.socket', return_value=udp_socket): self.srv.start_udp() self._verify_udp_socket(udp_socket) mock_dispatcher.record_metering_data.assert_called_once_with( self.counter) def test_udp_receive_storage_error(self): mock_dispatcher = mock.MagicMock() self.srv.dispatcher_manager = self._make_test_manager(mock_dispatcher) mock_dispatcher.record_metering_data.side_effect = self._raise_error self.counter['source'] = 'mysource' self.counter['counter_name'] = self.counter['name'] self.counter['counter_volume'] = self.counter['volume'] self.counter['counter_type'] = self.counter['type'] self.counter['counter_unit'] = self.counter['unit'] udp_socket = self._make_fake_socket() with patch('socket.socket', return_value=udp_socket): self.srv.start_udp() self._verify_udp_socket(udp_socket) mock_dispatcher.record_metering_data.assert_called_once_with( self.counter) @staticmethod def _raise_error(): raise Exception def test_udp_receive_bad_decoding(self): udp_socket = self._make_fake_socket() with patch('socket.socket', return_value=udp_socket): with patch('msgpack.loads', self._raise_error): self.srv.start_udp() self._verify_udp_socket(udp_socket) @patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) @patch('ceilometer.event.converter.setup_events', mock.MagicMock()) def test_init_host(self): # If we try to create a real RPC connection, init_host() never # returns. Mock it out so we can establish the service # configuration. with patch('ceilometer.openstack.common.rpc.create_connection'): self.srv.start() def test_only_udp(self): """Check that only UDP is started if rpc_backend is empty.""" self.CONF.set_override('rpc_backend', '') udp_socket = self._make_fake_socket() with patch('socket.socket', return_value=udp_socket): self.srv.start() def test_only_rpc(self): """Check that only RPC is started if udp_address is empty.""" self.CONF.set_override('udp_address', '', group='collector') with patch('ceilometer.openstack.common.rpc.create_connection'): self.srv.start() @patch.object(FakeConnection, 'create_worker') @patch('ceilometer.openstack.common.rpc.dispatcher.RpcDispatcher') def test_initialize_service_hook_conf_opt(self, mock_dispatcher, mock_worker): self.CONF.set_override('metering_topic', 'mytopic', group='publisher_rpc') self.srv.conn = FakeConnection() self.srv.initialize_service_hook(mock.MagicMock()) mock_worker.assert_called_once_with('mytopic', mock_dispatcher(), 'ceilometer.collector.mytopic') ceilometer-2014.1/ceilometer/tests/db.py0000664000175300017540000001003112323717132021313 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # Copyright © 2013 eNovance # # Author: Doug Hellmann # Julien Danjou # # 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. """Base classes for API tests.""" import os import uuid import warnings import six from ceilometer.openstack.common.fixture import config import ceilometer.openstack.common.fixture.mockpatch as oslo_mock from ceilometer import storage from ceilometer.tests import base as test_base class TestBase(test_base.BaseTestCase): def setUp(self): super(TestBase, self).setUp() if self.database_connection is None: self.skipTest("No connection URL set") self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override('connection', str(self.database_connection), group='database') with warnings.catch_warnings(): warnings.filterwarnings( action='ignore', message='.*you must provide a username and password.*') try: self.conn = storage.get_connection(self.CONF) except storage.StorageBadVersion as e: self.skipTest(six.text_type(e)) self.conn.upgrade() self.useFixture(oslo_mock.Patch('ceilometer.storage.get_connection', return_value=self.conn)) self.CONF([], project='ceilometer') # Set a default location for the pipeline config file so the # tests work even if ceilometer is not installed globally on # the system. self.CONF.set_override( 'pipeline_cfg_file', self.path_get('etc/ceilometer/pipeline.yaml') ) def tearDown(self): self.conn.clear() self.conn = None super(TestBase, self).tearDown() class MongoDBFakeConnectionUrl(object): def __init__(self): self.url = os.environ.get('CEILOMETER_TEST_MONGODB_URL') if not self.url: raise RuntimeError( "No MongoDB test URL set," "export CEILOMETER_TEST_MONGODB_URL environment variable") def __str__(self): return '%(url)s_%(db)s' % dict(url=self.url, db=uuid.uuid4().hex) class DB2FakeConnectionUrl(MongoDBFakeConnectionUrl): def __init__(self): self.url = (os.environ.get('CEILOMETER_TEST_DB2_URL') or os.environ.get('CEILOMETER_TEST_MONGODB_URL')) if not self.url: raise RuntimeError( "No DB2 test URL set, " "export CEILOMETER_TEST_DB2_URL environment variable") else: # This is to make sure that the db2 driver is used when # CEILOMETER_TEST_DB2_URL was not set self.url = self.url.replace('mongodb:', 'db2:', 1) class HBaseFakeConnectionUrl(object): def __init__(self): self.url = os.environ.get('CEILOMETER_TEST_HBASE_URL') if not self.url: self.url = 'hbase://__test__' def __str__(self): s = '%s?table_prefix=%s' % ( self.url, uuid.uuid4().hex) return s @six.add_metaclass(test_base.SkipNotImplementedMeta) class MixinTestsWithBackendScenarios(object): scenarios = [ ('sqlalchemy', dict(database_connection='sqlite://')), ('mongodb', dict(database_connection=MongoDBFakeConnectionUrl())), ('hbase', dict(database_connection=HBaseFakeConnectionUrl())), ('db2', dict(database_connection=DB2FakeConnectionUrl())), ] ceilometer-2014.1/ceilometer/tests/volume/0000775000175300017540000000000012323717426021676 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/volume/test_notifications.py0000664000175300017540000001620612323717130026155 0ustar jenkinsjenkins00000000000000# 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. from ceilometer.openstack.common import test from ceilometer.volume import notifications NOTIFICATION_VOLUME_EXISTS = { u'_context_roles': [u'admin'], u'_context_request_id': u'req-7ef29a5d-adeb-48a8-b104-59c05361aa27', u'_context_quota_class': None, u'event_type': u'volume.exists', u'timestamp': u'2012-09-21 09:29:10.620731', u'message_id': u'e0e6a5ad-2fc9-453c-b3fb-03fe504538dc', u'_context_auth_token': None, u'_context_is_admin': True, u'_context_project_id': None, u'_context_timestamp': u'2012-09-21T09:29:10.266928', u'_context_read_deleted': u'no', u'_context_user_id': None, u'_context_remote_address': None, u'publisher_id': u'volume.ubuntu-VirtualBox', u'payload': {u'status': u'available', u'audit_period_beginning': u'2012-09-20 00:00:00', u'display_name': u'volume1', u'tenant_id': u'6c97f1ecf17047eab696786d56a0bff5', u'created_at': u'2012-09-20 15:05:16', u'snapshot_id': None, u'volume_type': None, u'volume_id': u'84c363b9-9854-48dc-b949-fe04263f4cf0', u'audit_period_ending': u'2012-09-21 00:00:00', u'user_id': u'4d2fa4b76a4a4ecab8c468c8dea42f89', u'launched_at': u'2012-09-20 15:05:23', u'size': 2}, u'priority': u'INFO' } NOTIFICATION_VOLUME_DELETE = { u'_context_roles': [u'Member', u'admin'], u'_context_request_id': u'req-6ba8ccb4-1093-4a39-b029-adfaa3fc7ceb', u'_context_quota_class': None, u'event_type': u'volume.delete.start', u'timestamp': u'2012-09-21 10:24:13.168630', u'message_id': u'f6e6bc1f-fcd5-41e1-9a86-da7d024f03d9', u'_context_auth_token': u'277c6899de8a4b3d999f3e2e4c0915ff', u'_context_is_admin': True, u'_context_project_id': u'6c97f1ecf17047eab696786d56a0bff5', u'_context_timestamp': u'2012-09-21T10:23:54.741228', u'_context_read_deleted': u'no', u'_context_user_id': u'4d2fa4b76a4a4ecab8c468c8dea42f89', u'_context_remote_address': u'192.168.22.101', u'publisher_id': u'volume.ubuntu-VirtualBox', u'payload': {u'status': u'deleting', u'volume_type_id': None, u'display_name': u'abc', u'tenant_id': u'6c97f1ecf17047eab696786d56a0bff5', u'created_at': u'2012-09-21 10:10:47', u'snapshot_id': None, u'volume_id': u'3b761164-84b4-4eb3-8fcb-1974c641d6ef', u'user_id': u'4d2fa4b76a4a4ecab8c468c8dea42f89', u'launched_at': u'2012-09-21 10:10:50', u'size': 3}, u'priority': u'INFO'} NOTIFICATION_VOLUME_RESIZE = { u'_context_roles': [u'Member', u'admin'], u'_context_request_id': u'req-6ba8ccb4-1093-4a39-b029-adfaa3fc7ceb', u'_context_quota_class': None, u'event_type': u'volume.resize.end', u'timestamp': u'2012-09-21 10:24:13.168630', u'message_id': u'b5814258-3425-4eb7-b6b7-bf4811203e58', u'_context_auth_token': u'277c6899de8a4b3d999f3e2e4c0915ff', u'_context_is_admin': True, u'_context_project_id': u'6c97f1ecf17047eab696786d56a0bff5', u'_context_timestamp': u'2012-09-21T10:02:27.134211', u'_context_read_deleted': u'no', u'_context_user_id': u'4d2fa4b76a4a4ecab8c468c8dea42f89', u'_context_remote_address': u'192.168.22.101', u'publisher_id': u'volume.ubuntu-VirtualBox', u'payload': {u'status': u'extending', u'volume_type_id': None, u'display_name': u'abc', u'tenant_id': u'6c97f1ecf17047eab696786d56a0bff5', u'created_at': u'2012-09-21 10:10:47', u'snapshot_id': None, u'volume_id': u'3b761164-84b4-4eb3-8fcb-1974c641d6ef', u'user_id': u'4d2fa4b76a4a4ecab8c468c8dea42f89', u'launched_at': u'2012-09-21 10:10:50', u'size': 3}, u'priority': u'INFO'} class TestNotifications(test.BaseTestCase): def _verify_common_sample(self, s, name, notification): self.assertIsNotNone(s) self.assertEqual(s.name, name) self.assertEqual(notification['payload']['volume_id'], s.resource_id) self.assertEqual(notification['timestamp'], s.timestamp) metadata = s.resource_metadata self.assertEqual(notification['publisher_id'], metadata.get('host')) def test_volume_exists(self): v = notifications.Volume() samples = list(v.process_notification(NOTIFICATION_VOLUME_EXISTS)) self.assertEqual(1, len(samples)) s = samples[0] self._verify_common_sample(s, 'volume', NOTIFICATION_VOLUME_EXISTS) self.assertEqual(1, s.volume) def test_volume_size_exists(self): v = notifications.VolumeSize() samples = list(v.process_notification(NOTIFICATION_VOLUME_EXISTS)) self.assertEqual(1, len(samples)) s = samples[0] self._verify_common_sample(s, 'volume.size', NOTIFICATION_VOLUME_EXISTS) self.assertEqual(NOTIFICATION_VOLUME_EXISTS['payload']['size'], s.volume) def test_volume_delete(self): v = notifications.Volume() samples = list(v.process_notification(NOTIFICATION_VOLUME_DELETE)) self.assertEqual(1, len(samples)) s = samples[0] self._verify_common_sample(s, 'volume', NOTIFICATION_VOLUME_DELETE) self.assertEqual(1, s.volume) def test_volume_size_delete(self): v = notifications.VolumeSize() samples = list(v.process_notification(NOTIFICATION_VOLUME_DELETE)) self.assertEqual(1, len(samples)) s = samples[0] self._verify_common_sample(s, 'volume.size', NOTIFICATION_VOLUME_DELETE) self.assertEqual(NOTIFICATION_VOLUME_DELETE['payload']['size'], s.volume) def test_volume_resize(self): v = notifications.Volume() samples = list(v.process_notification(NOTIFICATION_VOLUME_RESIZE)) self.assertEqual(1, len(samples)) s = samples[0] self._verify_common_sample(s, 'volume', NOTIFICATION_VOLUME_RESIZE) self.assertEqual(1, s.volume) def test_volume_size_resize(self): v = notifications.VolumeSize() samples = list(v.process_notification(NOTIFICATION_VOLUME_RESIZE)) self.assertEqual(1, len(samples)) s = samples[0] self._verify_common_sample(s, 'volume.size', NOTIFICATION_VOLUME_RESIZE) self.assertEqual(NOTIFICATION_VOLUME_RESIZE['payload']['size'], s.volume) ceilometer-2014.1/ceilometer/tests/volume/__init__.py0000664000175300017540000000000012323717130023765 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/orchestration/0000775000175300017540000000000012323717426023253 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/orchestration/test_notifications.py0000664000175300017540000001052512323717130027530 0ustar jenkinsjenkins00000000000000# Author: Swann Croiset # # 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 datetime from oslo.config import cfg from ceilometer.openstack.common import test from ceilometer.orchestration import notifications from ceilometer import sample NOW = datetime.datetime.isoformat(datetime.datetime.utcnow()) TENANT_ID = u'4c35985848bf4419b3f3d52c22e5792d' STACK_NAME = u'AS1-ASGroup-53sqbo7sor7i' STACK_ID = u'cb4a6fd1-1f5d-4002-ae91-9b91573cfb03' USER_NAME = u'demo' USER_ID = u'2e61f25ec63a4f6c954a6245421448a4' TRUSTOR_ID = u'foo-Trustor-Id' STACK_ARN = u'arn:openstack:heat::%s:stacks/%s/%s' % (TENANT_ID, STACK_NAME, STACK_ID) CONF = cfg.CONF CONF.set_override('use_stderr', True) from ceilometer.openstack.common import log LOG = log.getLogger(__name__) def stack_notification_for(operation, use_trust=None): if use_trust: trust_id = 'footrust' trustor_id = TRUSTOR_ID else: trust_id = None trustor_id = None return { u'event_type': '%s.stack.%s.end' % (notifications.SERVICE, operation), u'_context_roles': [ u'Member', ], u'_context_request_id': u'req-cf24cf30-af35-4a47-ae29-e74d75ebc6de', u'_context_auth_url': u'http://0.1.0.1:1010/v2.0', u'timestamp': NOW, u'_unique_id': u'1afb4283660f410c802af4d5992a39f2', u'_context_tenant_id': TENANT_ID, u'payload': { u'state_reason': u'Stack create completed successfully', u'user_id': USER_NAME, u'stack_identity': STACK_ARN, u'stack_name': STACK_NAME, u'tenant_id': TENANT_ID, u'create_at': u'2014-01-27T13:13:19Z', u'state': u'CREATE_COMPLETE' }, u'_context_username': USER_NAME, u'_context_auth_token': u'MIISAwYJKoZIhvcNAQcCoII...', u'_context_password': u'password', u'_context_user_id': USER_ID, u'_context_trustor_user_id': trustor_id, u'_context_aws_creds': None, u'_context_show_deleted': False, u'_context_tenant': USER_NAME, u'_context_trust_id': trust_id, u'priority': u'INFO', u'_context_is_admin': False, u'_context_user': USER_NAME, u'publisher_id': u'orchestration.node-n5x66lxdy67d', u'message_id': u'ef921faa-7f7b-4854-8b86-a424ab93c96e', } class TestNotification(test.BaseTestCase): def _verify_common_sample(self, s, name, volume): self.assertIsNotNone(s) self.assertEqual(s.name, 'stack.%s' % name) self.assertEqual(s.timestamp, NOW) self.assertEqual(s.type, sample.TYPE_DELTA) self.assertEqual(s.project_id, TENANT_ID) self.assertEqual(s.resource_id, STACK_ARN) metadata = s.resource_metadata self.assertEqual(metadata.get('host'), u'orchestration.node-n5x66lxdy67d') def _test_operation(self, operation, trust=None): notif = stack_notification_for(operation, trust) handler = notifications.StackCRUD() data = list(handler.process_notification(notif)) self.assertEqual(len(data), 1) if trust: self.assertEqual(data[0].user_id, TRUSTOR_ID) else: self.assertEqual(data[0].user_id, USER_ID) self._verify_common_sample(data[0], operation, 1) def test_create(self): self._test_operation('create') def test_create_trust(self): self._test_operation('create', trust=True) def test_update(self): self._test_operation('update') def test_delete(self): self._test_operation('delete') def test_resume(self): self._test_operation('resume') def test_suspend(self): self._test_operation('suspend') ceilometer-2014.1/ceilometer/tests/orchestration/__init__.py0000664000175300017540000000000012323717130025342 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/__init__.py0000664000175300017540000000000012323717130022456 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/test_deprecated_pipeline.py0000664000175300017540000001041112323717130025752 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2014 Red Hat, Inc # # Author: Eoghan Glynn # # 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 yaml from ceilometer import pipeline from ceilometer.tests import pipeline_base class TestDeprecatedPipeline(pipeline_base.BasePipelineTestCase): def _setup_pipeline_cfg(self): self.pipeline_cfg = [{ 'name': 'test_pipeline', 'interval': 5, 'counters': ['a'], 'transformers': [ {'name': 'update', 'parameters': {}} ], 'publishers': ['test://'], }, ] def _augment_pipeline_cfg(self): self.pipeline_cfg.append({ 'name': 'second_pipeline', 'interval': 5, 'counters': ['b'], 'transformers': [{ 'name': 'update', 'parameters': { 'append_name': '_new', } }], 'publishers': ['new'], }) def _break_pipeline_cfg(self): self.pipeline_cfg.append({ 'name': 'second_pipeline', 'interval': 5, 'counters': ['b'], 'transformers': [{ 'name': 'update', 'parameters': { 'append_name': '_new', } }], 'publishers': ['except'], }) def _set_pipeline_cfg(self, field, value): self.pipeline_cfg[0][field] = value def _extend_pipeline_cfg(self, field, value): self.pipeline_cfg[0][field].extend(value) def _unset_pipeline_cfg(self, field): del self.pipeline_cfg[0][field] def _do_test_rate_of_change_in_boilerplate_pipeline_cfg(self, index, meters, units): with open('etc/ceilometer/deprecated_pipeline.yaml') as fap: data = fap.read() pipeline_cfg = yaml.safe_load(data) for p in pipeline_cfg: p['publishers'] = ['test://'] pipeline_manager = pipeline.PipelineManager(pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[index] self._do_test_rate_of_change_mapping(pipe, meters, units) def test_rate_of_change_boilerplate_disk_read_cfg(self): meters = ('disk.read.bytes', 'disk.read.requests') units = ('B', 'request') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(2, meters, units) def test_rate_of_change_boilerplate_disk_write_cfg(self): meters = ('disk.write.bytes', 'disk.write.requests') units = ('B', 'request') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(2, meters, units) def test_rate_of_change_boilerplate_network_incoming_cfg(self): meters = ('network.incoming.bytes', 'network.incoming.packets') units = ('B', 'packet') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(3, meters, units) def test_rate_of_change_boilerplate_network_outgoing_cfg(self): meters = ('network.outgoing.bytes', 'network.outgoing.packets') units = ('B', 'packet') self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(3, meters, units) ceilometer-2014.1/ceilometer/tests/objectstore/0000775000175300017540000000000012323717426022712 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/objectstore/test_swift_middleware.py0000664000175300017540000003265312323717132027657 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # # Author: Julien Danjou # # 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 six import mock import webob from ceilometer.objectstore import swift_middleware from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common.fixture.mockpatch import PatchObject from ceilometer.openstack.common import test from ceilometer import pipeline class FakeApp(object): def __init__(self, body=['This string is 28 bytes long']): self.body = body def __call__(self, env, start_response): start_response('200 OK', [ ('Content-Type', 'text/plain'), ('Content-Length', str(sum(map(len, self.body)))) ]) while env['wsgi.input'].read(5): pass return self.body class TestSwiftMiddleware(test.BaseTestCase): class _faux_pipeline_manager(pipeline.PipelineManager): class _faux_pipeline(object): def __init__(self, pipeline_manager): self.pipeline_manager = pipeline_manager self.samples = [] def publish_samples(self, ctxt, samples): self.samples.extend(samples) def flush(self, context): pass def __init__(self): self.pipelines = [self._faux_pipeline(self)] def _fake_setup_pipeline(self, transformer_manager=None): return self.pipeline_manager def setUp(self): super(TestSwiftMiddleware, self).setUp() self.pipeline_manager = self._faux_pipeline_manager() self.useFixture(PatchObject(pipeline, 'setup_pipeline', side_effect=self._fake_setup_pipeline)) self.CONF = self.useFixture(config.Config()).conf @staticmethod def start_response(*args): pass def test_rpc_setup(self): swift_middleware.CeilometerMiddleware(FakeApp(), {}) self.assertEqual('ceilometer', self.CONF.control_exchange) def test_get(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), {}) req = webob.Request.blank('/1.0/account/container/obj', environ={'REQUEST_METHOD': 'GET'}) resp = app(req.environ, self.start_response) self.assertEqual(["This string is 28 bytes long"], list(resp)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] self.assertEqual(28, data.volume) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertEqual('obj', data.resource_metadata['object']) # test the # of request and the request method data = samples[1] self.assertEqual('storage.api.request', data.name) self.assertEqual(1, data.volume) self.assertEqual('get', data.resource_metadata['method']) def test_put(self): app = swift_middleware.CeilometerMiddleware(FakeApp(body=['']), {}) req = webob.Request.blank('/1.0/account/container/obj', environ={'REQUEST_METHOD': 'PUT', 'wsgi.input': six.moves.cStringIO('some stuff')}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] self.assertEqual(10, data.volume) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertEqual('obj', data.resource_metadata['object']) # test the # of request and the request method data = samples[1] self.assertEqual('storage.api.request', data.name) self.assertEqual(1, data.volume) self.assertEqual('put', data.resource_metadata['method']) def test_post(self): app = swift_middleware.CeilometerMiddleware(FakeApp(body=['']), {}) req = webob.Request.blank( '/1.0/account/container/obj', environ={'REQUEST_METHOD': 'POST', 'wsgi.input': six.moves.cStringIO('some other stuff')}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] self.assertEqual(16, data.volume) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertEqual('obj', data.resource_metadata['object']) # test the # of request and the request method data = samples[1] self.assertEqual('storage.api.request', data.name) self.assertEqual(1, data.volume) self.assertEqual('post', data.resource_metadata['method']) def test_head(self): app = swift_middleware.CeilometerMiddleware(FakeApp(body=['']), {}) req = webob.Request.blank('/1.0/account/container/obj', environ={'REQUEST_METHOD': 'HEAD'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(1, len(samples)) data = samples[0] self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertEqual('obj', data.resource_metadata['object']) self.assertEqual('head', data.resource_metadata['method']) self.assertEqual('storage.api.request', data.name) self.assertEqual(1, data.volume) def test_bogus_request(self): """Test even for arbitrary request method, this will still work.""" app = swift_middleware.CeilometerMiddleware(FakeApp(body=['']), {}) req = webob.Request.blank('/1.0/account/container/obj', environ={'REQUEST_METHOD': 'BOGUS'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(1, len(samples)) data = samples[0] self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertEqual('obj', data.resource_metadata['object']) self.assertEqual('bogus', data.resource_metadata['method']) self.assertEqual('storage.api.request', data.name) self.assertEqual(1, data.volume) def test_get_container(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), {}) req = webob.Request.blank('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] self.assertEqual(28, data.volume) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertIsNone(data.resource_metadata['object']) def test_no_metadata_headers(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), {}) req = webob.Request.blank('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] http_headers = [k for k in data.resource_metadata.keys() if k.startswith('http_header_')] self.assertEqual(0, len(http_headers)) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertIsNone(data.resource_metadata['object']) def test_metadata_headers(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), { 'metadata_headers': 'X_VAR1, x-var2, x-var3' }) req = webob.Request.blank('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}, headers={'X_VAR1': 'value1', 'X_VAR2': 'value2'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] http_headers = [k for k in data.resource_metadata.keys() if k.startswith('http_header_')] self.assertEqual(2, len(http_headers)) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertIsNone(data.resource_metadata['object']) self.assertEqual('value1', data.resource_metadata['http_header_x_var1']) self.assertEqual('value2', data.resource_metadata['http_header_x_var2']) self.assertFalse('http_header_x_var3' in data.resource_metadata) def test_metadata_headers_on_not_existing_header(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), { 'metadata_headers': 'x-var3' }) req = webob.Request.blank('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(2, len(samples)) data = samples[0] http_headers = [k for k in data.resource_metadata.keys() if k.startswith('http_header_')] self.assertEqual(0, len(http_headers)) self.assertEqual('1.0', data.resource_metadata['version']) self.assertEqual('container', data.resource_metadata['container']) self.assertIsNone(data.resource_metadata['object']) def test_bogus_path(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), {}) req = webob.Request.blank('//v1/account/container', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(0, len(samples)) def test_missing_resource_id(self): app = swift_middleware.CeilometerMiddleware(FakeApp(), {}) req = webob.Request.blank('/5.0/', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(0, len(samples)) @mock.patch.object(swift_middleware.CeilometerMiddleware, 'publish_sample') def test_publish_sample_fail(self, mocked_publish_sample): mocked_publish_sample.side_effect = Exception("a exception") app = swift_middleware.CeilometerMiddleware(FakeApp(body=["test"]), {}) req = webob.Request.blank('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) resp = list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples self.assertEqual(0, len(samples)) self.assertEqual(["test"], resp) mocked_publish_sample.assert_called_once_with(mock.ANY, 0, 4) def test_reseller_prefix(self): # No reseller prefix set: ensure middleware uses AUTH_ app = swift_middleware.CeilometerMiddleware(FakeApp(), {}) req = webob.Request.blank('/1.0/AUTH_account/container/obj', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples[0] self.assertEqual("account", samples.resource_id) # Custom reseller prefix set app = swift_middleware.CeilometerMiddleware( FakeApp(), {'reseller_prefix': 'CUSTOM_'}) req = webob.Request.blank('/1.0/CUSTOM_account/container/obj', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples[0] self.assertEqual("account", samples.resource_id) def test_invalid_reseller_prefix(self): # Custom reseller prefix set, but without trailing underscore app = swift_middleware.CeilometerMiddleware( FakeApp(), {'reseller_prefix': 'CUSTOM'}) req = webob.Request.blank('/1.0/CUSTOM_account/container/obj', environ={'REQUEST_METHOD': 'GET'}) list(app(req.environ, self.start_response)) samples = self.pipeline_manager.pipelines[0].samples[0] self.assertEqual("account", samples.resource_id) ceilometer-2014.1/ceilometer/tests/objectstore/test_swift.py0000664000175300017540000001542612323717132025461 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # # Author: Guillaume Pernot # # 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 collections from keystoneclient import exceptions import mock from swiftclient import client as swift_client import testscenarios from ceilometer.central import manager from ceilometer.objectstore import swift from ceilometer.openstack.common.fixture.mockpatch import PatchObject from ceilometer.openstack.common import test load_tests = testscenarios.load_tests_apply_scenarios HEAD_ACCOUNTS = [('tenant-000', {'x-account-object-count': 12, 'x-account-bytes-used': 321321321, 'x-account-container-count': 7, }), ('tenant-001', {'x-account-object-count': 34, 'x-account-bytes-used': 9898989898, 'x-account-container-count': 17, })] GET_ACCOUNTS = [('tenant-002', ({'x-account-object-count': 10, 'x-account-bytes-used': 123123, 'x-account-container-count': 2, }, [{'count': 10, 'bytes': 123123, 'name': 'my_container'}, {'count': 0, 'bytes': 0, 'name': 'new_container' }])), ('tenant-003', ({'x-account-object-count': 0, 'x-account-bytes-used': 0, 'x-account-container-count': 0, }, [])), ] class TestManager(manager.AgentManager): def __init__(self): super(TestManager, self).__init__() self.keystone = mock.MagicMock() class TestSwiftPollster(test.BaseTestCase): # Define scenarios to run all of the tests against all of the # pollsters. scenarios = [ ('storage.objects', {'factory': swift.ObjectsPollster}), ('storage.objects.size', {'factory': swift.ObjectsSizePollster}), ('storage.objects.containers', {'factory': swift.ObjectsContainersPollster}), ('storage.containers.objects', {'factory': swift.ContainersObjectsPollster}), ('storage.containers.objects.size', {'factory': swift.ContainersSizePollster}), ] @staticmethod def fake_ks_service_catalog_url_for(*args, **kwargs): raise exceptions.EndpointNotFound("Fake keystone exception") def fake_iter_accounts(self, ksclient, cache): for i in self.ACCOUNTS: yield i @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestSwiftPollster, self).setUp() self.pollster = self.factory() self.manager = TestManager() if self.pollster.CACHE_KEY_METHOD == 'swift.head_account': self.ACCOUNTS = HEAD_ACCOUNTS else: self.ACCOUNTS = GET_ACCOUNTS def test_iter_accounts_no_cache(self): cache = {} with PatchObject(self.factory, '_get_account_info', return_value=[]): data = list(self.pollster._iter_accounts(mock.Mock(), cache)) self.assertTrue(self.pollster.CACHE_KEY_TENANT in cache) self.assertTrue(self.pollster.CACHE_KEY_METHOD in cache) self.assertEqual([], data) def test_iter_accounts_tenants_cached(self): # Verify that if there are tenants pre-cached then the account # info loop iterates over those instead of asking for the list # again. ksclient = mock.Mock() ksclient.tenants.list.side_effect = AssertionError( 'should not be called', ) api_method = '%s_account' % self.pollster.METHOD with PatchObject(swift_client, api_method, new=ksclient): with PatchObject(self.factory, '_neaten_url'): Tenant = collections.namedtuple('Tenant', 'id') cache = { self.pollster.CACHE_KEY_TENANT: [ Tenant(self.ACCOUNTS[0][0]) ], } data = list(self.pollster._iter_accounts(mock.Mock(), cache)) self.assertTrue(self.pollster.CACHE_KEY_METHOD in cache) self.assertEqual(self.ACCOUNTS[0][0], data[0][0]) def test_neaten_url(self): test_endpoint = 'http://127.0.0.1:8080' test_tenant_id = 'a7fd1695fa154486a647e44aa99a1b9b' standard_url = test_endpoint + '/v1/' + 'AUTH_' + test_tenant_id self.assertEqual(standard_url, swift._Base._neaten_url(test_endpoint, test_tenant_id)) self.assertEqual(standard_url, swift._Base._neaten_url(test_endpoint + '/', test_tenant_id)) self.assertEqual(standard_url, swift._Base._neaten_url(test_endpoint + '/v1', test_tenant_id)) self.assertEqual(standard_url, swift._Base._neaten_url(standard_url, test_tenant_id)) def test_metering(self): with PatchObject(self.factory, '_iter_accounts', side_effect=self.fake_iter_accounts): samples = list(self.pollster.get_samples(self.manager, {})) self.assertEqual(2, len(samples)) def test_get_meter_names(self): with PatchObject(self.factory, '_iter_accounts', side_effect=self.fake_iter_accounts): samples = list(self.pollster.get_samples(self.manager, {})) self.assertEqual(set([samples[0].name]), set([s.name for s in samples])) def test_endpoint_notfound(self): with PatchObject(self.manager.keystone.service_catalog, 'url_for', side_effect=self.fake_ks_service_catalog_url_for): samples = list(self.pollster.get_samples(self.manager, {})) self.assertEqual(0, len(samples)) ceilometer-2014.1/ceilometer/tests/objectstore/__init__.py0000664000175300017540000000000012323717130025001 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/event/0000775000175300017540000000000012323717426021510 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/event/__init__.py0000664000175300017540000000000012323717130023577 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/event/test_trait_plugins.py0000664000175300017540000001044712323717130026003 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Rackspace Hosting. # # Author: Monsyne Dragon # # 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. from ceilometer.event import trait_plugins from ceilometer.openstack.common import test class TestSplitterPlugin(test.BaseTestCase): def setUp(self): super(TestSplitterPlugin, self).setUp() self.pclass = trait_plugins.SplitterTraitPlugin def test_split(self): param = dict(separator='-', segment=0) plugin = self.pclass(**param) match_list = [('test.thing', 'test-foobar-baz')] value = plugin.trait_value(match_list) self.assertEqual('test', value) param = dict(separator='-', segment=1) plugin = self.pclass(**param) match_list = [('test.thing', 'test-foobar-baz')] value = plugin.trait_value(match_list) self.assertEqual('foobar', value) param = dict(separator='-', segment=1, max_split=1) plugin = self.pclass(**param) match_list = [('test.thing', 'test-foobar-baz')] value = plugin.trait_value(match_list) self.assertEqual('foobar-baz', value) def test_no_sep(self): param = dict(separator='-', segment=0) plugin = self.pclass(**param) match_list = [('test.thing', 'test.foobar.baz')] value = plugin.trait_value(match_list) self.assertEqual('test.foobar.baz', value) def test_no_segment(self): param = dict(separator='-', segment=5) plugin = self.pclass(**param) match_list = [('test.thing', 'test-foobar-baz')] value = plugin.trait_value(match_list) self.assertIs(None, value) def test_no_match(self): param = dict(separator='-', segment=0) plugin = self.pclass(**param) match_list = [] value = plugin.trait_value(match_list) self.assertIs(None, value) class TestBitfieldPlugin(test.BaseTestCase): def setUp(self): super(TestBitfieldPlugin, self).setUp() self.pclass = trait_plugins.BitfieldTraitPlugin self.init = 0 self.params = dict(initial_bitfield=self.init, flags=[dict(path='payload.foo', bit=0, value=42), dict(path='payload.foo', bit=1, value=12), dict(path='payload.thud', bit=1, value=23), dict(path='thingy.boink', bit=4), dict(path='thingy.quux', bit=6, value="wokka"), dict(path='payload.bar', bit=10, value='test')]) def test_bitfield(self): match_list = [('payload.foo', 12), ('payload.bar', 'test'), ('thingy.boink', 'testagain')] plugin = self.pclass(**self.params) value = plugin.trait_value(match_list) self.assertEqual(0x412, value) def test_initial(self): match_list = [('payload.foo', 12), ('payload.bar', 'test'), ('thingy.boink', 'testagain')] self.params['initial_bitfield'] = 0x2000 plugin = self.pclass(**self.params) value = plugin.trait_value(match_list) self.assertEqual(0x2412, value) def test_no_match(self): match_list = [] plugin = self.pclass(**self.params) value = plugin.trait_value(match_list) self.assertEqual(self.init, value) def test_multi(self): match_list = [('payload.foo', 12), ('payload.thud', 23), ('payload.bar', 'test'), ('thingy.boink', 'testagain')] plugin = self.pclass(**self.params) value = plugin.trait_value(match_list) self.assertEqual(0x412, value) ceilometer-2014.1/ceilometer/tests/event/test_converter.py0000664000175300017540000007371712323717130025137 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Rackspace Hosting. # # Author: Monsyne Dragon # # 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 datetime import jsonpath_rw import mock from oslo.config import cfg as oslo_cfg import six from ceilometer.event import converter from ceilometer.storage import models from ceilometer.tests import base class ConverterBase(base.BaseTestCase): def _create_test_notification(self, event_type, message_id, **kw): return dict(event_type=event_type, message_id=message_id, priority="INFO", publisher_id="compute.host-1-2-3", timestamp="2013-08-08 21:06:37.803826", payload=kw, ) def assertIsValidEvent(self, event, notification): self.assertIsNot( None, event, "Notification dropped unexpectedly:" " %s" % str(notification)) self.assertIsInstance(event, models.Event) def assertIsNotValidEvent(self, event, notification): self.assertIs( None, event, "Notification NOT dropped when expected to be dropped:" " %s" % str(notification)) def assertHasTrait(self, event, name, value=None, dtype=None): traits = [trait for trait in event.traits if trait.name == name] self.assertTrue( len(traits) > 0, "Trait %s not found in event %s" % (name, event)) trait = traits[0] if value is not None: self.assertEqual(value, trait.value) if dtype is not None: self.assertEqual(dtype, trait.dtype) if dtype == models.Trait.INT_TYPE: self.assertIsInstance(trait.value, int) elif dtype == models.Trait.FLOAT_TYPE: self.assertIsInstance(trait.value, float) elif dtype == models.Trait.DATETIME_TYPE: self.assertIsInstance(trait.value, datetime.datetime) elif dtype == models.Trait.TEXT_TYPE: self.assertIsInstance(trait.value, six.string_types) def assertDoesNotHaveTrait(self, event, name): traits = [trait for trait in event.traits if trait.name == name] self.assertEqual( len(traits), 0, "Extra Trait %s found in event %s" % (name, event)) def assertHasDefaultTraits(self, event): text = models.Trait.TEXT_TYPE self.assertHasTrait(event, 'service', dtype=text) def _cmp_tree(self, this, other): if hasattr(this, 'right') and hasattr(other, 'right'): return (self._cmp_tree(this.right, other.right) and self._cmp_tree(this.left, other.left)) if not hasattr(this, 'right') and not hasattr(other, 'right'): return this == other return False def assertPathsEqual(self, path1, path2): self.assertTrue(self._cmp_tree(path1, path2), 'JSONPaths not equivalent %s %s' % (path1, path2)) class TestTraitDefinition(ConverterBase): def setUp(self): super(TestTraitDefinition, self).setUp() self.n1 = self._create_test_notification( "test.thing", "uuid-for-notif-0001", instance_uuid="uuid-for-instance-0001", instance_id="id-for-instance-0001", instance_uuid2=None, instance_id2=None, host='host-1-2-3', bogus_date='', image_meta=dict( disk_gb='20', thing='whatzit'), foobar=50) self.ext1 = mock.MagicMock(name='mock_test_plugin') self.test_plugin_class = self.ext1.plugin self.test_plugin = self.test_plugin_class() self.test_plugin.trait_value.return_value = 'foobar' self.ext1.reset_mock() self.ext2 = mock.MagicMock(name='mock_nothing_plugin') self.nothing_plugin_class = self.ext2.plugin self.nothing_plugin = self.nothing_plugin_class() self.nothing_plugin.trait_value.return_value = None self.ext2.reset_mock() self.fake_plugin_mgr = dict(test=self.ext1, nothing=self.ext2) def test_to_trait_with_plugin(self): cfg = dict(type='text', fields=['payload.instance_id', 'payload.instance_uuid'], plugin=dict(name='test')) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('test_trait', t.name) self.assertEqual(models.Trait.TEXT_TYPE, t.dtype) self.assertEqual('foobar', t.value) self.test_plugin_class.assert_called_once_with() self.test_plugin.trait_value.assert_called_once_with([ ('payload.instance_id', 'id-for-instance-0001'), ('payload.instance_uuid', 'uuid-for-instance-0001')]) def test_to_trait_null_match_with_plugin(self): cfg = dict(type='text', fields=['payload.nothere', 'payload.bogus'], plugin=dict(name='test')) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('test_trait', t.name) self.assertEqual(models.Trait.TEXT_TYPE, t.dtype) self.assertEqual('foobar', t.value) self.test_plugin_class.assert_called_once_with() self.test_plugin.trait_value.assert_called_once_with([]) def test_to_trait_with_plugin_null(self): cfg = dict(type='text', fields=['payload.instance_id', 'payload.instance_uuid'], plugin=dict(name='nothing')) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIs(None, t) self.nothing_plugin_class.assert_called_once_with() self.nothing_plugin.trait_value.assert_called_once_with([ ('payload.instance_id', 'id-for-instance-0001'), ('payload.instance_uuid', 'uuid-for-instance-0001')]) def test_to_trait_with_plugin_with_parameters(self): cfg = dict(type='text', fields=['payload.instance_id', 'payload.instance_uuid'], plugin=dict(name='test', parameters=dict(a=1, b='foo'))) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('test_trait', t.name) self.assertEqual(models.Trait.TEXT_TYPE, t.dtype) self.assertEqual('foobar', t.value) self.test_plugin_class.assert_called_once_with(a=1, b='foo') self.test_plugin.trait_value.assert_called_once_with([ ('payload.instance_id', 'id-for-instance-0001'), ('payload.instance_uuid', 'uuid-for-instance-0001')]) def test_to_trait(self): cfg = dict(type='text', fields='payload.instance_id') tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('test_trait', t.name) self.assertEqual(models.Trait.TEXT_TYPE, t.dtype) self.assertEqual('id-for-instance-0001', t.value) cfg = dict(type='int', fields='payload.image_meta.disk_gb') tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('test_trait', t.name) self.assertEqual(models.Trait.INT_TYPE, t.dtype) self.assertEqual(20, t.value) def test_to_trait_multiple(self): cfg = dict(type='text', fields=['payload.instance_id', 'payload.instance_uuid']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('id-for-instance-0001', t.value) cfg = dict(type='text', fields=['payload.instance_uuid', 'payload.instance_id']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('uuid-for-instance-0001', t.value) def test_to_trait_multiple_different_nesting(self): cfg = dict(type='int', fields=['payload.foobar', 'payload.image_meta.disk_gb']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual(50, t.value) cfg = dict(type='int', fields=['payload.image_meta.disk_gb', 'payload.foobar']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual(20, t.value) def test_to_trait_some_null_multiple(self): cfg = dict(type='text', fields=['payload.instance_id2', 'payload.instance_uuid']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('uuid-for-instance-0001', t.value) def test_to_trait_some_missing_multiple(self): cfg = dict(type='text', fields=['payload.not_here_boss', 'payload.instance_uuid']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIsInstance(t, models.Trait) self.assertEqual('uuid-for-instance-0001', t.value) def test_to_trait_missing(self): cfg = dict(type='text', fields='payload.not_here_boss') tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIs(None, t) def test_to_trait_null(self): cfg = dict(type='text', fields='payload.instance_id2') tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIs(None, t) def test_to_trait_empty_nontext(self): cfg = dict(type='datetime', fields='payload.bogus_date') tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIs(None, t) def test_to_trait_multiple_null_missing(self): cfg = dict(type='text', fields=['payload.not_here_boss', 'payload.instance_id2']) tdef = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) t = tdef.to_trait(self.n1) self.assertIs(None, t) def test_missing_fields_config(self): self.assertRaises(converter.EventDefinitionException, converter.TraitDefinition, 'bogus_trait', dict(), self.fake_plugin_mgr) def test_string_fields_config(self): cfg = dict(fields='payload.test') t = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) self.assertPathsEqual(t.fields, jsonpath_rw.parse('payload.test')) def test_list_fields_config(self): cfg = dict(fields=['payload.test', 'payload.other']) t = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) self.assertPathsEqual( t.fields, jsonpath_rw.parse('(payload.test)|(payload.other)')) def test_invalid_path_config(self): #test invalid jsonpath... cfg = dict(fields='payload.bogus(') self.assertRaises(converter.EventDefinitionException, converter.TraitDefinition, 'bogus_trait', cfg, self.fake_plugin_mgr) def test_invalid_plugin_config(self): #test invalid jsonpath... cfg = dict(fields='payload.test', plugin=dict(bogus="true")) self.assertRaises(converter.EventDefinitionException, converter.TraitDefinition, 'test_trait', cfg, self.fake_plugin_mgr) def test_unknown_plugin(self): #test invalid jsonpath... cfg = dict(fields='payload.test', plugin=dict(name='bogus')) self.assertRaises(converter.EventDefinitionException, converter.TraitDefinition, 'test_trait', cfg, self.fake_plugin_mgr) def test_type_config(self): cfg = dict(type='text', fields='payload.test') t = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) self.assertEqual(models.Trait.TEXT_TYPE, t.trait_type) cfg = dict(type='int', fields='payload.test') t = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) self.assertEqual(models.Trait.INT_TYPE, t.trait_type) cfg = dict(type='float', fields='payload.test') t = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) self.assertEqual(models.Trait.FLOAT_TYPE, t.trait_type) cfg = dict(type='datetime', fields='payload.test') t = converter.TraitDefinition('test_trait', cfg, self.fake_plugin_mgr) self.assertEqual(models.Trait.DATETIME_TYPE, t.trait_type) def test_invalid_type_config(self): #test invalid jsonpath... cfg = dict(type='bogus', fields='payload.test') self.assertRaises(converter.EventDefinitionException, converter.TraitDefinition, 'bogus_trait', cfg, self.fake_plugin_mgr) class TestEventDefinition(ConverterBase): def setUp(self): super(TestEventDefinition, self).setUp() self.traits_cfg = { 'instance_id': { 'type': 'text', 'fields': ['payload.instance_uuid', 'payload.instance_id'], }, 'host': { 'type': 'text', 'fields': 'payload.host', }, } self.test_notification1 = self._create_test_notification( "test.thing", "uuid-for-notif-0001", instance_id="uuid-for-instance-0001", host='host-1-2-3') self.test_notification2 = self._create_test_notification( "test.thing", "uuid-for-notif-0002", instance_id="uuid-for-instance-0002") self.test_notification3 = self._create_test_notification( "test.thing", "uuid-for-notif-0003", instance_id="uuid-for-instance-0003", host=None) self.fake_plugin_mgr = {} def test_to_event(self): dtype = models.Trait.TEXT_TYPE cfg = dict(event_type='test.thing', traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) e = edef.to_event(self.test_notification1) self.assertEqual('test.thing', e.event_type) self.assertEqual(datetime.datetime(2013, 8, 8, 21, 6, 37, 803826), e.generated) self.assertHasDefaultTraits(e) self.assertHasTrait(e, 'host', value='host-1-2-3', dtype=dtype) self.assertHasTrait(e, 'instance_id', value='uuid-for-instance-0001', dtype=dtype) def test_to_event_missing_trait(self): dtype = models.Trait.TEXT_TYPE cfg = dict(event_type='test.thing', traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) e = edef.to_event(self.test_notification2) self.assertHasDefaultTraits(e) self.assertHasTrait(e, 'instance_id', value='uuid-for-instance-0002', dtype=dtype) self.assertDoesNotHaveTrait(e, 'host') def test_to_event_null_trait(self): dtype = models.Trait.TEXT_TYPE cfg = dict(event_type='test.thing', traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) e = edef.to_event(self.test_notification3) self.assertHasDefaultTraits(e) self.assertHasTrait(e, 'instance_id', value='uuid-for-instance-0003', dtype=dtype) self.assertDoesNotHaveTrait(e, 'host') def test_bogus_cfg_no_traits(self): bogus = dict(event_type='test.foo') self.assertRaises(converter.EventDefinitionException, converter.EventDefinition, bogus, self.fake_plugin_mgr) def test_bogus_cfg_no_type(self): bogus = dict(traits=self.traits_cfg) self.assertRaises(converter.EventDefinitionException, converter.EventDefinition, bogus, self.fake_plugin_mgr) def test_included_type_string(self): cfg = dict(event_type='test.thing', traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertEqual(1, len(edef._included_types)) self.assertEqual('test.thing', edef._included_types[0]) self.assertEqual(0, len(edef._excluded_types)) self.assertTrue(edef.included_type('test.thing')) self.assertFalse(edef.excluded_type('test.thing')) self.assertTrue(edef.match_type('test.thing')) self.assertFalse(edef.match_type('random.thing')) def test_included_type_list(self): cfg = dict(event_type=['test.thing', 'other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertEqual(2, len(edef._included_types)) self.assertEqual(0, len(edef._excluded_types)) self.assertTrue(edef.included_type('test.thing')) self.assertTrue(edef.included_type('other.thing')) self.assertFalse(edef.excluded_type('test.thing')) self.assertTrue(edef.match_type('test.thing')) self.assertTrue(edef.match_type('other.thing')) self.assertFalse(edef.match_type('random.thing')) def test_excluded_type_string(self): cfg = dict(event_type='!test.thing', traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertEqual(1, len(edef._included_types)) self.assertEqual('*', edef._included_types[0]) self.assertEqual('test.thing', edef._excluded_types[0]) self.assertEqual(1, len(edef._excluded_types)) self.assertEqual('test.thing', edef._excluded_types[0]) self.assertTrue(edef.excluded_type('test.thing')) self.assertTrue(edef.included_type('random.thing')) self.assertFalse(edef.match_type('test.thing')) self.assertTrue(edef.match_type('random.thing')) def test_excluded_type_list(self): cfg = dict(event_type=['!test.thing', '!other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertEqual(1, len(edef._included_types)) self.assertEqual(2, len(edef._excluded_types)) self.assertTrue(edef.excluded_type('test.thing')) self.assertTrue(edef.excluded_type('other.thing')) self.assertFalse(edef.excluded_type('random.thing')) self.assertFalse(edef.match_type('test.thing')) self.assertFalse(edef.match_type('other.thing')) self.assertTrue(edef.match_type('random.thing')) def test_mixed_type_list(self): cfg = dict(event_type=['*.thing', '!test.thing', '!other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertEqual(1, len(edef._included_types)) self.assertEqual(2, len(edef._excluded_types)) self.assertTrue(edef.excluded_type('test.thing')) self.assertTrue(edef.excluded_type('other.thing')) self.assertFalse(edef.excluded_type('random.thing')) self.assertFalse(edef.match_type('test.thing')) self.assertFalse(edef.match_type('other.thing')) self.assertFalse(edef.match_type('random.whatzit')) self.assertTrue(edef.match_type('random.thing')) def test_catchall(self): cfg = dict(event_type=['*.thing', '!test.thing', '!other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertFalse(edef.is_catchall) cfg = dict(event_type=['!other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertFalse(edef.is_catchall) cfg = dict(event_type=['other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertFalse(edef.is_catchall) cfg = dict(event_type=['*', '!other.thing'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertFalse(edef.is_catchall) cfg = dict(event_type=['*'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertTrue(edef.is_catchall) cfg = dict(event_type=['*', 'foo'], traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) self.assertTrue(edef.is_catchall) @mock.patch('ceilometer.openstack.common.timeutils.utcnow') def test_extract_when(self, mock_utcnow): now = datetime.datetime.utcnow() modified = now + datetime.timedelta(minutes=1) mock_utcnow.return_value = now body = {"timestamp": str(modified)} when = converter.EventDefinition._extract_when(body) self.assertTimestampEqual(modified, when) body = {"_context_timestamp": str(modified)} when = converter.EventDefinition._extract_when(body) self.assertTimestampEqual(modified, when) then = now + datetime.timedelta(hours=1) body = {"timestamp": str(modified), "_context_timestamp": str(then)} when = converter.EventDefinition._extract_when(body) self.assertTimestampEqual(modified, when) when = converter.EventDefinition._extract_when({}) self.assertTimestampEqual(now, when) def test_default_traits(self): cfg = dict(event_type='test.thing', traits={}) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) default_traits = converter.EventDefinition.DEFAULT_TRAITS.keys() traits = set(edef.traits.keys()) for dt in default_traits: self.assertIn(dt, traits) self.assertEqual(len(converter.EventDefinition.DEFAULT_TRAITS), len(edef.traits)) def test_traits(self): cfg = dict(event_type='test.thing', traits=self.traits_cfg) edef = converter.EventDefinition(cfg, self.fake_plugin_mgr) default_traits = converter.EventDefinition.DEFAULT_TRAITS.keys() traits = set(edef.traits.keys()) for dt in default_traits: self.assertIn(dt, traits) self.assertIn('host', traits) self.assertIn('instance_id', traits) self.assertEqual(len(converter.EventDefinition.DEFAULT_TRAITS) + 2, len(edef.traits)) class TestNotificationConverter(ConverterBase): def setUp(self): super(TestNotificationConverter, self).setUp() self.valid_event_def1 = [{ 'event_type': 'compute.instance.create.*', 'traits': { 'instance_id': { 'type': 'text', 'fields': ['payload.instance_uuid', 'payload.instance_id'], }, 'host': { 'type': 'text', 'fields': 'payload.host', }, }, }] self.test_notification1 = self._create_test_notification( "compute.instance.create.start", "uuid-for-notif-0001", instance_id="uuid-for-instance-0001", host='host-1-2-3') self.test_notification2 = self._create_test_notification( "bogus.notification.from.mars", "uuid-for-notif-0002", weird='true', host='cydonia') self.fake_plugin_mgr = {} @mock.patch('ceilometer.openstack.common.timeutils.utcnow') def test_converter_missing_keys(self, mock_utcnow): # test a malformed notification now = datetime.datetime.utcnow() mock_utcnow.return_value = now c = converter.NotificationEventsConverter( [], self.fake_plugin_mgr, add_catchall=True) message = {'event_type': "foo", 'message_id': "abc", 'publisher_id': "1"} e = c.to_event(message) self.assertIsValidEvent(e, message) self.assertEqual(1, len(e.traits)) self.assertEqual("foo", e.event_type) self.assertEqual(now, e.generated) def test_converter_with_catchall(self): c = converter.NotificationEventsConverter( self.valid_event_def1, self.fake_plugin_mgr, add_catchall=True) self.assertEqual(2, len(c.definitions)) e = c.to_event(self.test_notification1) self.assertIsValidEvent(e, self.test_notification1) self.assertEqual(3, len(e.traits)) self.assertHasDefaultTraits(e) self.assertHasTrait(e, 'instance_id') self.assertHasTrait(e, 'host') e = c.to_event(self.test_notification2) self.assertIsValidEvent(e, self.test_notification2) self.assertEqual(1, len(e.traits)) self.assertHasDefaultTraits(e) self.assertDoesNotHaveTrait(e, 'instance_id') self.assertDoesNotHaveTrait(e, 'host') def test_converter_without_catchall(self): c = converter.NotificationEventsConverter( self.valid_event_def1, self.fake_plugin_mgr, add_catchall=False) self.assertEqual(1, len(c.definitions)) e = c.to_event(self.test_notification1) self.assertIsValidEvent(e, self.test_notification1) self.assertEqual(3, len(e.traits)) self.assertHasDefaultTraits(e) self.assertHasTrait(e, 'instance_id') self.assertHasTrait(e, 'host') e = c.to_event(self.test_notification2) self.assertIsNotValidEvent(e, self.test_notification2) def test_converter_empty_cfg_with_catchall(self): c = converter.NotificationEventsConverter( [], self.fake_plugin_mgr, add_catchall=True) self.assertEqual(1, len(c.definitions)) e = c.to_event(self.test_notification1) self.assertIsValidEvent(e, self.test_notification1) self.assertEqual(1, len(e.traits)) self.assertHasDefaultTraits(e) e = c.to_event(self.test_notification2) self.assertIsValidEvent(e, self.test_notification2) self.assertEqual(1, len(e.traits)) self.assertHasDefaultTraits(e) def test_converter_empty_cfg_without_catchall(self): c = converter.NotificationEventsConverter( [], self.fake_plugin_mgr, add_catchall=False) self.assertEqual(0, len(c.definitions)) e = c.to_event(self.test_notification1) self.assertIsNotValidEvent(e, self.test_notification1) e = c.to_event(self.test_notification2) self.assertIsNotValidEvent(e, self.test_notification2) def test_setup_events_default_config(self): def mock_exists(path): return False def mock_get_config_file(): return None with mock.patch('ceilometer.event.converter.get_config_file', mock_get_config_file): oslo_cfg.CONF.set_override('drop_unmatched_notifications', False, group='event') with mock.patch('os.path.exists', mock_exists): c = converter.setup_events(self.fake_plugin_mgr) self.assertIsInstance(c, converter.NotificationEventsConverter) self.assertEqual(1, len(c.definitions)) self.assertTrue(c.definitions[0].is_catchall) oslo_cfg.CONF.set_override('drop_unmatched_notifications', True, group='event') with mock.patch('os.path.exists', mock_exists): c = converter.setup_events(self.fake_plugin_mgr) self.assertIsInstance(c, converter.NotificationEventsConverter) self.assertEqual(0, len(c.definitions)) ceilometer-2014.1/ceilometer/tests/base.py0000664000175300017540000000504412323717132021650 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network (DreamHost) # # Author: Doug Hellmann # # 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. """Test base classes. """ import functools import os.path import six from testtools import testcase from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils class BaseTestCase(test.BaseTestCase): def assertTimestampEqual(self, first, second, msg=None): """Checks that two timestamps are equals. This relies on assertAlmostEqual to avoid rounding problem, and only checks up the first microsecond values. """ return self.assertAlmostEqual( timeutils.delta_seconds(first, second), 0.0, places=5) @staticmethod def path_get(project_file=None): root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', ) ) if project_file: return os.path.join(root, project_file) else: return root def _skip_decorator(func): @functools.wraps(func) def skip_if_not_implemented(*args, **kwargs): try: return func(*args, **kwargs) except AssertionError: raise except NotImplementedError as e: raise testcase.TestSkipped(six.text_type(e)) except Exception as e: if 'not implemented' in six.text_type(e): raise testcase.TestSkipped(six.text_type(e)) raise return skip_if_not_implemented class SkipNotImplementedMeta(type): def __new__(cls, name, bases, local): for attr in local: value = local[attr] if callable(value) and ( attr.startswith('test_') or attr == 'setUp'): local[attr] = _skip_decorator(value) return type.__new__(cls, name, bases, local) ceilometer-2014.1/ceilometer/tests/agentbase.py0000664000175300017540000004572512323717130022677 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # Copyright © 2013 Intel corp. # Copyright © 2013 eNovance # Copyright © 2014 Red Hat, Inc # # Authors: Yunhong Jiang # Julien Danjou # Eoghan Glynn # # 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 abc import copy import datetime import mock import six from stevedore import extension from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common.fixture import mockpatch from ceilometer import pipeline from ceilometer import plugin from ceilometer import publisher from ceilometer.publisher import test as test_publisher from ceilometer import sample from ceilometer.tests import base from ceilometer import transformer class TestSample(sample.Sample): def __init__(self, name, type, unit, volume, user_id, project_id, resource_id, timestamp, resource_metadata, source=None): super(TestSample, self).__init__(name, type, unit, volume, user_id, project_id, resource_id, timestamp, resource_metadata, source) def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ return False def __ne__(self, other): return not self.__eq__(other) default_test_data = TestSample( name='test', type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='test', project_id='test', resource_id='test_run_tasks', timestamp=datetime.datetime.utcnow().isoformat(), resource_metadata={'name': 'Pollster'}, ) class TestPollster(plugin.PollsterBase): test_data = default_test_data def get_samples(self, manager, cache, resources=[]): self.samples.append((manager, resources)) self.resources.extend(resources) c = copy.copy(self.test_data) c.resource_metadata['resources'] = resources return [c] class TestPollsterException(TestPollster): def get_samples(self, manager, cache, resources=[]): self.samples.append((manager, resources)) self.resources.extend(resources) raise Exception() class TestDiscovery(plugin.DiscoveryBase): def discover(self, param=None): self.params.append(param) return self.resources class TestDiscoveryException(plugin.DiscoveryBase): def discover(self, param=None): self.params.append(param) raise Exception() @six.add_metaclass(abc.ABCMeta) class BaseAgentManagerTestCase(base.BaseTestCase): class Pollster(TestPollster): samples = [] resources = [] test_data = default_test_data class PollsterAnother(TestPollster): samples = [] resources = [] test_data = TestSample( name='testanother', type=default_test_data.type, unit=default_test_data.unit, volume=default_test_data.volume, user_id=default_test_data.user_id, project_id=default_test_data.project_id, resource_id=default_test_data.resource_id, timestamp=default_test_data.timestamp, resource_metadata=default_test_data.resource_metadata) class PollsterException(TestPollsterException): samples = [] resources = [] test_data = TestSample( name='testexception', type=default_test_data.type, unit=default_test_data.unit, volume=default_test_data.volume, user_id=default_test_data.user_id, project_id=default_test_data.project_id, resource_id=default_test_data.resource_id, timestamp=default_test_data.timestamp, resource_metadata=default_test_data.resource_metadata) class PollsterExceptionAnother(TestPollsterException): samples = [] resources = [] test_data = TestSample( name='testexceptionanother', type=default_test_data.type, unit=default_test_data.unit, volume=default_test_data.volume, user_id=default_test_data.user_id, project_id=default_test_data.project_id, resource_id=default_test_data.resource_id, timestamp=default_test_data.timestamp, resource_metadata=default_test_data.resource_metadata) class Discovery(TestDiscovery): params = [] resources = [] class DiscoveryAnother(TestDiscovery): params = [] resources = [] class DiscoveryException(TestDiscoveryException): params = [] def setup_pipeline(self): self.transformer_manager = transformer.TransformerExtensionManager( 'ceilometer.transformer', ) self.mgr.pipeline_manager = pipeline.PipelineManager( self.pipeline_cfg, self.transformer_manager) def create_pollster_manager(self): return extension.ExtensionManager.make_test_instance( [ extension.Extension( 'test', None, None, self.Pollster(), ), extension.Extension( 'testanother', None, None, self.PollsterAnother(), ), extension.Extension( 'testexception', None, None, self.PollsterException(), ), extension.Extension( 'testexceptionanother', None, None, self.PollsterExceptionAnother(), ), ], ) def create_discovery_manager(self): return extension.ExtensionManager.make_test_instance( [ extension.Extension( 'testdiscovery', None, None, self.Discovery(), ), extension.Extension( 'testdiscoveryanother', None, None, self.DiscoveryAnother(), ), extension.Extension( 'testdiscoveryexception', None, None, self.DiscoveryException(), ), ], ) @abc.abstractmethod def create_manager(self): """Return subclass specific manager.""" @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(BaseAgentManagerTestCase, self).setUp() self.mgr = self.create_manager() self.mgr.pollster_manager = self.create_pollster_manager() self.pipeline_cfg = [{ 'name': "test_pipeline", 'interval': 60, 'counters': ['test'], 'resources': ['test://'] if self.source_resources else [], 'transformers': [], 'publishers': ["test"], }, ] self.setup_pipeline() self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override( 'pipeline_cfg_file', self.path_get('etc/ceilometer/pipeline.yaml') ) self.useFixture(mockpatch.PatchObject( publisher, 'get_publisher', side_effect=self.get_publisher)) def get_publisher(self, url, namespace=''): fake_drivers = {'test://': test_publisher.TestPublisher, 'new://': test_publisher.TestPublisher, 'rpc://': test_publisher.TestPublisher} return fake_drivers[url](url) def tearDown(self): self.Pollster.samples = [] self.PollsterAnother.samples = [] self.PollsterException.samples = [] self.PollsterExceptionAnother.samples = [] self.Pollster.resources = [] self.PollsterAnother.resources = [] self.PollsterException.resources = [] self.PollsterExceptionAnother.resources = [] self.Discovery.params = [] self.DiscoveryAnother.params = [] self.DiscoveryException.params = [] self.Discovery.resources = [] self.DiscoveryAnother.resources = [] super(BaseAgentManagerTestCase, self).tearDown() def test_setup_polling_tasks(self): polling_tasks = self.mgr.setup_polling_tasks() self.assertEqual(1, len(polling_tasks)) self.assertTrue(60 in polling_tasks.keys()) per_task_resources = polling_tasks[60].resources self.assertEqual(1, len(per_task_resources)) self.assertEqual(set(self.pipeline_cfg[0]['resources']), set(per_task_resources['test'].resources)) self.mgr.interval_task(polling_tasks.values()[0]) pub = self.mgr.pipeline_manager.pipelines[0].publishers[0] del pub.samples[0].resource_metadata['resources'] self.assertEqual(self.Pollster.test_data, pub.samples[0]) def test_setup_polling_tasks_multiple_interval(self): self.pipeline_cfg.append({ 'name': "test_pipeline", 'interval': 10, 'counters': ['test'], 'resources': ['test://'] if self.source_resources else [], 'transformers': [], 'publishers': ["test"], }) self.setup_pipeline() polling_tasks = self.mgr.setup_polling_tasks() self.assertEqual(2, len(polling_tasks)) self.assertTrue(60 in polling_tasks.keys()) self.assertTrue(10 in polling_tasks.keys()) def test_setup_polling_tasks_mismatch_counter(self): self.pipeline_cfg.append( { 'name': "test_pipeline_1", 'interval': 10, 'counters': ['test_invalid'], 'resources': ['invalid://'], 'transformers': [], 'publishers': ["test"], }) polling_tasks = self.mgr.setup_polling_tasks() self.assertEqual(1, len(polling_tasks)) self.assertTrue(60 in polling_tasks.keys()) def test_setup_polling_task_same_interval(self): self.pipeline_cfg.append({ 'name': "test_pipeline", 'interval': 60, 'counters': ['testanother'], 'resources': ['testanother://'] if self.source_resources else [], 'transformers': [], 'publishers': ["test"], }) self.setup_pipeline() polling_tasks = self.mgr.setup_polling_tasks() self.assertEqual(1, len(polling_tasks)) pollsters = polling_tasks.get(60).pollsters self.assertEqual(2, len(pollsters)) per_task_resources = polling_tasks[60].resources self.assertEqual(2, len(per_task_resources)) self.assertEqual(set(self.pipeline_cfg[0]['resources']), set(per_task_resources['test'].resources)) self.assertEqual(set(self.pipeline_cfg[1]['resources']), set(per_task_resources['testanother'].resources)) def test_interval_exception_isolation(self): self.pipeline_cfg = [ { 'name': "test_pipeline_1", 'interval': 10, 'counters': ['testexceptionanother'], 'resources': ['test://'] if self.source_resources else [], 'transformers': [], 'publishers': ["test"], }, { 'name': "test_pipeline_2", 'interval': 10, 'counters': ['testexception'], 'resources': ['test://'] if self.source_resources else [], 'transformers': [], 'publishers': ["test"], }, ] self.mgr.pipeline_manager = pipeline.PipelineManager( self.pipeline_cfg, self.transformer_manager) polling_tasks = self.mgr.setup_polling_tasks() self.assertEqual(1, len(polling_tasks.keys())) polling_tasks.get(10) self.mgr.interval_task(polling_tasks.get(10)) pub = self.mgr.pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(pub.samples)) def test_agent_manager_start(self): mgr = self.create_manager() mgr.pollster_manager = self.mgr.pollster_manager mgr.create_polling_task = mock.MagicMock() mgr.tg = mock.MagicMock() mgr.start() self.assertTrue(mgr.tg.add_timer.called) def test_manager_exception_persistency(self): self.pipeline_cfg.append({ 'name': "test_pipeline", 'interval': 60, 'counters': ['testanother'], 'transformers': [], 'publishers': ["test"], }) self.setup_pipeline() def _verify_discovery_params(self, expected): self.assertEqual(expected, self.Discovery.params) self.assertEqual(expected, self.DiscoveryAnother.params) self.assertEqual(expected, self.DiscoveryException.params) def _do_test_per_agent_discovery(self, discovered_resources, static_resources): self.mgr.discovery_manager = self.create_discovery_manager() if discovered_resources: self.mgr.default_discovery = [d.name for d in self.mgr.discovery_manager] self.Discovery.resources = discovered_resources self.DiscoveryAnother.resources = [d[::-1] for d in discovered_resources] self.pipeline_cfg[0]['resources'] = static_resources self.setup_pipeline() polling_tasks = self.mgr.setup_polling_tasks() self.mgr.interval_task(polling_tasks.get(60)) self._verify_discovery_params([None] if discovered_resources else []) discovery = self.Discovery.resources + self.DiscoveryAnother.resources # compare resource lists modulo ordering self.assertEqual(set(static_resources or discovery), set(self.Pollster.resources)) def test_per_agent_discovery_discovered_only(self): self._do_test_per_agent_discovery(['discovered_1', 'discovered_2'], []) def test_per_agent_discovery_static_only(self): self._do_test_per_agent_discovery([], ['static_1', 'static_2']) def test_per_agent_discovery_discovered_overridden_by_static(self): self._do_test_per_agent_discovery(['discovered_1', 'discovered_2'], ['static_1', 'static_2']) def test_per_agent_discovery_overridden_by_per_pipeline_discovery(self): discovered_resources = ['discovered_1', 'discovered_2'] self.mgr.discovery_manager = self.create_discovery_manager() self.Discovery.resources = discovered_resources self.DiscoveryAnother.resources = [d[::-1] for d in discovered_resources] self.pipeline_cfg[0]['discovery'] = ['testdiscoveryanother', 'testdiscoverynonexistent', 'testdiscoveryexception'] self.pipeline_cfg[0]['resources'] = [] self.setup_pipeline() polling_tasks = self.mgr.setup_polling_tasks() self.mgr.interval_task(polling_tasks.get(60)) self.assertEqual(set(self.DiscoveryAnother.resources), set(self.Pollster.resources)) def _do_test_per_pipeline_discovery(self, discovered_resources, static_resources): self.mgr.discovery_manager = self.create_discovery_manager() self.Discovery.resources = discovered_resources self.DiscoveryAnother.resources = [d[::-1] for d in discovered_resources] self.pipeline_cfg[0]['discovery'] = ['testdiscovery', 'testdiscoveryanother', 'testdiscoverynonexistent', 'testdiscoveryexception'] self.pipeline_cfg[0]['resources'] = static_resources self.setup_pipeline() polling_tasks = self.mgr.setup_polling_tasks() self.mgr.interval_task(polling_tasks.get(60)) discovery = self.Discovery.resources + self.DiscoveryAnother.resources # compare resource lists modulo ordering self.assertEqual(set(static_resources + discovery), set(self.Pollster.resources)) def test_per_pipeline_discovery_discovered_only(self): self._do_test_per_pipeline_discovery(['discovered_1', 'discovered_2'], []) def test_per_pipeline_discovery_static_only(self): self._do_test_per_pipeline_discovery([], ['static_1', 'static_2']) def test_per_pipeline_discovery_discovered_augmented_by_static(self): self._do_test_per_pipeline_discovery(['discovered_1', 'discovered_2'], ['static_1', 'static_2']) def test_multiple_pipelines_different_static_resources(self): # assert that the amalgation of all static resources for a set # of pipelines with a common interval is passed to individual # pollsters matching those pipelines self.pipeline_cfg[0]['resources'] = ['test://'] self.pipeline_cfg.append({ 'name': "another_pipeline", 'interval': 60, 'counters': ['test'], 'resources': ['another://'], 'transformers': [], 'publishers': ["new"], }) self.mgr.discovery_manager = self.create_discovery_manager() self.Discovery.resources = [] self.setup_pipeline() polling_tasks = self.mgr.setup_polling_tasks() self.assertEqual(1, len(polling_tasks)) self.assertTrue(60 in polling_tasks.keys()) self.mgr.interval_task(polling_tasks.get(60)) self._verify_discovery_params([]) self.assertEqual(1, len(self.Pollster.samples)) amalgamated_resources = set(['test://', 'another://']) self.assertEqual(amalgamated_resources, set(self.Pollster.samples[0][1])) for pipeline in self.mgr.pipeline_manager.pipelines: self.assertEqual(1, len(pipeline.publishers[0].samples)) published = pipeline.publishers[0].samples[0] self.assertEqual(amalgamated_resources, set(published.resource_metadata['resources'])) ceilometer-2014.1/ceilometer/tests/test_notification.py0000664000175300017540000001545212323717132024467 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Tests for Ceilometer notify daemon.""" import mock from stevedore import extension from ceilometer.compute.notifications import instance from ceilometer import notification from ceilometer.openstack.common.fixture import config from ceilometer.storage import models from ceilometer.tests import base as tests_base TEST_NOTICE = { u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2', u'_context_is_admin': True, u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e', u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': u'10.0.2.15', u'_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T20:23:41.425105', u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'event_type': u'compute.instance.create.end', u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451', u'payload': {u'created_at': u'2012-05-08 20:23:41', u'deleted_at': u'', u'disk_gb': 0, u'display_name': u'testme', u'fixed_ips': [{u'address': u'10.0.0.2', u'floating_ips': [], u'meta': {}, u'type': u'fixed', u'version': 4}], u'image_ref_url': u'http://10.0.2.15:9292/images/UUID', u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1', u'instance_type': u'm1.tiny', u'instance_type_id': 2, u'launched_at': u'2012-05-08 20:23:47.985999', u'memory_mb': 512, u'state': u'active', u'state_description': u'', u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e', u'user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3', u'vcpus': 1, u'root_gb': 0, u'ephemeral_gb': 0, u'host': u'compute-host-name', u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4', u'os_type': u'linux?', u'architecture': u'x86', u'image_ref': u'UUID', u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5', u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6', }, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:23:48.028195', } class TestNotification(tests_base.BaseTestCase): def setUp(self): super(TestNotification, self).setUp() self.srv = notification.NotificationService('the-host', 'the-topic') self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override("connection", "log://", group='database') def _make_test_manager(self, plugin): return extension.ExtensionManager.make_test_instance( [ extension.Extension('test', None, None, plugin), ] ) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) @mock.patch('ceilometer.event.converter.setup_events', mock.MagicMock()) def test_process_notification(self): # If we try to create a real RPC connection, init_host() never # returns. Mock it out so we can establish the service # configuration. self.CONF.set_override("store_events", False, group="notification") with mock.patch('ceilometer.openstack.common.rpc.create_connection'): self.srv.start() self.srv.pipeline_manager.pipelines[0] = mock.MagicMock() self.srv.notification_manager = self._make_test_manager( instance.Instance() ) self.srv.process_notification(TEST_NOTICE) self.assertTrue( self.srv.pipeline_manager.publisher.called) def test_process_notification_no_events(self): self.CONF.set_override("store_events", False, group="notification") self.srv.notification_manager = mock.MagicMock() with mock.patch.object(self.srv, '_message_to_event') as fake_msg_to_event: self.srv.process_notification({}) self.assertFalse(fake_msg_to_event.called) def test_process_notification_with_events(self): self.CONF.set_override("store_events", True, group="notification") self.srv.notification_manager = mock.MagicMock() with mock.patch.object(self.srv, '_message_to_event') as fake_msg_to_event: self.srv.process_notification({}) self.assertTrue(fake_msg_to_event.called) def test_message_to_event_duplicate(self): self.CONF.set_override("store_events", True, group="notification") mock_dispatcher = mock.MagicMock() self.srv.event_converter = mock.MagicMock() self.srv.event_converter.to_event.return_value = mock.MagicMock( event_type='test.test') self.srv.dispatcher_manager = self._make_test_manager(mock_dispatcher) mock_dispatcher.record_events.return_value = [ (models.Event.DUPLICATE, object())] message = {'event_type': "foo", 'message_id': "abc"} self.srv._message_to_event(message) # Should return silently. def test_message_to_event_bad_event(self): self.CONF.set_override("store_events", True, group="notification") mock_dispatcher = mock.MagicMock() self.srv.event_converter = mock.MagicMock() self.srv.event_converter.to_event.return_value = mock.MagicMock( event_type='test.test') self.srv.dispatcher_manager = self._make_test_manager(mock_dispatcher) mock_dispatcher.record_events.return_value = [ (models.Event.UNKNOWN_PROBLEM, object())] message = {'event_type': "foo", 'message_id': "abc"} self.assertRaises(notification.UnableToSaveEventException, self.srv._message_to_event, message) ceilometer-2014.1/ceilometer/tests/test_plugin.py0000664000175300017540000001124612323717132023274 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. from ceilometer.openstack.common import test from ceilometer import plugin TEST_NOTIFICATION = { u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2', u'_context_is_admin': True, u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e', u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': u'10.0.2.15', u'_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T20:23:41.425105', u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'event_type': u'compute.instance.create.end', u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451', u'payload': {u'created_at': u'2012-05-08 20:23:41', u'deleted_at': u'', u'disk_gb': 0, u'display_name': u'testme', u'fixed_ips': [{u'address': u'10.0.0.2', u'floating_ips': [], u'meta': {}, u'type': u'fixed', u'version': 4}], u'image_ref_url': u'http://10.0.2.15:9292/images/UUID', u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1', u'instance_type': u'm1.tiny', u'instance_type_id': 2, u'launched_at': u'2012-05-08 20:23:47.985999', u'memory_mb': 512, u'state': u'active', u'state_description': u'', u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e', u'user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3', u'vcpus': 1, u'root_gb': 0, u'ephemeral_gb': 0, u'host': u'compute-host-name', u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4', u'os_type': u'linux?', u'architecture': u'x86', u'image_ref': u'UUID', u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5', u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6', }, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:23:48.028195', } class NotificationBaseTestCase(test.BaseTestCase): def test_handle_event_type(self): self.assertFalse(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['compute'])) self.assertFalse(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['compute.*.foobar'])) self.assertFalse(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['compute.*.*.foobar'])) self.assertTrue(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['compute.*'])) self.assertTrue(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['*'])) self.assertTrue(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['compute.*.start'])) self.assertTrue(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['*.start'])) self.assertTrue(plugin.NotificationBase._handle_event_type( 'compute.instance.start', ['compute.*.*.foobar', 'compute.*'])) class FakePlugin(plugin.NotificationBase): def get_exchange_topics(self, conf): return def process_notification(self, message): return message class FakeComputePlugin(FakePlugin): event_types = ['compute.*'] class FakeNetworkPlugin(FakePlugin): event_types = ['network.*'] def test_to_samples(self): c = self.FakeComputePlugin() n = self.FakeNetworkPlugin() self.assertTrue(len(list(c.to_samples(TEST_NOTIFICATION))) > 0) self.assertEqual(0, len(list(n.to_samples(TEST_NOTIFICATION)))) ceilometer-2014.1/ceilometer/tests/alarm/0000775000175300017540000000000012323717426021463 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/alarm/partition/0000775000175300017540000000000012323717426023474 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/alarm/partition/test_coordination.py0000664000175300017540000003556412323717132027604 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Red Hat, Inc # # Author: Eoghan Glynn # # 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. """Tests for ceilometer/alarm/partition/coordination.py """ import datetime import logging import six import uuid import mock from six import moves from ceilometer.alarm.partition import coordination from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils from ceilometer.storage import models class TestCoordinate(test.BaseTestCase): def setUp(self): super(TestCoordinate, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.test_interval = 120 self.CONF.set_override('evaluation_interval', self.test_interval, group='alarm') self.api_client = mock.Mock() self.override_start = datetime.datetime(2012, 7, 2, 10, 45) timeutils.utcnow.override_time = self.override_start self.partition_coordinator = coordination.PartitionCoordinator() self.partition_coordinator.coordination_rpc = mock.Mock() #add extra logger to check exception conditions and logged content self.output = six.moves.StringIO() self.str_handler = logging.StreamHandler(self.output) coordination.LOG.logger.addHandler(self.str_handler) def tearDown(self): super(TestCoordinate, self).tearDown() timeutils.utcnow.override_time = None # clean up the logger coordination.LOG.logger.removeHandler(self.str_handler) self.output.close() def _no_alarms(self): self.api_client.alarms.list.return_value = [] def _some_alarms(self, count): alarm_ids = [str(uuid.uuid4()) for _ in moves.xrange(count)] alarms = [self._make_alarm(aid) for aid in alarm_ids] self.api_client.alarms.list.return_value = alarms return alarm_ids def _current_alarms(self): return self.api_client.alarms.list.return_value def _dump_alarms(self, shave): alarms = self.api_client.alarms.list.return_value alarms = alarms[:shave] alarm_ids = [a.alarm_id for a in alarms] self.api_client.alarms.list.return_value = alarms return alarm_ids def _add_alarms(self, boost): new_alarm_ids = [str(uuid.uuid4()) for _ in moves.xrange(boost)] alarms = self.api_client.alarms.list.return_value for aid in new_alarm_ids: alarms.append(self._make_alarm(aid)) self.api_client.alarms.list.return_value = alarms return new_alarm_ids @staticmethod def _make_alarm(uuid): return models.Alarm(name='instance_running_hot', type='threshold', user_id='foobar', project_id='snafu', enabled=True, description='', repeat_actions=False, state='insufficient data', state_timestamp=None, timestamp=None, ok_actions=[], alarm_actions=[], insufficient_data_actions=[], alarm_id=uuid, time_constraints=[], rule=dict( statistic='avg', comparison_operator='gt', threshold=80.0, evaluation_periods=5, period=60, query=[], )) def _advance_time(self, factor): delta = datetime.timedelta(seconds=self.test_interval * factor) timeutils.utcnow.override_time += delta def _younger_by(self, offset): return self.partition_coordinator.this.priority + offset def _older_by(self, offset): return self.partition_coordinator.this.priority - offset def _check_mastership(self, expected): self.partition_coordinator.check_mastership(self.test_interval, self.api_client) self.assertEqual(expected, self.partition_coordinator.is_master) def _new_partition(self, offset): younger = self._younger_by(offset) pid = uuid.uuid4() self.partition_coordinator.presence(pid, younger) return (pid, younger) def _check_assignments(self, others, alarm_ids, per_worker, expect_uneffected=[]): rpc = self.partition_coordinator.coordination_rpc calls = rpc.assign.call_args_list return self._check_distribution(others, alarm_ids, per_worker, calls, expect_uneffected) def _check_allocation(self, others, alarm_ids, per_worker): rpc = self.partition_coordinator.coordination_rpc calls = rpc.allocate.call_args_list return self._check_distribution(others, alarm_ids, per_worker, calls) def _check_distribution(self, others, alarm_ids, per_worker, calls, expect_uneffected=[]): uneffected = [pid for pid, _ in others] uneffected.extend(expect_uneffected) remainder = list(alarm_ids) for call in calls: args, _ = call target, alarms = args self.assertTrue(target in uneffected) uneffected.remove(target) self.assertEqual(per_worker, len(alarms)) for aid in alarms: self.assertTrue(aid in remainder) remainder.remove(aid) self.assertEqual(set(expect_uneffected), set(uneffected)) return remainder def _forget_assignments(self, expected_assignments): rpc = self.partition_coordinator.coordination_rpc self.assertEqual(expected_assignments, len(rpc.assign.call_args_list)) rpc.reset_mock() def test_mastership_not_assumed_during_warmup(self): self._no_alarms() for _ in moves.xrange(7): # still warming up self._advance_time(0.25) self._check_mastership(False) # now warmed up self._advance_time(0.25) self._check_mastership(True) def test_uncontested_mastership_assumed(self): self._no_alarms() self._advance_time(3) self._check_mastership(True) def test_contested_mastership_assumed(self): self._no_alarms() self._advance_time(3) for offset in moves.xrange(1, 5): younger = self._younger_by(offset) self.partition_coordinator.presence(uuid.uuid4(), younger) self._check_mastership(True) def test_bested_mastership_relinquished(self): self._no_alarms() self._advance_time(3) self._check_mastership(True) older = self._older_by(1) self.partition_coordinator.presence(uuid.uuid4(), older) self._check_mastership(False) def _do_test_tie_broken_mastership(self, seed, expect_mastership): self._no_alarms() self.partition_coordinator.this.uuid = uuid.UUID(int=1) self._advance_time(3) self._check_mastership(True) tied = self.partition_coordinator.this.priority self.partition_coordinator.presence(uuid.UUID(int=seed), tied) self._check_mastership(expect_mastership) def test_tie_broken_mastership_assumed(self): self._do_test_tie_broken_mastership(2, True) def test_tie_broken_mastership_relinquished(self): self._do_test_tie_broken_mastership(0, False) def test_fair_distribution(self): alarm_ids = self._some_alarms(49) self._advance_time(3) others = [self._new_partition(i) for i in moves.xrange(1, 5)] self._check_mastership(True) remainder = self._check_assignments(others, alarm_ids, 10) self.assertEqual(set(self.partition_coordinator.assignment), set(remainder)) def test_rebalance_on_partition_startup(self): alarm_ids = self._some_alarms(49) self._advance_time(3) others = [self._new_partition(i) for i in moves.xrange(1, 5)] self._check_mastership(True) self. _forget_assignments(4) others.append(self._new_partition(5)) self._check_mastership(True) remainder = self._check_assignments(others, alarm_ids, 9) self.assertEqual(set(self.partition_coordinator.assignment), set(remainder)) def test_rebalance_on_partition_staleness(self): alarm_ids = self._some_alarms(49) self._advance_time(3) others = [self._new_partition(i) for i in moves.xrange(1, 5)] self._check_mastership(True) self. _forget_assignments(4) self._advance_time(4) stale, _ = others.pop() for pid, younger in others: self.partition_coordinator.presence(pid, younger) self._check_mastership(True) remainder = self._check_assignments(others, alarm_ids, 13, [stale]) self.assertEqual(set(self.partition_coordinator.assignment), set(remainder)) def test_rebalance_on_sufficient_deletion(self): alarm_ids = self._some_alarms(49) self._advance_time(3) others = [self._new_partition(i) for i in moves.xrange(1, 5)] self._check_mastership(True) self._forget_assignments(4) alarm_ids = self._dump_alarms(len(alarm_ids) / 2) self._check_mastership(True) remainder = self._check_assignments(others, alarm_ids, 5) self.assertEqual(set(self.partition_coordinator.assignment), set(remainder)) def test_no_rebalance_on_insufficient_deletion(self): alarm_ids = self._some_alarms(49) self._advance_time(3) others = [self._new_partition(i) for i in moves.xrange(1, 5)] self._check_mastership(True) self._forget_assignments(4) alarm_ids = self._dump_alarms(45) self._check_mastership(True) expect_uneffected = [pid for pid, _ in others] self._check_assignments(others, alarm_ids, 10, expect_uneffected) def test_no_rebalance_on_creation(self): self._some_alarms(49) self._advance_time(3) others = [self._new_partition(i) for i in moves.xrange(1, 5)] self._check_mastership(True) self._forget_assignments(4) new_alarm_ids = self._add_alarms(8) master_assignment = set(self.partition_coordinator.assignment) self._check_mastership(True) remainder = self._check_allocation(others, new_alarm_ids, 2) self.assertEqual(0, len(remainder)) self.assertEqual(set(self.partition_coordinator.assignment), master_assignment) def test_bail_when_overtaken_in_distribution(self): self._some_alarms(49) self._advance_time(3) for i in moves.xrange(1, 5): self._new_partition(i) def overtake(*args): self._new_partition(-1) rpc = self.partition_coordinator.coordination_rpc rpc.assign.side_effect = overtake self._check_mastership(False) self.assertEqual(1, len(rpc.assign.call_args_list)) def test_assigned_alarms_no_assignment(self): alarms = self.partition_coordinator.assigned_alarms(self.api_client) self.assertEqual(0, len(alarms)) def test_assigned_alarms_assignment(self): alarm_ids = self._some_alarms(6) uuid = self.partition_coordinator.this.uuid self.partition_coordinator.assign(uuid, alarm_ids) alarms = self.partition_coordinator.assigned_alarms(self.api_client) self.assertEqual(self._current_alarms(), alarms) def test_assigned_alarms_allocation(self): alarm_ids = self._some_alarms(6) uuid = self.partition_coordinator.this.uuid self.partition_coordinator.assign(uuid, alarm_ids) new_alarm_ids = self._add_alarms(2) self.partition_coordinator.allocate(uuid, new_alarm_ids) alarms = self.partition_coordinator.assigned_alarms(self.api_client) self.assertEqual(self._current_alarms(), alarms) def test_assigned_alarms_deleted_assignment(self): alarm_ids = self._some_alarms(6) uuid = self.partition_coordinator.this.uuid self.partition_coordinator.assign(uuid, alarm_ids) self._dump_alarms(len(alarm_ids) / 2) alarms = self.partition_coordinator.assigned_alarms(self.api_client) self.assertEqual(self._current_alarms(), alarms) def test__record_oldest(self): # Test when the partition to be recorded is the same as the oldest. self.partition_coordinator._record_oldest( self.partition_coordinator.oldest, True) self.assertIsNone(self.partition_coordinator.oldest) def test_check_mastership(self): # Test the method exception condition. self.partition_coordinator._is_master = mock.Mock( side_effect=Exception('Boom!')) self.partition_coordinator.check_mastership(10, None) self.assertTrue('mastership check failed' in self.output.getvalue()) def test_report_presence(self): self.partition_coordinator.coordination_rpc.presence = mock.Mock( side_effect=Exception('Boom!')) self.partition_coordinator.report_presence() self.assertTrue('presence reporting failed' in self.output.getvalue()) def test_assigned_alarms(self): api_client = mock.MagicMock() api_client.alarms = mock.Mock(side_effect=Exception('Boom!')) self.partition_coordinator.assignment = ['something'] self.partition_coordinator.assigned_alarms(api_client) self.assertTrue('assignment retrieval failed' in self.output.getvalue()) class TestPartitionIdentity(test.BaseTestCase): def setUp(self): super(TestPartitionIdentity, self).setUp() self.id_1st = coordination.PartitionIdentity(str(uuid.uuid4()), 1) self.id_2nd = coordination.PartitionIdentity(str(uuid.uuid4()), 2) def test_identity_ops(self): self.assertNotEqual(self.id_1st, 'Nothing') self.assertNotEqual(self.id_1st, self.id_2nd) self.assertTrue(self.id_1st < None) self.assertFalse(self.id_1st < 'Nothing') self.assertTrue(self.id_2nd > self.id_1st) ceilometer-2014.1/ceilometer/tests/alarm/partition/__init__.py0000664000175300017540000000000012323717130025563 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/alarm/evaluator/0000775000175300017540000000000012323717426023465 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/alarm/evaluator/test_base.py0000664000175300017540000001305112323717132026002 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 IBM Corp # # Author: Tong Li # # 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. """class for tests in ceilometer/alarm/evaluator/__init__.py """ import datetime import mock import pytz from ceilometer.alarm import evaluator from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils class TestEvaluatorBaseClass(test.BaseTestCase): def setUp(self): super(TestEvaluatorBaseClass, self).setUp() self.called = False def _notify(self, alarm, previous, reason, details): self.called = True raise Exception('Boom!') def test_base_refresh(self): notifier = mock.MagicMock() notifier.notify = self._notify class EvaluatorSub(evaluator.Evaluator): def evaluate(self, alarm): pass ev = EvaluatorSub(notifier) ev.api_client = mock.MagicMock() ev._refresh(mock.MagicMock(), mock.MagicMock(), mock.MagicMock(), mock.MagicMock()) self.assertTrue(self.called) def test_base_time_constraints(self): alarm = mock.MagicMock() alarm.time_constraints = [ {'name': 'test', 'description': 'test', 'start': '0 11 * * *', # daily at 11:00 'duration': 10800, # 3 hours 'timezone': ''}, {'name': 'test2', 'description': 'test', 'start': '0 23 * * *', # daily at 23:00 'duration': 10800, # 3 hours 'timezone': ''}, ] cls = evaluator.Evaluator timeutils.set_time_override(datetime.datetime(2014, 1, 1, 12, 0, 0)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 2, 1, 0, 0)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 2, 5, 0, 0)) self.assertFalse(cls.within_time_constraint(alarm)) def test_base_time_constraints_complex(self): alarm = mock.MagicMock() alarm.time_constraints = [ {'name': 'test', 'description': 'test', # Every consecutive 2 minutes (from the 3rd to the 57th) past # every consecutive 2 hours (between 3:00 and 12:59) on every day. 'start': '3-57/2 3-12/2 * * *', 'duration': 30, 'timezone': ''} ] cls = evaluator.Evaluator # test minutes inside timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 3, 0)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 31, 0)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 57, 0)) self.assertTrue(cls.within_time_constraint(alarm)) # test minutes outside timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 2, 0)) self.assertFalse(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 4, 0)) self.assertFalse(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 58, 0)) self.assertFalse(cls.within_time_constraint(alarm)) # test hours inside timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 31, 0)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 5, 31, 0)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 11, 31, 0)) self.assertTrue(cls.within_time_constraint(alarm)) # test hours outside timeutils.set_time_override(datetime.datetime(2014, 1, 5, 1, 31, 0)) self.assertFalse(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 4, 31, 0)) self.assertFalse(cls.within_time_constraint(alarm)) timeutils.set_time_override(datetime.datetime(2014, 1, 5, 12, 31, 0)) self.assertFalse(cls.within_time_constraint(alarm)) def test_base_time_constraints_timezone(self): alarm = mock.MagicMock() alarm.time_constraints = [ {'name': 'test', 'description': 'test', 'start': '0 11 * * *', # daily at 11:00 'duration': 10800, # 3 hours 'timezone': 'Europe/Ljubljana'} ] cls = evaluator.Evaluator dt_eu = datetime.datetime(2014, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('Europe/Ljubljana')) dt_us = datetime.datetime(2014, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('US/Eastern')) timeutils.set_time_override(dt_eu.astimezone(pytz.UTC)) self.assertTrue(cls.within_time_constraint(alarm)) timeutils.set_time_override(dt_us.astimezone(pytz.UTC)) self.assertFalse(cls.within_time_constraint(alarm)) ceilometer-2014.1/ceilometer/tests/alarm/evaluator/__init__.py0000664000175300017540000000000012323717130025554 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/alarm/evaluator/test_combination.py0000664000175300017540000004210512323717132027374 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Authors: Mehdi Abaakouk # # 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. """Tests for ceilometer/alarm/threshold_evaluation.py """ import datetime import mock import pytz import uuid from ceilometer.alarm.evaluator import combination from ceilometer.openstack.common import timeutils from ceilometer.storage import models from ceilometer.tests.alarm.evaluator import base from ceilometerclient import exc from ceilometerclient.v2 import alarms class TestEvaluate(base.TestEvaluatorBase): EVALUATOR = combination.CombinationEvaluator def prepare_alarms(self): self.alarms = [ models.Alarm(name='or-alarm', description='the or alarm', type='combination', enabled=True, user_id='foobar', project_id='snafu', alarm_id=str(uuid.uuid4()), state='insufficient data', state_timestamp=None, timestamp=None, insufficient_data_actions=[], ok_actions=[], alarm_actions=[], repeat_actions=False, time_constraints=[], rule=dict( alarm_ids=[ '9cfc3e51-2ff1-4b1d-ac01-c1bd4c6d0d1e', '1d441595-d069-4e05-95ab-8693ba6a8302'], operator='or', )), models.Alarm(name='and-alarm', description='the and alarm', type='combination', enabled=True, user_id='foobar', project_id='snafu', alarm_id=str(uuid.uuid4()), state='insufficient data', state_timestamp=None, timestamp=None, insufficient_data_actions=[], ok_actions=[], alarm_actions=[], repeat_actions=False, time_constraints=[], rule=dict( alarm_ids=[ 'b82734f4-9d06-48f3-8a86-fa59a0c99dc8', '15a700e5-2fe8-4b3d-8c55-9e92831f6a2b'], operator='and', )) ] @staticmethod def _get_alarm(state): return alarms.Alarm(None, {'state': state}) @staticmethod def _reason_data(alarm_ids): return {'type': 'combination', 'alarm_ids': alarm_ids} def _combination_transition_reason(self, state, alarm_ids1, alarm_ids2): return ([('Transition to %(state)s due to alarms %(alarm_ids)s' ' in state %(state)s') % {'state': state, 'alarm_ids': ",".join(alarm_ids1)}, ('Transition to %(state)s due to alarms %(alarm_ids)s' ' in state %(state)s') % {'state': state, 'alarm_ids': ",".join(alarm_ids2)}], [self._reason_data(alarm_ids1), self._reason_data(alarm_ids2)]) def _combination_remaining_reason(self, state, alarm_ids1, alarm_ids2): return ([('Remaining as %(state)s due to alarms %(alarm_ids)s' ' in state %(state)s') % {'state': state, 'alarm_ids': ",".join(alarm_ids1)}, ('Remaining as %(state)s due to alarms %(alarm_ids)s' ' in state %(state)s') % {'state': state, 'alarm_ids': ",".join(alarm_ids2)}], [self._reason_data(alarm_ids1), self._reason_data(alarm_ids2)]) def test_retry_transient_api_failure(self): with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): broken = exc.CommunicationError(message='broken') self.api_client.alarms.get.side_effect = [ broken, broken, broken, broken, self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), ] self._evaluate_all_alarms() self._assert_all_alarms('insufficient data') self._evaluate_all_alarms() self._assert_all_alarms('ok') def test_simple_insufficient(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): broken = exc.CommunicationError(message='broken') self.api_client.alarms.get.side_effect = broken self._evaluate_all_alarms() self._assert_all_alarms('insufficient data') expected = [mock.call(alarm.alarm_id, state='insufficient data') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) expected = [mock.call( alarm, 'ok', ('Alarms %s are in unknown state' % (",".join(alarm.rule['alarm_ids']))), self._reason_data(alarm.rule['alarm_ids'])) for alarm in self.alarms] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_to_ok_with_all_ok(self): self._set_all_alarms('insufficient data') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), ] self._evaluate_all_alarms() expected = [mock.call(alarm.alarm_id, state='ok') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons, reason_datas = self._combination_transition_reason( 'ok', self.alarms[0].rule['alarm_ids'], self.alarms[1].rule['alarm_ids']) expected = [mock.call(alarm, 'insufficient data', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_to_ok_with_one_alarm(self): self._set_all_alarms('alarm') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('alarm'), self._get_alarm('ok'), ] self._evaluate_all_alarms() expected = [mock.call(alarm.alarm_id, state='ok') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons, reason_datas = self._combination_transition_reason( 'ok', self.alarms[0].rule['alarm_ids'], [self.alarms[1].rule['alarm_ids'][1]]) expected = [mock.call(alarm, 'alarm', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_to_alarm_with_all_alarm(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.alarms.get.side_effect = [ self._get_alarm('alarm'), self._get_alarm('alarm'), self._get_alarm('alarm'), self._get_alarm('alarm'), ] self._evaluate_all_alarms() expected = [mock.call(alarm.alarm_id, state='alarm') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons, reason_datas = self._combination_transition_reason( 'alarm', self.alarms[0].rule['alarm_ids'], self.alarms[1].rule['alarm_ids']) expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_to_alarm_with_one_ok(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('alarm'), self._get_alarm('alarm'), self._get_alarm('alarm'), ] self._evaluate_all_alarms() expected = [mock.call(alarm.alarm_id, state='alarm') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons, reason_datas = self._combination_transition_reason( 'alarm', [self.alarms[0].rule['alarm_ids'][1]], self.alarms[1].rule['alarm_ids']) expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_to_unknown(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): broken = exc.CommunicationError(message='broken') self.api_client.alarms.get.side_effect = [ broken, self._get_alarm('ok'), self._get_alarm('insufficient data'), self._get_alarm('ok'), ] self._evaluate_all_alarms() expected = [mock.call(alarm.alarm_id, state='insufficient data') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Alarms %s are in unknown state' % self.alarms[0].rule['alarm_ids'][0], 'Alarms %s are in unknown state' % self.alarms[1].rule['alarm_ids'][0]] reason_datas = [ self._reason_data([self.alarms[0].rule['alarm_ids'][0]]), self._reason_data([self.alarms[1].rule['alarm_ids'][0]])] expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_no_state_change(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), ] self._evaluate_all_alarms() update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual([], update_calls) self.assertEqual([], self.notifier.notify.call_args_list) def test_no_state_change_and_repeat_actions(self): self.alarms[0].repeat_actions = True self.alarms[1].repeat_actions = True self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), ] self._evaluate_all_alarms() update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual([], update_calls) reasons, reason_datas = self._combination_remaining_reason( 'ok', self.alarms[0].rule['alarm_ids'], self.alarms[1].rule['alarm_ids']) expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_state_change_inside_time_constraint(self): self._set_all_alarms('insufficient data') self.alarms[0].time_constraints = [ {'name': 'test', 'description': 'test', 'start': '0 11 * * *', # daily at 11:00 'duration': 10800, # 3 hours 'timezone': 'Europe/Ljubljana'} ] self.alarms[1].time_constraints = self.alarms[0].time_constraints dt = datetime.datetime(2014, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('Europe/Ljubljana')) with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): timeutils.set_time_override(dt.astimezone(pytz.UTC)) self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), ] self._evaluate_all_alarms() expected = [mock.call(alarm.alarm_id, state='ok') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls, "Alarm should change state if the current " "time is inside its time constraint.") reasons, reason_datas = self._combination_transition_reason( 'ok', self.alarms[0].rule['alarm_ids'], self.alarms[1].rule['alarm_ids']) expected = [mock.call(alarm, 'insufficient data', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_no_state_change_outside_time_constraint(self): self._set_all_alarms('insufficient data') self.alarms[0].time_constraints = [ {'name': 'test', 'description': 'test', 'start': '0 11 * * *', # daily at 11:00 'duration': 10800, # 3 hours 'timezone': 'Europe/Ljubljana'} ] self.alarms[1].time_constraints = self.alarms[0].time_constraints dt = datetime.datetime(2014, 1, 1, 15, 0, 0, tzinfo=pytz.timezone('Europe/Ljubljana')) with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): timeutils.set_time_override(dt.astimezone(pytz.UTC)) self.api_client.alarms.get.side_effect = [ self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), self._get_alarm('ok'), ] self._evaluate_all_alarms() update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual([], update_calls, "Alarm should not change state if the current " " time is outside its time constraint.") self.assertEqual([], self.notifier.notify.call_args_list) ceilometer-2014.1/ceilometer/tests/alarm/evaluator/base.py0000664000175300017540000000326112323717132024745 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Mehdi Abaakouk # Eoghan Glynn # # 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. """Base class for tests in ceilometer/alarm/evaluator/ """ import mock from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils class TestEvaluatorBase(test.BaseTestCase): def setUp(self): super(TestEvaluatorBase, self).setUp() self.api_client = mock.Mock() self.notifier = mock.MagicMock() self.evaluator = self.EVALUATOR(self.notifier) self.prepare_alarms() def tearDown(self): super(TestEvaluatorBase, self).tearDown() timeutils.utcnow.override_time = None @staticmethod def prepare_alarms(self): self.alarms = [] def _evaluate_all_alarms(self): for alarm in self.alarms: self.evaluator.evaluate(alarm) def _set_all_alarms(self, state): for alarm in self.alarms: alarm.state = state def _assert_all_alarms(self, state): for alarm in self.alarms: self.assertEqual(state, alarm.state) ceilometer-2014.1/ceilometer/tests/alarm/evaluator/test_threshold.py0000664000175300017540000006301412323717132027070 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Red Hat, Inc # # Author: Eoghan Glynn # # 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. """Tests for ceilometer/alarm/evaluator/threshold.py """ import datetime import mock import pytz import uuid from six import moves from ceilometer.alarm.evaluator import threshold from ceilometer.openstack.common import timeutils from ceilometer.storage import models from ceilometer.tests.alarm.evaluator import base from ceilometerclient import exc from ceilometerclient.v2 import statistics from oslo.config import cfg class TestEvaluate(base.TestEvaluatorBase): EVALUATOR = threshold.ThresholdEvaluator def prepare_alarms(self): self.alarms = [ models.Alarm(name='instance_running_hot', description='instance_running_hot', type='threshold', enabled=True, user_id='foobar', project_id='snafu', alarm_id=str(uuid.uuid4()), state='insufficient data', state_timestamp=None, timestamp=None, insufficient_data_actions=[], ok_actions=[], alarm_actions=[], repeat_actions=False, time_constraints=[], rule=dict( comparison_operator='gt', threshold=80.0, evaluation_periods=5, statistic='avg', period=60, meter_name='cpu_util', query=[{'field': 'meter', 'op': 'eq', 'value': 'cpu_util'}, {'field': 'resource_id', 'op': 'eq', 'value': 'my_instance'}]) ), models.Alarm(name='group_running_idle', description='group_running_idle', type='threshold', enabled=True, user_id='foobar', project_id='snafu', state='insufficient data', state_timestamp=None, timestamp=None, insufficient_data_actions=[], ok_actions=[], alarm_actions=[], repeat_actions=False, alarm_id=str(uuid.uuid4()), time_constraints=[], rule=dict( comparison_operator='le', threshold=10.0, evaluation_periods=4, statistic='max', period=300, meter_name='cpu_util', query=[{'field': 'meter', 'op': 'eq', 'value': 'cpu_util'}, {'field': 'metadata.user_metadata.AS', 'op': 'eq', 'value': 'my_group'}]) ), ] @staticmethod def _get_stat(attr, value, count=1): return statistics.Statistics(None, {attr: value, 'count': count}) @staticmethod def _reason_data(disposition, count, most_recent): return {'type': 'threshold', 'disposition': disposition, 'count': count, 'most_recent': most_recent} def _set_all_rules(self, field, value): for alarm in self.alarms: alarm.rule[field] = value def test_retry_transient_api_failure(self): with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): broken = exc.CommunicationError(message='broken') avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] - v) for v in moves.xrange(5)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] + v) for v in moves.xrange(1, 4)] self.api_client.statistics.list.side_effect = [broken, broken, avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('insufficient data') self._evaluate_all_alarms() self._assert_all_alarms('ok') def test_simple_insufficient(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.api_client.statistics.list.return_value = [] self._evaluate_all_alarms() self._assert_all_alarms('insufficient data') expected = [mock.call(alarm.alarm_id, state='insufficient data') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(update_calls, expected) expected = [mock.call( alarm, 'ok', ('%d datapoints are unknown' % alarm.rule['evaluation_periods']), self._reason_data('unknown', alarm.rule['evaluation_periods'], None)) for alarm in self.alarms] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_simple_alarm_trip(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] + v) for v in moves.xrange(1, 6)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] - v) for v in moves.xrange(4)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('alarm') expected = [mock.call(alarm.alarm_id, state='alarm') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Transition to alarm due to 5 samples outside' ' threshold, most recent: %s' % avgs[-1].avg, 'Transition to alarm due to 4 samples outside' ' threshold, most recent: %s' % maxs[-1].max] reason_datas = [self._reason_data('outside', 5, avgs[-1].avg), self._reason_data('outside', 4, maxs[-1].max)] expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_simple_alarm_clear(self): self._set_all_alarms('alarm') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] - v) for v in moves.xrange(5)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] + v) for v in moves.xrange(1, 5)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('ok') expected = [mock.call(alarm.alarm_id, state='ok') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Transition to ok due to 5 samples inside' ' threshold, most recent: %s' % avgs[-1].avg, 'Transition to ok due to 4 samples inside' ' threshold, most recent: %s' % maxs[-1].max] reason_datas = [self._reason_data('inside', 5, avgs[-1].avg), self._reason_data('inside', 4, maxs[-1].max)] expected = [mock.call(alarm, 'alarm', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_equivocal_from_known_state(self): self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] + v) for v in moves.xrange(5)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] - v) for v in moves.xrange(-1, 3)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('ok') self.assertEqual( [], self.api_client.alarms.set_state.call_args_list) self.assertEqual([], self.notifier.notify.call_args_list) def test_equivocal_from_known_state_and_repeat_actions(self): self._set_all_alarms('ok') self.alarms[1].repeat_actions = True with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] + v) for v in moves.xrange(5)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] - v) for v in moves.xrange(-1, 3)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('ok') self.assertEqual([], self.api_client.alarms.set_state.call_args_list) reason = 'Remaining as ok due to 4 samples inside' \ ' threshold, most recent: 8.0' reason_datas = self._reason_data('inside', 4, 8.0) expected = [mock.call(self.alarms[1], 'ok', reason, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_unequivocal_from_known_state_and_repeat_actions(self): self._set_all_alarms('alarm') self.alarms[1].repeat_actions = True with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] + v) for v in moves.xrange(1, 6)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] - v) for v in moves.xrange(4)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('alarm') self.assertEqual([], self.api_client.alarms.set_state.call_args_list) reason = 'Remaining as alarm due to 4 samples outside' \ ' threshold, most recent: 7.0' reason_datas = self._reason_data('outside', 4, 7.0) expected = [mock.call(self.alarms[1], 'alarm', reason, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_state_change_and_repeat_actions(self): self._set_all_alarms('ok') self.alarms[0].repeat_actions = True self.alarms[1].repeat_actions = True with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] + v) for v in moves.xrange(1, 6)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] - v) for v in moves.xrange(4)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('alarm') expected = [mock.call(alarm.alarm_id, state='alarm') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Transition to alarm due to 5 samples outside' ' threshold, most recent: %s' % avgs[-1].avg, 'Transition to alarm due to 4 samples outside' ' threshold, most recent: %s' % maxs[-1].max] reason_datas = [self._reason_data('outside', 5, avgs[-1].avg), self._reason_data('outside', 4, maxs[-1].max)] expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_equivocal_from_unknown(self): self._set_all_alarms('insufficient data') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): avgs = [self._get_stat('avg', self.alarms[0].rule['threshold'] + v) for v in moves.xrange(1, 6)] maxs = [self._get_stat('max', self.alarms[1].rule['threshold'] - v) for v in moves.xrange(4)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('alarm') expected = [mock.call(alarm.alarm_id, state='alarm') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Transition to alarm due to 5 samples outside' ' threshold, most recent: %s' % avgs[-1].avg, 'Transition to alarm due to 4 samples outside' ' threshold, most recent: %s' % maxs[-1].max] reason_datas = [self._reason_data('outside', 5, avgs[-1].avg), self._reason_data('outside', 4, maxs[-1].max)] expected = [mock.call(alarm, 'insufficient data', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def _do_test_bound_duration(self, start, exclude_outliers=None): alarm = self.alarms[0] if exclude_outliers is not None: alarm.rule['exclude_outliers'] = exclude_outliers timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45) constraint = self.evaluator._bound_duration(alarm, []) self.assertEqual([ {'field': 'timestamp', 'op': 'le', 'value': timeutils.utcnow().isoformat()}, {'field': 'timestamp', 'op': 'ge', 'value': start}, ], constraint) def test_bound_duration_outlier_exclusion_defaulted(self): self._do_test_bound_duration('2012-07-02T10:39:00') def test_bound_duration_outlier_exclusion_clear(self): self._do_test_bound_duration('2012-07-02T10:39:00', False) def test_bound_duration_outlier_exclusion_set(self): self._do_test_bound_duration('2012-07-02T10:35:00', True) def test_threshold_endpoint_types(self): endpoint_types = ["internalURL", "publicURL"] for endpoint_type in endpoint_types: cfg.CONF.set_override('os_endpoint_type', endpoint_type, group='service_credentials') with mock.patch('ceilometerclient.client.get_client') as client: self.evaluator.api_client = None self._evaluate_all_alarms() conf = cfg.CONF.service_credentials expected = [mock.call(2, os_auth_url=conf.os_auth_url, os_region_name=conf.os_region_name, os_tenant_name=conf.os_tenant_name, os_password=conf.os_password, os_username=conf.os_username, os_cacert=conf.os_cacert, os_endpoint_type=conf.os_endpoint_type, insecure=conf.insecure)] actual = client.call_args_list self.assertEqual(expected, actual) def _do_test_simple_alarm_trip_outlier_exclusion(self, exclude_outliers): self._set_all_rules('exclude_outliers', exclude_outliers) self._set_all_alarms('ok') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): # most recent datapoints inside threshold but with # anomalously low sample count threshold = self.alarms[0].rule['threshold'] avgs = [self._get_stat('avg', threshold + (v if v < 10 else -v), count=20 if v < 10 else 1) for v in xrange(1, 11)] threshold = self.alarms[1].rule['threshold'] maxs = [self._get_stat('max', threshold - (v if v < 7 else -v), count=20 if v < 7 else 1) for v in xrange(8)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('alarm' if exclude_outliers else 'ok') if exclude_outliers: expected = [mock.call(alarm.alarm_id, state='alarm') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Transition to alarm due to 5 samples outside' ' threshold, most recent: %s' % avgs[-2].avg, 'Transition to alarm due to 4 samples outside' ' threshold, most recent: %s' % maxs[-2].max] reason_datas = [self._reason_data('outside', 5, avgs[-2].avg), self._reason_data('outside', 4, maxs[-2].max)] expected = [mock.call(alarm, 'ok', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_simple_alarm_trip_with_outlier_exclusion(self): self. _do_test_simple_alarm_trip_outlier_exclusion(True) def test_simple_alarm_no_trip_without_outlier_exclusion(self): self. _do_test_simple_alarm_trip_outlier_exclusion(False) def _do_test_simple_alarm_clear_outlier_exclusion(self, exclude_outliers): self._set_all_rules('exclude_outliers', exclude_outliers) self._set_all_alarms('alarm') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): # most recent datapoints outside threshold but with # anomalously low sample count threshold = self.alarms[0].rule['threshold'] avgs = [self._get_stat('avg', threshold - (v if v < 9 else -v), count=20 if v < 9 else 1) for v in xrange(10)] threshold = self.alarms[1].rule['threshold'] maxs = [self._get_stat('max', threshold + (v if v < 8 else -v), count=20 if v < 8 else 1) for v in xrange(1, 9)] self.api_client.statistics.list.side_effect = [avgs, maxs] self._evaluate_all_alarms() self._assert_all_alarms('ok' if exclude_outliers else 'alarm') if exclude_outliers: expected = [mock.call(alarm.alarm_id, state='ok') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls) reasons = ['Transition to ok due to 5 samples inside' ' threshold, most recent: %s' % avgs[-2].avg, 'Transition to ok due to 4 samples inside' ' threshold, most recent: %s' % maxs[-2].max] reason_datas = [self._reason_data('inside', 5, avgs[-2].avg), self._reason_data('inside', 4, maxs[-2].max)] expected = [mock.call(alarm, 'alarm', reason, reason_data) for alarm, reason, reason_data in zip(self.alarms, reasons, reason_datas)] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_simple_alarm_clear_with_outlier_exclusion(self): self. _do_test_simple_alarm_clear_outlier_exclusion(True) def test_simple_alarm_no_clear_without_outlier_exclusion(self): self. _do_test_simple_alarm_clear_outlier_exclusion(False) def test_state_change_inside_time_constraint(self): self._set_all_alarms('ok') self.alarms[0].time_constraints = [ {'name': 'test', 'description': 'test', 'start': '0 11 * * *', # daily at 11:00 'duration': 10800, # 3 hours 'timezone': 'Europe/Ljubljana'} ] self.alarms[1].time_constraints = self.alarms[0].time_constraints dt = datetime.datetime(2014, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('Europe/Ljubljana')) with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): timeutils.set_time_override(dt.astimezone(pytz.UTC)) # the following part based on test_simple_insufficient self.api_client.statistics.list.return_value = [] self._evaluate_all_alarms() self._assert_all_alarms('insufficient data') expected = [mock.call(alarm.alarm_id, state='insufficient data') for alarm in self.alarms] update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual(expected, update_calls, "Alarm should change state if the current " "time is inside its time constraint.") expected = [mock.call( alarm, 'ok', ('%d datapoints are unknown' % alarm.rule['evaluation_periods']), self._reason_data('unknown', alarm.rule['evaluation_periods'], None)) for alarm in self.alarms] self.assertEqual(expected, self.notifier.notify.call_args_list) def test_no_state_change_outside_time_constraint(self): self._set_all_alarms('ok') self.alarms[0].time_constraints = [ {'name': 'test', 'description': 'test', 'start': '0 11 * * *', # daily at 11:00 'duration': 10800, # 3 hours 'timezone': 'Europe/Ljubljana'} ] self.alarms[1].time_constraints = self.alarms[0].time_constraints dt = datetime.datetime(2014, 1, 1, 15, 0, 0, tzinfo=pytz.timezone('Europe/Ljubljana')) with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): timeutils.set_time_override(dt.astimezone(pytz.UTC)) self.api_client.statistics.list.return_value = [] self._evaluate_all_alarms() self._assert_all_alarms('ok') update_calls = self.api_client.alarms.set_state.call_args_list self.assertEqual([], update_calls, "Alarm should not change state if the current " " time is outside its time constraint.") self.assertEqual([], self.notifier.notify.call_args_list) ceilometer-2014.1/ceilometer/tests/alarm/__init__.py0000664000175300017540000000000012323717130023552 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/alarm/test_rpc.py0000664000175300017540000001532712323717132023662 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Authors: Mehdi Abaakouk # # 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 uuid from ceilometerclient.v2 import alarms import mock from ceilometer.alarm import rpc as rpc_alarm from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import rpc from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils from ceilometer.storage import models class TestRPCAlarmNotifier(test.BaseTestCase): def fake_cast(self, context, topic, msg): self.notified.append((topic, msg)) self.CONF = self.useFixture(config.Config()).conf def setUp(self): super(TestRPCAlarmNotifier, self).setUp() self.notified = [] self.useFixture(mockpatch.PatchObject( rpc, 'cast', side_effect=self.fake_cast)) self.notifier = rpc_alarm.RPCAlarmNotifier() self.alarms = [ alarms.Alarm(None, info={ 'name': 'instance_running_hot', 'meter_name': 'cpu_util', 'comparison_operator': 'gt', 'threshold': 80.0, 'evaluation_periods': 5, 'statistic': 'avg', 'state': 'ok', 'ok_actions': ['http://host:8080/path'], 'user_id': 'foobar', 'project_id': 'snafu', 'period': 60, 'alarm_id': str(uuid.uuid4()), 'matching_metadata':{'resource_id': 'my_instance'} }), alarms.Alarm(None, info={ 'name': 'group_running_idle', 'meter_name': 'cpu_util', 'comparison_operator': 'le', 'threshold': 10.0, 'statistic': 'max', 'evaluation_periods': 4, 'state': 'insufficient data', 'insufficient_data_actions': ['http://other_host/path'], 'user_id': 'foobar', 'project_id': 'snafu', 'period': 300, 'alarm_id': str(uuid.uuid4()), 'matching_metadata':{'metadata.user_metadata.AS': 'my_group'} }), ] def test_notify_alarm(self): previous = ['alarm', 'ok'] for i, a in enumerate(self.alarms): self.notifier.notify(a, previous[i], "what? %d" % i, {'fire': '%d' % i}) self.assertEqual(2, len(self.notified)) for i, a in enumerate(self.alarms): actions = getattr(a, models.Alarm.ALARM_ACTIONS_MAP[a.state]) self.assertEqual(self.CONF.alarm.notifier_rpc_topic, self.notified[i][0]) self.assertEqual(self.alarms[i].alarm_id, self.notified[i][1]["args"]["data"]["alarm_id"]) self.assertEqual(actions, self.notified[i][1]["args"]["data"]["actions"]) self.assertEqual(previous[i], self.notified[i][1]["args"]["data"]["previous"]) self.assertEqual(self.alarms[i].state, self.notified[i][1]["args"]["data"]["current"]) self.assertEqual("what? %d" % i, self.notified[i][1]["args"]["data"]["reason"]) self.assertEqual( {'fire': '%d' % i}, self.notified[i][1]["args"]["data"]["reason_data"]) def test_notify_non_string_reason(self): self.notifier.notify(self.alarms[0], 'ok', 42, {}) reason = self.notified[0][1]['args']['data']['reason'] self.assertIsInstance(reason, basestring) def test_notify_no_actions(self): alarm = alarms.Alarm(None, info={ 'name': 'instance_running_hot', 'meter_name': 'cpu_util', 'comparison_operator': 'gt', 'threshold': 80.0, 'evaluation_periods': 5, 'statistic': 'avg', 'state': 'ok', 'user_id': 'foobar', 'project_id': 'snafu', 'period': 60, 'ok_actions': [], 'alarm_id': str(uuid.uuid4()), 'matching_metadata': {'resource_id': 'my_instance'} }) self.notifier.notify(alarm, 'alarm', "what?", {}) self.assertEqual(0, len(self.notified)) class TestRPCAlarmPartitionCoordination(test.BaseTestCase): def fake_fanout_cast(self, context, topic, msg): self.notified.append((topic, msg)) def setUp(self): super(TestRPCAlarmPartitionCoordination, self).setUp() self.notified = [] self.useFixture(mockpatch.PatchObject( rpc, 'fanout_cast', side_effect=self.fake_fanout_cast)) self.ordination = rpc_alarm.RPCAlarmPartitionCoordination() self.alarms = [mock.MagicMock(), mock.MagicMock()] def test_ordination_presence(self): id = uuid.uuid4() priority = float(timeutils.utcnow().strftime('%s.%f')) self.ordination.presence(id, priority) topic, msg = self.notified[0] self.assertEqual('alarm_partition_coordination', topic) self.assertEqual(id, msg['args']['data']['uuid']) self.assertEqual(priority, msg['args']['data']['priority']) self.assertEqual('presence', msg['method']) def test_ordination_assign(self): id = uuid.uuid4() self.ordination.assign(id, self.alarms) topic, msg = self.notified[0] self.assertEqual('alarm_partition_coordination', topic) self.assertEqual(id, msg['args']['data']['uuid']) self.assertEqual(2, len(msg['args']['data']['alarms'])) self.assertEqual('assign', msg['method']) def test_ordination_allocate(self): id = uuid.uuid4() self.ordination.allocate(id, self.alarms) topic, msg = self.notified[0] self.assertEqual('alarm_partition_coordination', topic) self.assertEqual(id, msg['args']['data']['uuid']) self.assertEqual(2, len(msg['args']['data']['alarms'])) self.assertEqual('allocate', msg['method']) ceilometer-2014.1/ceilometer/tests/alarm/test_singleton_alarm_svc.py0000664000175300017540000001045212323717132027121 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Red Hat, Inc # # Author: Eoghan Glynn # # 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. """Tests for ceilometer.alarm.service.SingletonAlarmService. """ import mock from oslo.config import cfg from stevedore import extension from ceilometer.alarm import service from ceilometer.openstack.common import test class TestSingletonAlarmService(test.BaseTestCase): def setUp(self): super(TestSingletonAlarmService, self).setUp() self.threshold_eval = mock.Mock() self.evaluators = extension.ExtensionManager.make_test_instance( [ extension.Extension( 'threshold', None, None, self.threshold_eval), ] ) self.api_client = mock.MagicMock() self.singleton = service.SingletonAlarmService() self.singleton.tg = mock.Mock() self.singleton.evaluators = self.evaluators self.singleton.supported_evaluators = ['threshold'] def test_start(self): test_interval = 120 cfg.CONF.set_override('evaluation_interval', test_interval, group='alarm') with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.singleton.start() expected = [ mock.call(test_interval, self.singleton._evaluate_assigned_alarms, 0), mock.call(604800, mock.ANY), ] actual = self.singleton.tg.add_timer.call_args_list self.assertEqual(expected, actual) def test_evaluation_cycle(self): alarm = mock.Mock(type='threshold') self.api_client.alarms.list.return_value = [alarm] with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.singleton._evaluate_assigned_alarms() self.threshold_eval.evaluate.assert_called_once_with(alarm) def test_unknown_extension_skipped(self): alarms = [ mock.Mock(type='not_existing_type'), mock.Mock(type='threshold') ] self.api_client.alarms.list.return_value = alarms with mock.patch('ceilometerclient.client.get_client', return_value=self.api_client): self.singleton.start() self.singleton._evaluate_assigned_alarms() self.threshold_eval.evaluate.assert_called_once_with(alarms[1]) def test_singleton_endpoint_types(self): endpoint_types = ["internalURL", "publicURL"] for endpoint_type in endpoint_types: cfg.CONF.set_override('os_endpoint_type', endpoint_type, group='service_credentials') with mock.patch('ceilometerclient.client.get_client') as client: self.singleton.api_client = None self.singleton._evaluate_assigned_alarms() conf = cfg.CONF.service_credentials expected = [mock.call(2, os_auth_url=conf.os_auth_url, os_region_name=conf.os_region_name, os_tenant_name=conf.os_tenant_name, os_password=conf.os_password, os_username=conf.os_username, os_cacert=conf.os_cacert, os_endpoint_type=conf.os_endpoint_type, insecure=conf.insecure)] actual = client.call_args_list self.assertEqual(expected, actual) ceilometer-2014.1/ceilometer/tests/alarm/test_partitioned_alarm_svc.py0000664000175300017540000001013312323717132027435 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Red Hat, Inc # # Author: Eoghan Glynn # # 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. """Tests for ceilometer.alarm.service.PartitionedAlarmService. """ import contextlib import mock from stevedore import extension from ceilometer.alarm import service from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test class TestPartitionedAlarmService(test.BaseTestCase): def setUp(self): super(TestPartitionedAlarmService, self).setUp() self.threshold_eval = mock.Mock() self.api_client = mock.MagicMock() self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override('host', 'fake_host') self.CONF.set_override('partition_rpc_topic', 'fake_topic', group='alarm') self.partitioned = service.PartitionedAlarmService() self.partitioned.tg = mock.Mock() self.partitioned.partition_coordinator = mock.Mock() self.extension_mgr = extension.ExtensionManager.make_test_instance( [ extension.Extension( 'threshold', None, None, self.threshold_eval, ), ] ) self.partitioned.extension_manager = self.extension_mgr @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_start(self): test_interval = 120 self.CONF.set_override('evaluation_interval', test_interval, group='alarm') get_client = 'ceilometerclient.client.get_client' create_conn = 'ceilometer.openstack.common.rpc.create_connection' with contextlib.nested(mock.patch(get_client, return_value=self.api_client), mock.patch(create_conn)): self.partitioned.start() pc = self.partitioned.partition_coordinator expected = [ mock.call(test_interval / 4, pc.report_presence, 0), mock.call(test_interval / 2, pc.check_mastership, test_interval, test_interval, self.api_client), mock.call(test_interval, self.partitioned._evaluate_assigned_alarms, test_interval), mock.call(604800, mock.ANY), ] actual = self.partitioned.tg.add_timer.call_args_list self.assertEqual(expected, actual) def test_presence_reporting(self): priority = 42 self.partitioned.presence(mock.Mock(), dict(uuid='uuid', priority=priority)) pc = self.partitioned.partition_coordinator pc.presence.assert_called_once_with('uuid', priority) def test_alarm_assignment(self): alarms = [mock.Mock()] self.partitioned.assign(mock.Mock(), dict(uuid='uuid', alarms=alarms)) pc = self.partitioned.partition_coordinator pc.assign.assert_called_once_with('uuid', alarms) def test_alarm_allocation(self): alarms = [mock.Mock()] self.partitioned.allocate(mock.Mock(), dict(uuid='uuid', alarms=alarms)) pc = self.partitioned.partition_coordinator pc.allocate.assert_called_once_with('uuid', alarms) ceilometer-2014.1/ceilometer/tests/alarm/test_notifier.py0000664000175300017540000002046312323717132024712 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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 six.moves.urllib.parse as urlparse import mock import requests from ceilometer.alarm import service from ceilometer.openstack.common import context from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test DATA_JSON = ('{"current": "ALARM", "alarm_id": "foobar",' ' "reason": "what ?", "reason_data": {"test": "test"},' ' "previous": "OK"}') NOTIFICATION = dict(alarm_id='foobar', condition=dict(threshold=42), reason='what ?', reason_data={'test': 'test'}, previous='OK', current='ALARM') class TestAlarmNotifier(test.BaseTestCase): def setUp(self): super(TestAlarmNotifier, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.service = service.AlarmNotifierService('somehost', 'sometopic') @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_init_host(self): # If we try to create a real RPC connection, init_host() never # returns. Mock it out so we can establish the service # configuration. with mock.patch('ceilometer.openstack.common.rpc.create_connection'): self.service.start() def test_notify_alarm(self): data = { 'actions': ['test://'], 'alarm_id': 'foobar', 'previous': 'OK', 'current': 'ALARM', 'reason': 'Everything is on fire', 'reason_data': {'fire': 'everywhere'} } self.service.notify_alarm(context.get_admin_context(), data) notifications = self.service.notifiers['test'].obj.notifications self.assertEqual(1, len(notifications)) self.assertEqual((urlparse.urlsplit(data['actions'][0]), data['alarm_id'], data['previous'], data['current'], data['reason'], data['reason_data']), notifications[0]) def test_notify_alarm_no_action(self): self.service.notify_alarm(context.get_admin_context(), {}) def test_notify_alarm_log_action(self): self.service.notify_alarm(context.get_admin_context(), { 'actions': ['log://'], 'alarm_id': 'foobar', 'condition': {'threshold': 42}, }) @staticmethod def _fake_spawn_n(func, *args, **kwargs): func(*args, **kwargs) @staticmethod def _notification(action): notification = {} notification.update(NOTIFICATION) notification['actions'] = [action] return notification def test_notify_alarm_rest_action_ok(self): action = 'http://host/action' with mock.patch('eventlet.spawn_n', self._fake_spawn_n): with mock.patch.object(requests, 'post') as poster: self.service.notify_alarm(context.get_admin_context(), self._notification(action)) poster.assert_called_with(action, data=DATA_JSON) def test_notify_alarm_rest_action_with_ssl_client_cert(self): action = 'https://host/action' certificate = "/etc/ssl/cert/whatever.pem" self.CONF.set_override("rest_notifier_certificate_file", certificate, group='alarm') with mock.patch('eventlet.spawn_n', self._fake_spawn_n): with mock.patch.object(requests, 'post') as poster: self.service.notify_alarm(context.get_admin_context(), self._notification(action)) poster.assert_called_with(action, data=DATA_JSON, cert=certificate, verify=True) def test_notify_alarm_rest_action_with_ssl_client_cert_and_key(self): action = 'https://host/action' certificate = "/etc/ssl/cert/whatever.pem" key = "/etc/ssl/cert/whatever.key" self.CONF.set_override("rest_notifier_certificate_file", certificate, group='alarm') self.CONF.set_override("rest_notifier_certificate_key", key, group='alarm') with mock.patch('eventlet.spawn_n', self._fake_spawn_n): with mock.patch.object(requests, 'post') as poster: self.service.notify_alarm(context.get_admin_context(), self._notification(action)) poster.assert_called_with(action, data=DATA_JSON, cert=(certificate, key), verify=True) def test_notify_alarm_rest_action_with_ssl_verify_disable_by_cfg(self): action = 'https://host/action' self.CONF.set_override("rest_notifier_ssl_verify", False, group='alarm') with mock.patch('eventlet.spawn_n', self._fake_spawn_n): with mock.patch.object(requests, 'post') as poster: self.service.notify_alarm(context.get_admin_context(), self._notification(action)) poster.assert_called_with(action, data=DATA_JSON, verify=False) def test_notify_alarm_rest_action_with_ssl_verify_disable(self): action = 'https://host/action?ceilometer-alarm-ssl-verify=0' with mock.patch('eventlet.spawn_n', self._fake_spawn_n): with mock.patch.object(requests, 'post') as poster: self.service.notify_alarm(context.get_admin_context(), self._notification(action)) poster.assert_called_with(action, data=DATA_JSON, verify=False) def test_notify_alarm_rest_action_with_ssl_verify_enable_by_user(self): action = 'https://host/action?ceilometer-alarm-ssl-verify=1' self.CONF.set_override("rest_notifier_ssl_verify", False, group='alarm') with mock.patch('eventlet.spawn_n', self._fake_spawn_n): with mock.patch.object(requests, 'post') as poster: self.service.notify_alarm(context.get_admin_context(), self._notification(action)) poster.assert_called_with(action, data=DATA_JSON, verify=True) @staticmethod def _fake_urlsplit(*args, **kwargs): raise Exception("Evil urlsplit!") def test_notify_alarm_invalid_url(self): with mock.patch('ceilometer.openstack.common.network_utils.urlsplit', self._fake_urlsplit): LOG = mock.MagicMock() with mock.patch('ceilometer.alarm.service.LOG', LOG): self.service.notify_alarm( context.get_admin_context(), { 'actions': ['no-such-action-i-am-sure'], 'alarm_id': 'foobar', 'condition': {'threshold': 42}, }) self.assertTrue(LOG.error.called) def test_notify_alarm_invalid_action(self): LOG = mock.MagicMock() with mock.patch('ceilometer.alarm.service.LOG', LOG): self.service.notify_alarm( context.get_admin_context(), { 'actions': ['no-such-action-i-am-sure://'], 'alarm_id': 'foobar', 'condition': {'threshold': 42}, }) self.assertTrue(LOG.error.called) ceilometer-2014.1/ceilometer/tests/test_middleware.py0000664000175300017540000001031712323717132024111 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. from ceilometer import middleware from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test HTTP_REQUEST = { u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2', u'_context_is_admin': True, u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e', u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': u'10.0.2.15', u'_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T20:23:41.425105', u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'event_type': u'http.request', u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451', u'payload': {u'request': {'HTTP_X_FOOBAR': 'foobaz', 'HTTP_X_USER_ID': 'jd-x32', 'HTTP_X_PROJECT_ID': 'project-id', 'HTTP_X_SERVICE_NAME': 'nova'}}, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:23:48.028195', } HTTP_RESPONSE = { u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2', u'_context_is_admin': True, u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e', u'_context_quota_class': None, u'_context_read_deleted': u'no', u'_context_remote_address': u'10.0.2.15', u'_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66', u'_context_roles': [u'admin'], u'_context_timestamp': u'2012-05-08T20:23:41.425105', u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'event_type': u'http.response', u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451', u'payload': {u'request': {'HTTP_X_FOOBAR': 'foobaz', 'HTTP_X_USER_ID': 'jd-x32', 'HTTP_X_PROJECT_ID': 'project-id', 'HTTP_X_SERVICE_NAME': 'nova'}, u'response': {'status': '200 OK'}}, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:23:48.028195', } class TestNotifications(test.BaseTestCase): def setUp(self): super(TestNotifications, self).setUp() self.CONF = self.useFixture(config.Config()).conf def test_process_request_notification(self): sample = list(middleware.HTTPRequest().process_notification( HTTP_REQUEST ))[0] self.assertEqual(HTTP_REQUEST['payload']['request']['HTTP_X_USER_ID'], sample.user_id) self.assertEqual(HTTP_REQUEST['payload']['request'] ['HTTP_X_PROJECT_ID'], sample.project_id) self.assertEqual(HTTP_REQUEST['payload']['request'] ['HTTP_X_SERVICE_NAME'], sample.resource_id) self.assertEqual(1, sample.volume) def test_process_response_notification(self): sample = list(middleware.HTTPResponse().process_notification( HTTP_RESPONSE ))[0] self.assertEqual(HTTP_RESPONSE['payload']['request']['HTTP_X_USER_ID'], sample.user_id) self.assertEqual(HTTP_RESPONSE['payload']['request'] ['HTTP_X_PROJECT_ID'], sample.project_id) self.assertEqual(HTTP_RESPONSE['payload']['request'] ['HTTP_X_SERVICE_NAME'], sample.resource_id) self.assertEqual(1, sample.volume) def test_exchanges(self): topics = middleware.HTTPRequest().get_exchange_topics(self.CONF) self.assertEqual(4, len(topics)) ceilometer-2014.1/ceilometer/tests/pipeline_base.py0000664000175300017540000013147212323717130023540 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp. # # Authors: Yunhong Jiang # Julien Danjou # # 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 abc import datetime import six from stevedore import extension from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import test from ceilometer.openstack.common import timeutils from ceilometer import pipeline from ceilometer import publisher from ceilometer.publisher import test as test_publisher from ceilometer import sample from ceilometer import transformer from ceilometer.transformer import accumulator from ceilometer.transformer import conversions @six.add_metaclass(abc.ABCMeta) class BasePipelineTestCase(test.BaseTestCase): def fake_tem_init(self): """Fake a transformerManager for pipeline The faked entry point setting is below: update: TransformerClass except: TransformerClassException drop: TransformerClassDrop """ pass def fake_tem_get_ext(self, name): class_name_ext = { 'update': self.TransformerClass, 'except': self.TransformerClassException, 'drop': self.TransformerClassDrop, 'cache': accumulator.TransformerAccumulator, 'unit_conversion': conversions.ScalingTransformer, 'rate_of_change': conversions.RateOfChangeTransformer, } if name in class_name_ext: return extension.Extension(name, None, class_name_ext[name], None, ) raise KeyError(name) def get_publisher(self, url, namespace=''): fake_drivers = {'test://': test_publisher.TestPublisher, 'new://': test_publisher.TestPublisher, 'except://': self.PublisherClassException} return fake_drivers[url](url) class PublisherClassException(publisher.PublisherBase): def publish_samples(self, ctxt, counters): raise Exception() class TransformerClass(transformer.TransformerBase): samples = [] def __init__(self, append_name='_update'): self.__class__.samples = [] self.append_name = append_name def flush(self, ctxt): return [] def handle_sample(self, ctxt, counter): self.__class__.samples.append(counter) newname = getattr(counter, 'name') + self.append_name return sample.Sample( name=newname, type=counter.type, volume=counter.volume, unit=counter.unit, user_id=counter.user_id, project_id=counter.project_id, resource_id=counter.resource_id, timestamp=counter.timestamp, resource_metadata=counter.resource_metadata, ) class TransformerClassDrop(transformer.TransformerBase): samples = [] def __init__(self): self.__class__.samples = [] def handle_sample(self, ctxt, counter): self.__class__.samples.append(counter) class TransformerClassException(object): def handle_sample(self, ctxt, counter): raise Exception() def setUp(self): super(BasePipelineTestCase, self).setUp() self.test_counter = sample.Sample( name='a', type=sample.TYPE_GAUGE, volume=1, unit='B', user_id="test_user", project_id="test_proj", resource_id="test_resource", timestamp=timeutils.utcnow().isoformat(), resource_metadata={} ) self.useFixture(mockpatch.PatchObject( transformer.TransformerExtensionManager, "__init__", side_effect=self.fake_tem_init)) self.useFixture(mockpatch.PatchObject( transformer.TransformerExtensionManager, "get_ext", side_effect=self.fake_tem_get_ext)) self.useFixture(mockpatch.PatchObject( publisher, 'get_publisher', side_effect=self.get_publisher)) self.transformer_manager = transformer.TransformerExtensionManager() self._setup_pipeline_cfg() @abc.abstractmethod def _setup_pipeline_cfg(self): """Setup the appropriate form of pipeline config.""" @abc.abstractmethod def _augment_pipeline_cfg(self): """Augment the pipeline config with an additional element.""" @abc.abstractmethod def _break_pipeline_cfg(self): """Break the pipeline config with a malformed element.""" @abc.abstractmethod def _set_pipeline_cfg(self, field, value): """Set a field to a value in the pipeline config.""" @abc.abstractmethod def _extend_pipeline_cfg(self, field, value): """Extend an existing field in the pipeline config with a value.""" @abc.abstractmethod def _unset_pipeline_cfg(self, field): """Clear an existing field in the pipeline config.""" def _exception_create_pipelinemanager(self): self.assertRaises(pipeline.PipelineException, pipeline.PipelineManager, self.pipeline_cfg, self.transformer_manager) def test_no_counters(self): self._unset_pipeline_cfg('counters') self._exception_create_pipelinemanager() def test_no_transformers(self): self._unset_pipeline_cfg('transformers') self._exception_create_pipelinemanager() def test_no_name(self): self._unset_pipeline_cfg('name') self._exception_create_pipelinemanager() def test_no_interval(self): self._unset_pipeline_cfg('interval') self._exception_create_pipelinemanager() def test_no_publishers(self): self._unset_pipeline_cfg('publishers') self._exception_create_pipelinemanager() def test_invalid_resources(self): invalid_resource = {'invalid': 1} self._set_pipeline_cfg('resources', invalid_resource) self._exception_create_pipelinemanager() def test_check_counters_include_exclude_same(self): counter_cfg = ['a', '!a'] self._set_pipeline_cfg('counters', counter_cfg) self._exception_create_pipelinemanager() def test_check_counters_include_exclude(self): counter_cfg = ['a', '!b'] self._set_pipeline_cfg('counters', counter_cfg) self._exception_create_pipelinemanager() def test_check_counters_wildcard_included(self): counter_cfg = ['a', '*'] self._set_pipeline_cfg('counters', counter_cfg) self._exception_create_pipelinemanager() def test_check_publishers_invalid_publisher(self): publisher_cfg = ['test_invalid'] self._set_pipeline_cfg('publishers', publisher_cfg) def test_invalid_string_interval(self): self._set_pipeline_cfg('interval', 'string') self._exception_create_pipelinemanager() def test_check_transformer_invalid_transformer(self): transformer_cfg = [ {'name': "test_invalid", 'parameters': {}} ] self._set_pipeline_cfg('transformers', transformer_cfg) self._exception_create_pipelinemanager() def test_get_interval(self): pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] self.assertEqual(5, pipe.get_interval()) def test_publisher_transformer_invoked(self): pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, len(self.TransformerClass.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) self.assertEqual('a', getattr(self.TransformerClass.samples[0], "name")) def test_multiple_included_counters(self): counter_cfg = ['a', 'b'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.test_counter = sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, ) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.assertEqual(2, len(publisher.samples)) self.assertEqual(2, len(self.TransformerClass.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) self.assertEqual('b_update', getattr(publisher.samples[1], "name")) def test_counter_dont_match(self): counter_cfg = ['nomatch'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(publisher.samples)) self.assertEqual(0, publisher.calls) def test_wildcard_counter(self): counter_cfg = ['*'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, len(self.TransformerClass.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) def test_wildcard_excluded_counters(self): counter_cfg = ['*', '!a'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertFalse(pipeline_manager.pipelines[0].support_meter('a')) def test_wildcard_excluded_counters_not_excluded(self): counter_cfg = ['*', '!b'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, len(self.TransformerClass.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) def test_all_excluded_counters_not_excluded(self): counter_cfg = ['!b', '!c'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, len(self.TransformerClass.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) self.assertEqual('a', getattr(self.TransformerClass.samples[0], "name")) def test_all_excluded_counters_is_excluded(self): counter_cfg = ['!a', '!c'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertFalse(pipeline_manager.pipelines[0].support_meter('a')) self.assertTrue(pipeline_manager.pipelines[0].support_meter('b')) self.assertFalse(pipeline_manager.pipelines[0].support_meter('c')) def test_wildcard_and_excluded_wildcard_counters(self): counter_cfg = ['*', '!disk.*'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertFalse(pipeline_manager.pipelines[0]. support_meter('disk.read.bytes')) self.assertTrue(pipeline_manager.pipelines[0].support_meter('cpu')) def test_included_counter_and_wildcard_counters(self): counter_cfg = ['cpu', 'disk.*'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertTrue(pipeline_manager.pipelines[0]. support_meter('disk.read.bytes')) self.assertTrue(pipeline_manager.pipelines[0].support_meter('cpu')) self.assertFalse(pipeline_manager.pipelines[0]. support_meter('instance')) def test_excluded_counter_and_excluded_wildcard_counters(self): counter_cfg = ['!cpu', '!disk.*'] self._set_pipeline_cfg('counters', counter_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertFalse(pipeline_manager.pipelines[0]. support_meter('disk.read.bytes')) self.assertFalse(pipeline_manager.pipelines[0].support_meter('cpu')) self.assertTrue(pipeline_manager.pipelines[0]. support_meter('instance')) def test_multiple_pipeline(self): self._augment_pipeline_cfg() pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.test_counter = sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, ) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, publisher.calls) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) new_publisher = pipeline_manager.pipelines[1].publishers[0] self.assertEqual(1, len(new_publisher.samples)) self.assertEqual(1, new_publisher.calls) self.assertEqual('b_new', getattr(new_publisher.samples[0], "name")) self.assertEqual(2, len(self.TransformerClass.samples)) self.assertEqual('a', getattr(self.TransformerClass.samples[0], "name")) self.assertEqual('b', getattr(self.TransformerClass.samples[1], "name")) def test_multiple_pipeline_exception(self): self._break_pipeline_cfg() pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.test_counter = sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, ) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, publisher.calls) self.assertEqual(1, len(publisher.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], "name")) self.assertEqual(2, len(self.TransformerClass.samples)) self.assertEqual('a', getattr(self.TransformerClass.samples[0], "name")) self.assertEqual('b', getattr(self.TransformerClass.samples[1], "name")) def test_none_transformer_pipeline(self): self._set_pipeline_cfg('transformers', None) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, publisher.calls) self.assertEqual('a', getattr(publisher.samples[0], 'name')) def test_empty_transformer_pipeline(self): self._set_pipeline_cfg('transformers', []) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, publisher.calls) self.assertEqual('a', getattr(publisher.samples[0], 'name')) def test_multiple_transformer_same_class(self): transformer_cfg = [ { 'name': 'update', 'parameters': {} }, { 'name': 'update', 'parameters': {} }, ] self._set_pipeline_cfg('transformers', transformer_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, publisher.calls) self.assertEqual(1, len(publisher.samples)) self.assertEqual('a_update_update', getattr(publisher.samples[0], 'name')) self.assertEqual(2, len(self.TransformerClass.samples)) self.assertEqual('a', getattr(self.TransformerClass.samples[0], 'name')) self.assertEqual('a_update', getattr(self.TransformerClass.samples[1], 'name')) def test_multiple_transformer_same_class_different_parameter(self): transformer_cfg = [ { 'name': 'update', 'parameters': { "append_name": "_update", } }, { 'name': 'update', 'parameters': { "append_name": "_new", } }, ] self._set_pipeline_cfg('transformers', transformer_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.assertEqual(2, len(self.TransformerClass.samples)) self.assertEqual('a', getattr(self.TransformerClass.samples[0], 'name')) self.assertEqual('a_update', getattr(self.TransformerClass.samples[1], 'name')) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual('a_update_new', getattr(publisher.samples[0], 'name')) def test_multiple_transformer_drop_transformer(self): transformer_cfg = [ { 'name': 'update', 'parameters': { "append_name": "_update", } }, { 'name': 'drop', 'parameters': {} }, { 'name': 'update', 'parameters': { "append_name": "_new", } }, ] self._set_pipeline_cfg('transformers', transformer_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(publisher.samples)) self.assertEqual(1, len(self.TransformerClass.samples)) self.assertEqual('a', getattr(self.TransformerClass.samples[0], 'name')) self.assertEqual(1, len(self.TransformerClassDrop.samples)) self.assertEqual('a_update', getattr(self.TransformerClassDrop.samples[0], 'name')) def test_multiple_publisher(self): self._set_pipeline_cfg('publishers', ['test://', 'new://']) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] new_publisher = pipeline_manager.pipelines[0].publishers[1] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, len(new_publisher.samples)) self.assertEqual('a_update', getattr(new_publisher.samples[0], 'name')) self.assertEqual('a_update', getattr(publisher.samples[0], 'name')) def test_multiple_publisher_isolation(self): self._set_pipeline_cfg('publishers', ['except://', 'new://']) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter]) new_publisher = pipeline_manager.pipelines[0].publishers[1] self.assertEqual(1, len(new_publisher.samples)) self.assertEqual('a_update', getattr(new_publisher.samples[0], 'name')) def test_multiple_counter_pipeline(self): self._set_pipeline_cfg('counters', ['a', 'b']) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter, sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, )]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(2, len(publisher.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], 'name')) self.assertEqual('b_update', getattr(publisher.samples[1], 'name')) def test_flush_pipeline_cache(self): CACHE_SIZE = 10 extra_transformer_cfg = [ { 'name': 'cache', 'parameters': { 'size': CACHE_SIZE, } }, { 'name': 'update', 'parameters': { 'append_name': '_new' } }, ] self._extend_pipeline_cfg('transformers', extra_transformer_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] pipe.publish_sample(None, self.test_counter) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(publisher.samples)) pipe.flush(None) self.assertEqual(0, len(publisher.samples)) pipe.publish_sample(None, self.test_counter) pipe.flush(None) self.assertEqual(0, len(publisher.samples)) for i in range(CACHE_SIZE - 2): pipe.publish_sample(None, self.test_counter) pipe.flush(None) self.assertEqual(CACHE_SIZE, len(publisher.samples)) self.assertEqual('a_update_new', getattr(publisher.samples[0], 'name')) def test_flush_pipeline_cache_multiple_counter(self): CACHE_SIZE = 3 extra_transformer_cfg = [ { 'name': 'cache', 'parameters': { 'size': CACHE_SIZE } }, { 'name': 'update', 'parameters': { 'append_name': '_new' } }, ] self._extend_pipeline_cfg('transformers', extra_transformer_cfg) self._set_pipeline_cfg('counters', ['a', 'b']) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) with pipeline_manager.publisher(None) as p: p([self.test_counter, sample.Sample( name='b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, )]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(publisher.samples)) with pipeline_manager.publisher(None) as p: p([self.test_counter]) self.assertEqual(CACHE_SIZE, len(publisher.samples)) self.assertEqual('a_update_new', getattr(publisher.samples[0], 'name')) self.assertEqual('b_update_new', getattr(publisher.samples[1], 'name')) def test_flush_pipeline_cache_before_publisher(self): extra_transformer_cfg = [{ 'name': 'cache', 'parameters': {} }] self._extend_pipeline_cfg('transformers', extra_transformer_cfg) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] publisher = pipe.publishers[0] pipe.publish_sample(None, self.test_counter) self.assertEqual(0, len(publisher.samples)) pipe.flush(None) self.assertEqual(1, len(publisher.samples)) self.assertEqual('a_update', getattr(publisher.samples[0], 'name')) def test_variable_counter(self): self.pipeline_cfg = [{ 'name': "test_pipeline", 'interval': 5, 'counters': ['a:*'], 'transformers': [ {'name': "update", 'parameters': {}} ], 'publishers': ["test://"], }, ] pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.test_counter = sample.Sample( name='a:b', type=self.test_counter.type, volume=self.test_counter.volume, unit=self.test_counter.unit, user_id=self.test_counter.user_id, project_id=self.test_counter.project_id, resource_id=self.test_counter.resource_id, timestamp=self.test_counter.timestamp, resource_metadata=self.test_counter.resource_metadata, ) with pipeline_manager.publisher(None) as p: p([self.test_counter]) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) self.assertEqual(1, len(self.TransformerClass.samples)) self.assertEqual('a:b_update', getattr(publisher.samples[0], "name")) self.assertEqual('a:b', getattr(self.TransformerClass.samples[0], "name")) def test_global_unit_conversion(self): scale = 'volume / ((10**6) * 60)' transformer_cfg = [ { 'name': 'unit_conversion', 'parameters': { 'source': {}, 'target': {'name': 'cpu_mins', 'unit': 'min', 'scale': scale}, } }, ] self._set_pipeline_cfg('transformers', transformer_cfg) self._set_pipeline_cfg('counters', ['cpu']) counters = [ sample.Sample( name='cpu', type=sample.TYPE_CUMULATIVE, volume=1200000000, unit='ns', user_id='test_user', project_id='test_proj', resource_id='test_resource', timestamp=timeutils.utcnow().isoformat(), resource_metadata={} ), ] pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] pipe.publish_samples(None, counters) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(1, len(publisher.samples)) pipe.flush(None) self.assertEqual(1, len(publisher.samples)) cpu_mins = publisher.samples[-1] self.assertEqual('cpu_mins', getattr(cpu_mins, 'name')) self.assertEqual('min', getattr(cpu_mins, 'unit')) self.assertEqual(sample.TYPE_CUMULATIVE, getattr(cpu_mins, 'type')) self.assertEqual(20, getattr(cpu_mins, 'volume')) def test_unit_identified_source_unit_conversion(self): transformer_cfg = [ { 'name': 'unit_conversion', 'parameters': { 'source': {'unit': '°C'}, 'target': {'unit': '°F', 'scale': '(volume * 1.8) + 32'}, } }, ] self._set_pipeline_cfg('transformers', transformer_cfg) self._set_pipeline_cfg('counters', ['core_temperature', 'ambient_temperature']) counters = [ sample.Sample( name='core_temperature', type=sample.TYPE_GAUGE, volume=36.0, unit='°C', user_id='test_user', project_id='test_proj', resource_id='test_resource', timestamp=timeutils.utcnow().isoformat(), resource_metadata={} ), sample.Sample( name='ambient_temperature', type=sample.TYPE_GAUGE, volume=88.8, unit='°F', user_id='test_user', project_id='test_proj', resource_id='test_resource', timestamp=timeutils.utcnow().isoformat(), resource_metadata={} ), ] pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] pipe.publish_samples(None, counters) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(2, len(publisher.samples)) core_temp = publisher.samples[1] self.assertEqual('core_temperature', getattr(core_temp, 'name')) self.assertEqual('°F', getattr(core_temp, 'unit')) self.assertEqual(96.8, getattr(core_temp, 'volume')) amb_temp = publisher.samples[0] self.assertEqual('ambient_temperature', getattr(amb_temp, 'name')) self.assertEqual('°F', getattr(amb_temp, 'unit')) self.assertEqual(88.8, getattr(amb_temp, 'volume')) self.assertEqual(96.8, getattr(core_temp, 'volume')) def _do_test_rate_of_change_conversion(self, prev, curr, type, expected, offset=1, weight=None): s = "(resource_metadata.user_metadata.autoscaling_weight or 1.0)" \ "* (resource_metadata.non.existent or 1.0)" \ "* (100.0 / (10**9 * (resource_metadata.cpu_number or 1)))" transformer_cfg = [ { 'name': 'rate_of_change', 'parameters': { 'source': {}, 'target': {'name': 'cpu_util', 'unit': '%', 'type': sample.TYPE_GAUGE, 'scale': s}, } }, ] self._set_pipeline_cfg('transformers', transformer_cfg) self._set_pipeline_cfg('counters', ['cpu']) now = timeutils.utcnow() later = now + datetime.timedelta(minutes=offset) um = {'autoscaling_weight': weight} if weight else {} counters = [ sample.Sample( name='cpu', type=type, volume=prev, unit='ns', user_id='test_user', project_id='test_proj', resource_id='test_resource', timestamp=now.isoformat(), resource_metadata={'cpu_number': 4, 'user_metadata': um}, ), sample.Sample( name='cpu', type=type, volume=prev, unit='ns', user_id='test_user', project_id='test_proj', resource_id='test_resource2', timestamp=now.isoformat(), resource_metadata={'cpu_number': 2, 'user_metadata': um}, ), sample.Sample( name='cpu', type=type, volume=curr, unit='ns', user_id='test_user', project_id='test_proj', resource_id='test_resource', timestamp=later.isoformat(), resource_metadata={'cpu_number': 4, 'user_metadata': um}, ), sample.Sample( name='cpu', type=type, volume=curr, unit='ns', user_id='test_user', project_id='test_proj', resource_id='test_resource2', timestamp=later.isoformat(), resource_metadata={'cpu_number': 2, 'user_metadata': um}, ), ] pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] pipe.publish_samples(None, counters) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(2, len(publisher.samples)) pipe.flush(None) self.assertEqual(2, len(publisher.samples)) cpu_util = publisher.samples[0] self.assertEqual('cpu_util', getattr(cpu_util, 'name')) self.assertEqual('test_resource', getattr(cpu_util, 'resource_id')) self.assertEqual('%', getattr(cpu_util, 'unit')) self.assertEqual(sample.TYPE_GAUGE, getattr(cpu_util, 'type')) self.assertEqual(expected, getattr(cpu_util, 'volume')) cpu_util = publisher.samples[1] self.assertEqual('cpu_util', getattr(cpu_util, 'name')) self.assertEqual('test_resource2', getattr(cpu_util, 'resource_id')) self.assertEqual('%', getattr(cpu_util, 'unit')) self.assertEqual(sample.TYPE_GAUGE, getattr(cpu_util, 'type')) self.assertEqual(expected * 2, getattr(cpu_util, 'volume')) def test_rate_of_change_conversion(self): self._do_test_rate_of_change_conversion(120000000000, 180000000000, sample.TYPE_CUMULATIVE, 25.0) def test_rate_of_change_conversion_weight(self): self._do_test_rate_of_change_conversion(120000000000, 180000000000, sample.TYPE_CUMULATIVE, 27.5, weight=1.1) def test_rate_of_change_conversion_negative_cumulative_delta(self): self._do_test_rate_of_change_conversion(180000000000, 120000000000, sample.TYPE_CUMULATIVE, 50.0) def test_rate_of_change_conversion_negative_gauge_delta(self): self._do_test_rate_of_change_conversion(180000000000, 120000000000, sample.TYPE_GAUGE, -25.0) def test_rate_of_change_conversion_zero_delay(self): self._do_test_rate_of_change_conversion(120000000000, 120000000000, sample.TYPE_CUMULATIVE, 0.0, offset=0) def test_rate_of_change_no_predecessor(self): s = "100.0 / (10**9 * resource_metadata.get('cpu_number', 1))" transformer_cfg = [ { 'name': 'rate_of_change', 'parameters': { 'source': {}, 'target': {'name': 'cpu_util', 'unit': '%', 'type': sample.TYPE_GAUGE, 'scale': s} } }, ] self._set_pipeline_cfg('transformers', transformer_cfg) self._set_pipeline_cfg('counters', ['cpu']) now = timeutils.utcnow() counters = [ sample.Sample( name='cpu', type=sample.TYPE_CUMULATIVE, volume=120000000000, unit='ns', user_id='test_user', project_id='test_proj', resource_id='test_resource', timestamp=now.isoformat(), resource_metadata={'cpu_number': 4} ), ] pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] pipe.publish_samples(None, counters) publisher = pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(publisher.samples)) pipe.flush(None) self.assertEqual(0, len(publisher.samples)) def test_resources(self): resources = ['test1://', 'test2://'] self._set_pipeline_cfg('resources', resources) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertEqual(resources, pipeline_manager.pipelines[0].resources) def test_no_resources(self): pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) self.assertEqual(0, len(pipeline_manager.pipelines[0].resources)) def _do_test_rate_of_change_mapping(self, pipe, meters, units): now = timeutils.utcnow() base = 1000 offset = 7 rate = 42 later = now + datetime.timedelta(minutes=offset) counters = [] for v, ts in [(base, now.isoformat()), (base + (offset * 60 * rate), later.isoformat())]: for n, u, r in [(meters[0], units[0], 'resource1'), (meters[1], units[1], 'resource2')]: s = sample.Sample( name=n, type=sample.TYPE_CUMULATIVE, volume=v, unit=u, user_id='test_user', project_id='test_proj', resource_id=r, timestamp=ts, resource_metadata={}, ) counters.append(s) pipe.publish_samples(None, counters) publisher = pipe.publishers[0] self.assertEqual(2, len(publisher.samples)) pipe.flush(None) self.assertEqual(2, len(publisher.samples)) bps = publisher.samples[0] self.assertEqual('%s.rate' % meters[0], getattr(bps, 'name')) self.assertEqual('resource1', getattr(bps, 'resource_id')) self.assertEqual('%s/s' % units[0], getattr(bps, 'unit')) self.assertEqual(sample.TYPE_GAUGE, getattr(bps, 'type')) self.assertEqual(rate, getattr(bps, 'volume')) rps = publisher.samples[1] self.assertEqual('%s.rate' % meters[1], getattr(rps, 'name')) self.assertEqual('resource2', getattr(rps, 'resource_id')) self.assertEqual('%s/s' % units[1], getattr(rps, 'unit')) self.assertEqual(sample.TYPE_GAUGE, getattr(rps, 'type')) self.assertEqual(rate, getattr(rps, 'volume')) def test_rate_of_change_mapping(self): map_from = {'name': 'disk\\.(read|write)\\.(bytes|requests)', 'unit': '(B|request)'} map_to = {'name': 'disk.\\1.\\2.rate', 'unit': '\\1/s'} transformer_cfg = [ { 'name': 'rate_of_change', 'parameters': { 'source': { 'map_from': map_from }, 'target': { 'map_to': map_to, 'type': sample.TYPE_GAUGE }, }, }, ] self._set_pipeline_cfg('transformers', transformer_cfg) self._set_pipeline_cfg('counters', ['disk.read.bytes', 'disk.write.requests']) pipeline_manager = pipeline.PipelineManager(self.pipeline_cfg, self.transformer_manager) pipe = pipeline_manager.pipelines[0] meters = ('disk.read.bytes', 'disk.write.requests') units = ('B', 'request') self._do_test_rate_of_change_mapping(pipe, meters, units) ceilometer-2014.1/ceilometer/tests/central/0000775000175300017540000000000012323717426022017 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/central/test_manager.py0000664000175300017540000000410212323717130025027 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp. # # Author: Lianhao Lu # # 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. """Tests for ceilometer/central/manager.py """ import mock from ceilometer.central import manager from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import test from ceilometer.tests import agentbase class TestManager(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def test_load_plugins(self): mgr = manager.AgentManager() self.assertIsNotNone(list(mgr.pollster_manager)) class TestRunTasks(agentbase.BaseAgentManagerTestCase): @staticmethod def create_manager(): return manager.AgentManager() def setUp(self): self.source_resources = True super(TestRunTasks, self).setUp() self.useFixture(mockpatch.Patch( 'keystoneclient.v2_0.client.Client', return_value=None)) def test_get_sample_resources(self): polling_tasks = self.mgr.setup_polling_tasks() self.mgr.interval_task(polling_tasks.values()[0]) self.assertTrue(self.Pollster.resources) def test_skip_task_when_keystone_fail(self): """Test for https://bugs.launchpad.net/ceilometer/+bug/1287613.""" self.useFixture(mockpatch.Patch( 'keystoneclient.v2_0.client.Client', side_effect=Exception)) polling_tasks = self.mgr.setup_polling_tasks() self.mgr.interval_task(polling_tasks.values()[0]) self.assertFalse(self.Pollster.samples) ceilometer-2014.1/ceilometer/tests/central/__init__.py0000664000175300017540000000000012323717130024106 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/energy/0000775000175300017540000000000012323717426021660 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/energy/test_kwapi.py0000664000175300017540000001462412323717130024403 0ustar jenkinsjenkins00000000000000# -*- coding: utf-8 -*- # # Author: François Rossigneux # # 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 datetime from keystoneclient import exceptions import mock from ceilometer.central import manager from ceilometer.energy import kwapi from ceilometer.openstack.common import context from ceilometer.openstack.common.fixture.mockpatch import PatchObject from ceilometer.openstack.common import test PROBE_DICT = { "probes": { "A": { "timestamp": 1357730232.68754, "w": 107.3, "kwh": 0.001058255421506034 }, "B": { "timestamp": 1357730232.048158, "w": 15.0, "kwh": 0.029019045026169896 }, "C": { "timestamp": 1357730232.223375, "w": 95.0, "kwh": 0.17361822634312918 } } } class TestManager(manager.AgentManager): def __init__(self): super(TestManager, self).__init__() self.keystone = None class TestKwapi(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestKwapi, self).setUp() self.context = context.get_admin_context() self.manager = TestManager() @staticmethod def fake_get_kwapi_client(ksclient): raise exceptions.EndpointNotFound("fake keystone exception") def test_endpoint_not_exist(self): with PatchObject(kwapi._Base, 'get_kwapi_client', side_effect=self.fake_get_kwapi_client): pollster = kwapi.EnergyPollster() samples = list(pollster.get_samples(self.manager, {})) self.assertEqual(0, len(samples)) class TestEnergyPollster(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestEnergyPollster, self).setUp() self.context = context.get_admin_context() self.manager = TestManager() self.useFixture(PatchObject(kwapi._Base, '_iter_probes', side_effect=self.fake_iter_probes)) @staticmethod def fake_iter_probes(ksclient, cache): probes = PROBE_DICT['probes'] for key, value in probes.iteritems(): probe_dict = value probe_dict['id'] = key yield probe_dict def test_sample(self): cache = {} samples = list(kwapi.EnergyPollster().get_samples( self.manager, cache, )) self.assertEqual(3, len(samples)) samples_by_name = dict((s.resource_id, s) for s in samples) for name, probe in PROBE_DICT['probes'].items(): sample = samples_by_name[name] expected = datetime.datetime.fromtimestamp( probe['timestamp'] ).isoformat() self.assertEqual(expected, sample.timestamp) self.assertEqual(probe['kwh'], sample.volume) # self.assert_( # any(map(lambda sample: sample.volume == probe['w'], # power_samples))) class TestEnergyPollsterCache(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestEnergyPollsterCache, self).setUp() self.context = context.get_admin_context() self.manager = TestManager() def test_get_samples_cached(self): probe = {'id': 'A'} probe.update(PROBE_DICT['probes']['A']) cache = { kwapi.EnergyPollster.CACHE_KEY_PROBE: [probe], } self.manager.keystone = mock.Mock() pollster = kwapi.EnergyPollster() with mock.patch.object(pollster, '_get_probes') as do_not_call: do_not_call.side_effect = AssertionError('should not be called') samples = list(pollster.get_samples(self.manager, cache)) self.assertEqual(1, len(samples)) class TestPowerPollster(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestPowerPollster, self).setUp() self.context = context.get_admin_context() self.manager = TestManager() self.useFixture(PatchObject(kwapi._Base, '_iter_probes', side_effect=self.fake_iter_probes)) @staticmethod def fake_iter_probes(ksclient, cache): probes = PROBE_DICT['probes'] for key, value in probes.iteritems(): probe_dict = value probe_dict['id'] = key yield probe_dict def test_sample(self): cache = {} samples = list(kwapi.PowerPollster().get_samples( self.manager, cache, )) self.assertEqual(3, len(samples)) samples_by_name = dict((s.resource_id, s) for s in samples) for name, probe in PROBE_DICT['probes'].items(): sample = samples_by_name[name] expected = datetime.datetime.fromtimestamp( probe['timestamp'] ).isoformat() self.assertEqual(expected, sample.timestamp) self.assertEqual(probe['w'], sample.volume) class TestPowerPollsterCache(test.BaseTestCase): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def setUp(self): super(TestPowerPollsterCache, self).setUp() self.context = context.get_admin_context() self.manager = TestManager() def test_get_samples_cached(self): probe = {'id': 'A'} probe.update(PROBE_DICT['probes']['A']) cache = { kwapi.PowerPollster.CACHE_KEY_PROBE: [probe], } self.manager.keystone = mock.Mock() pollster = kwapi.PowerPollster() with mock.patch.object(pollster, '_get_probes') as do_not_call: do_not_call.side_effect = AssertionError('should not be called') samples = list(pollster.get_samples(self.manager, cache)) self.assertEqual(1, len(samples)) ceilometer-2014.1/ceilometer/tests/energy/__init__.py0000664000175300017540000000000012323717130023747 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/dispatcher/0000775000175300017540000000000012323717426022515 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/dispatcher/test_file.py0000664000175300017540000000726212323717130025044 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 IBM Corp # # Author: Tong Li # # 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 logging.handlers import os import tempfile from ceilometer.dispatcher import file from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test from ceilometer.publisher import utils class TestDispatcherFile(test.BaseTestCase): def setUp(self): super(TestDispatcherFile, self).setUp() self.CONF = self.useFixture(config.Config()).conf def test_file_dispatcher_with_all_config(self): # Create a temporaryFile to get a file name tf = tempfile.NamedTemporaryFile('r') filename = tf.name tf.close() self.CONF.dispatcher_file.file_path = filename self.CONF.dispatcher_file.max_bytes = 50 self.CONF.dispatcher_file.backup_count = 5 dispatcher = file.FileDispatcher(self.CONF) # The number of the handlers should be 1 self.assertEqual(1, len(dispatcher.log.handlers)) # The handler should be RotatingFileHandler handler = dispatcher.log.handlers[0] self.assertIsInstance(handler, logging.handlers.RotatingFileHandler) msg = {'counter_name': 'test', 'resource_id': self.id(), 'counter_volume': 1, } msg['message_signature'] = utils.compute_signature( msg, self.CONF.publisher.metering_secret, ) # The record_metering_data method should exist and not produce errors. dispatcher.record_metering_data(msg) # After the method call above, the file should have been created. self.assertTrue(os.path.exists(handler.baseFilename)) def test_file_dispatcher_with_path_only(self): # Create a temporaryFile to get a file name tf = tempfile.NamedTemporaryFile('r') filename = tf.name tf.close() self.CONF.dispatcher_file.file_path = filename self.CONF.dispatcher_file.max_bytes = None self.CONF.dispatcher_file.backup_count = None dispatcher = file.FileDispatcher(self.CONF) # The number of the handlers should be 1 self.assertEqual(1, len(dispatcher.log.handlers)) # The handler should be RotatingFileHandler handler = dispatcher.log.handlers[0] self.assertIsInstance(handler, logging.FileHandler) msg = {'counter_name': 'test', 'resource_id': self.id(), 'counter_volume': 1, } msg['message_signature'] = utils.compute_signature( msg, self.CONF.publisher.metering_secret, ) # The record_metering_data method should exist and not produce errors. dispatcher.record_metering_data(msg) # After the method call above, the file should have been created. self.assertTrue(os.path.exists(handler.baseFilename)) def test_file_dispatcher_with_no_path(self): self.CONF.dispatcher_file.file_path = None dispatcher = file.FileDispatcher(self.CONF) # The log should be None self.assertIsNone(dispatcher.log) ceilometer-2014.1/ceilometer/tests/dispatcher/test_db.py0000664000175300017540000000733712323717132024517 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 IBM Corp # # Author: Tong Li # # 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 datetime import mock from ceilometer.dispatcher import database from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import test from ceilometer.publisher import utils class TestDispatcherDB(test.BaseTestCase): def setUp(self): super(TestDispatcherDB, self).setUp() self.CONF = self.useFixture(config.Config()).conf self.dispatcher = database.DatabaseDispatcher(self.CONF) self.ctx = None def test_valid_message(self): msg = {'counter_name': 'test', 'resource_id': self.id(), 'counter_volume': 1, } msg['message_signature'] = utils.compute_signature( msg, self.CONF.publisher.metering_secret, ) with mock.patch.object(self.dispatcher.storage_conn, 'record_metering_data') as record_metering_data: self.dispatcher.record_metering_data(msg) record_metering_data.assert_called_once_with(msg) def test_invalid_message(self): msg = {'counter_name': 'test', 'resource_id': self.id(), 'counter_volume': 1, } msg['message_signature'] = 'invalid-signature' class ErrorConnection: called = False def record_metering_data(self, data): self.called = True self.dispatcher.storage_conn = ErrorConnection() self.dispatcher.record_metering_data(msg) assert not self.dispatcher.storage_conn.called, \ 'Should not have called the storage connection' def test_timestamp_conversion(self): msg = {'counter_name': 'test', 'resource_id': self.id(), 'counter_volume': 1, 'timestamp': '2012-07-02T13:53:40Z', } msg['message_signature'] = utils.compute_signature( msg, self.CONF.publisher.metering_secret, ) expected = msg.copy() expected['timestamp'] = datetime.datetime(2012, 7, 2, 13, 53, 40) with mock.patch.object(self.dispatcher.storage_conn, 'record_metering_data') as record_metering_data: self.dispatcher.record_metering_data(msg) record_metering_data.assert_called_once_with(expected) def test_timestamp_tzinfo_conversion(self): msg = {'counter_name': 'test', 'resource_id': self.id(), 'counter_volume': 1, 'timestamp': '2012-09-30T15:31:50.262-08:00', } msg['message_signature'] = utils.compute_signature( msg, self.CONF.publisher.metering_secret, ) expected = msg.copy() expected['timestamp'] = datetime.datetime(2012, 9, 30, 23, 31, 50, 262000) with mock.patch.object(self.dispatcher.storage_conn, 'record_metering_data') as record_metering_data: self.dispatcher.record_metering_data(msg) record_metering_data.assert_called_once_with(expected) ceilometer-2014.1/ceilometer/tests/dispatcher/__init__.py0000664000175300017540000000000012323717130024604 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/0000775000175300017540000000000012323717426022164 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/__init__.py0000664000175300017540000000000012323717130024253 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/inspector/0000775000175300017540000000000012323717426024172 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/inspector/test_snmp.py0000664000175300017540000002151112323717130026550 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp # # Authors: Lianhao Lu # # 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. """Tests for ceilometer/hardware/inspector/snmp/inspector.py """ from ceilometer.hardware.inspector import snmp from ceilometer.openstack.common.fixture import mockpatch from ceilometer.openstack.common import network_utils from ceilometer.tests import base as test_base from ceilometer.tests.hardware.inspector import base Base = base.InspectorBaseTest class FakeMac(object): def __init__(self): self.val = "0x%s" % Base.network[0][0].mac def prettyPrint(self): return str(self.val) ins = snmp.SNMPInspector GETCMD_MAP = { ins._cpu_1_min_load_oid: (None, None, 0, [('', Base.cpu[0].cpu_1_min, )], ), ins._cpu_5_min_load_oid: (None, None, 0, [('', Base.cpu[0].cpu_5_min, )], ), ins._cpu_15_min_load_oid: (None, None, 0, [('', Base.cpu[0].cpu_15_min, )], ), ins._memory_total_oid: (None, None, 0, [('', Base.memory[0].total, )], ), ins._memory_used_oid: (None, None, 0, [('', Base.memory[0].used, )], ), ins._disk_path_oid + '.1': (None, None, 0, [('', Base.diskspace[0][0].path, )], ), ins._disk_device_oid + '.1': (None, None, 0, [('', Base.diskspace[0][0].device, )], ), ins._disk_size_oid + '.1': (None, None, 0, [('', Base.diskspace[0][1].size, )], ), ins._disk_used_oid + '.1': (None, None, 0, [('', Base.diskspace[0][1].used, )], ), ins._disk_path_oid + '.2': (None, None, 0, [('', Base.diskspace[1][0].path, )], ), ins._disk_device_oid + '.2': (None, None, 0, [('', Base.diskspace[1][0].device, )], ), ins._disk_size_oid + '.2': (None, None, 0, [('', Base.diskspace[1][1].size, )], ), ins._disk_used_oid + '.2': (None, None, 0, [('', Base.diskspace[1][1].used, )], ), ins._interface_name_oid + '.1': (None, None, 0, [('', Base.network[0][0].name, )], ), ins._interface_mac_oid + '.1': (None, None, 0, [('', FakeMac(), )], ), ins._interface_bandwidth_oid + '.1': (None, None, 0, [('', Base.network[0][1].bandwidth * 8, )], ), ins._interface_received_oid + '.1': (None, None, 0, [('', Base.network[0][1].rx_bytes, )], ), ins._interface_transmitted_oid + '.1': (None, None, 0, [('', Base.network[0][1].tx_bytes, )], ), ins._interface_error_oid + '.1': (None, None, 0, [('', Base.network[0][1].error, )], ), } NEXTCMD_MAP = { ins._disk_index_oid: (None, None, 0, [[('1.3.6.1.4.1.2021.9.1.1.1', 1)], [('1.3.6.1.4.1.2021.9.1.1.2', 2)]]), ins._interface_index_oid: (None, None, 0, [[('1.3.6.1.2.1.2.2.1.1.1', 1)], ]), ins._interface_ip_oid: (None, None, 0, [[('1.3.6.1.2.1.4.20.1.2.10.0.0.1', 1)], ]), } def faux_getCmd(authData, transportTarget, oid): try: return GETCMD_MAP[oid] except KeyError: return ("faux_getCmd Error", None, 0, []) def faux_nextCmd(authData, transportTarget, oid): try: return NEXTCMD_MAP[oid] except KeyError: return ("faux_nextCmd Error", None, 0, []) class TestSNMPInspector(Base, test_base.BaseTestCase): def setUp(self): super(TestSNMPInspector, self).setUp() self.inspector = snmp.SNMPInspector() self.host = network_utils.urlsplit("snmp://localhost") self.useFixture(mockpatch.PatchObject( self.inspector._cmdGen, 'getCmd', new=faux_getCmd)) self.useFixture(mockpatch.PatchObject( self.inspector._cmdGen, 'nextCmd', new=faux_nextCmd)) def test_get_security_name(self): self.assertEqual(self.inspector._get_security_name(self.host), self.inspector._security_name) host2 = network_utils.urlsplit("snmp://foo:80?security_name=fake") self.assertEqual(self.inspector._get_security_name(host2), 'fake') def test_get_cmd_error(self): self.useFixture(mockpatch.PatchObject( self.inspector, '_memory_total_oid', new='failure')) def get_list(func, *args, **kwargs): return list(func(*args, **kwargs)) self.assertRaises(snmp.SNMPException, get_list, self.inspector.inspect_memory, self.host) ceilometer-2014.1/ceilometer/tests/hardware/inspector/__init__.py0000664000175300017540000000000012323717130026261 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/inspector/test_inspector.py0000664000175300017540000000227212323717130027604 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2014 Intel Corp # # Authors: Lianhao Lu # # 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. from ceilometer.hardware import inspector from ceilometer.openstack.common import network_utils from ceilometer.tests import base class TestHardwareInspector(base.BaseTestCase): def test_get_inspector(self): url = network_utils.urlsplit("snmp://") driver = inspector.get_inspector(url) self.assertTrue(driver) def test_get_inspector_illegal(self): url = network_utils.urlsplit("illegal://") self.assertRaises(RuntimeError, inspector.get_inspector, url) ceilometer-2014.1/ceilometer/tests/hardware/inspector/base.py0000664000175300017540000000431312323717130025447 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2014 Intel Corp # # Authors: Lianhao Lu # # 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. from ceilometer.hardware.inspector import base class InspectorBaseTest(object): """Subclass must set self.inspector and self.host in self.setUp() """ cpu = [base.CPUStats(cpu_1_min=0.1, cpu_5_min=0.2, cpu_15_min=0.3), ] network = [(base.Interface(name='eth0', mac='112233445566', ip='10.0.0.1'), base.InterfaceStats(bandwidth=1250000 / 8, rx_bytes=1000, tx_bytes=2000, error=1)), ] diskspace = [(base.Disk(device='/dev/sda1', path='/'), base.DiskStats(size=1000, used=500), ), (base.Disk(device='/dev/sda2', path='/home'), base.DiskStats(size=2000, used=1000), ), ] memory = [base.MemoryStats(total=1000, used=500)] def test_inspect_cpu(self): self.assertEqual(list(self.inspector.inspect_cpu(self.host)), self.cpu) def test_inspect_network(self): self.assertEqual(list(self.inspector.inspect_network(self.host)), self.network) def test_inspect_disk(self): self.assertEqual(list(self.inspector.inspect_disk(self.host)), self.diskspace) def test_inspect_memory(self): self.assertEqual(list(self.inspector.inspect_memory(self.host)), self.memory) ceilometer-2014.1/ceilometer/tests/hardware/pollsters/0000775000175300017540000000000012323717426024213 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/pollsters/test_cpu.py0000664000175300017540000000307712323717130026412 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp # # Authors: Lianhao Lu # # 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. from ceilometer.hardware.pollsters import cpu from ceilometer import sample from ceilometer.tests.hardware.pollsters import base class TestCPUPollsters(base.TestPollsterBase): def test_1min(self): self._check_get_samples(cpu.CPULoad1MinPollster, 'hardware.cpu.load.1min', 0.99, sample.TYPE_GAUGE, expected_unit='process') def test_5min(self): self._check_get_samples(cpu.CPULoad5MinPollster, 'hardware.cpu.load.5min', 0.77, sample.TYPE_GAUGE, expected_unit='process') def test_15min(self): self._check_get_samples(cpu.CPULoad15MinPollster, 'hardware.cpu.load.15min', 0.55, sample.TYPE_GAUGE, expected_unit='process') ceilometer-2014.1/ceilometer/tests/hardware/pollsters/test_net.py0000664000175300017540000000324212323717130026403 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp # # Authors: Lianhao Lu # # 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. from ceilometer.hardware.pollsters import net from ceilometer import sample from ceilometer.tests.hardware.pollsters import base class TestNetPollsters(base.TestPollsterBase): def test_bandwidth(self): self._check_get_samples(net.BandwidthBytesPollster, 'hardware.network.bandwidth.bytes', 1000, sample.TYPE_CUMULATIVE) def test_incoming(self): self._check_get_samples(net.IncomingBytesPollster, 'hardware.network.incoming.bytes', 90, sample.TYPE_CUMULATIVE) def test_outgoing(self): self._check_get_samples(net.OutgoingBytesPollster, 'hardware.network.outgoing.bytes', 80, sample.TYPE_CUMULATIVE) def test_error(self): self._check_get_samples(net.OutgoingErrorsPollster, 'hardware.network.outgoing.errors', 1, sample.TYPE_CUMULATIVE) ceilometer-2014.1/ceilometer/tests/hardware/pollsters/test_memory.py0000664000175300017540000000235212323717130027126 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp # # Authors: Lianhao Lu # # 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. from ceilometer.hardware.pollsters import memory from ceilometer import sample from ceilometer.tests.hardware.pollsters import base class TestMemoryPollsters(base.TestPollsterBase): def test_memory_size_total(self): self._check_get_samples(memory.MemoryTotalPollster, 'hardware.memory.total', 1000, sample.TYPE_GAUGE) def test_memory_size_used(self): self._check_get_samples(memory.MemoryUsedPollster, 'hardware.memory.used', 90, sample.TYPE_GAUGE) ceilometer-2014.1/ceilometer/tests/hardware/pollsters/__init__.py0000664000175300017540000000000012323717130026302 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/hardware/pollsters/base.py0000664000175300017540000000604112323717130025470 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp # # Authors: Lianhao Lu # # 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 fixtures import mock from ceilometer.central import manager from ceilometer.hardware.inspector import base as inspector_base from ceilometer.tests import base as test_base class FakeInspector(inspector_base.Inspector): CPU = inspector_base.CPUStats(cpu_1_min=0.99, cpu_5_min=0.77, cpu_15_min=0.55) DISK = (inspector_base.Disk(device='/dev/sda1', path='/'), inspector_base.DiskStats(size=1000, used=90)) MEMORY = inspector_base.MemoryStats(total=1000, used=90) NET = (inspector_base.Interface(name='test.teest', mac='001122334455', ip='10.0.0.2'), inspector_base.InterfaceStats(bandwidth=1000, rx_bytes=90, tx_bytes=80, error=1)) def inspect_cpu(self, host): yield self.CPU def inspect_disk(self, host): yield self.DISK def inspect_memory(self, host): yield self.MEMORY def inspect_network(self, host): yield self.NET class TestPollsterBase(test_base.BaseTestCase): def faux_get_inspector(url, namespace=None): return FakeInspector() def setUp(self): super(TestPollsterBase, self).setUp() self.hosts = ["test://test", "test://test2"] self.useFixture(fixtures.MonkeyPatch( 'ceilometer.hardware.inspector.get_inspector', self.faux_get_inspector)) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, name, expected_value, expected_type, expected_unit=None): mgr = manager.AgentManager() pollster = factory() cache = {} samples = list(pollster.get_samples(mgr, cache, self.hosts)) self.assertTrue(samples) self.assertIn(pollster.CACHE_KEY, cache) for host in self.hosts: self.assertIn(host, cache[pollster.CACHE_KEY]) self.assertEqual(set([name]), set([s.name for s in samples])) match = [s for s in samples if s.name == name] self.assertEqual(expected_value, match[0].volume) self.assertEqual(expected_type, match[0].type) if expected_unit: self.assertEqual(expected_unit, match[0].unit) ceilometer-2014.1/ceilometer/tests/hardware/pollsters/test_disk.py0000664000175300017540000000234012323717130026545 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp # # Authors: Lianhao Lu # # 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. from ceilometer.hardware.pollsters import disk from ceilometer import sample from ceilometer.tests.hardware.pollsters import base class TestDiskPollsters(base.TestPollsterBase): def test_disk_size_total(self): self._check_get_samples(disk.DiskTotalPollster, 'hardware.disk.size.total', 1000, sample.TYPE_GAUGE) def test_disk_size_used(self): self._check_get_samples(disk.DiskUsedPollster, 'hardware.disk.size.used', 90, sample.TYPE_GAUGE) ceilometer-2014.1/ceilometer/tests/test_notifier.py0000664000175300017540000000657612323717130023625 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. """Tests for ceilometer/notifier.py """ from ceilometer import notifier from ceilometer.openstack.common import test from ceilometer import pipeline from ceilometer import transformer MESSAGE = { u'event_type': u'compute.instance.create.end', u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451', u'payload': {u'created_at': u'2012-05-08 20:23:41', u'deleted_at': u'', u'disk_gb': 0, u'display_name': u'testme', u'fixed_ips': [{u'address': u'10.0.0.2', u'floating_ips': [], u'meta': {}, u'type': u'fixed', u'version': 4}], u'image_ref_url': u'http://10.0.2.15:9292/images/UUID', u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1', u'instance_type': u'm1.tiny', u'instance_type_id': 2, u'launched_at': u'2012-05-08 20:23:47.985999', u'memory_mb': 512, u'state': u'active', u'state_description': u'', u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e', u'user_id': u'1e3ce043029547f1a61c1996d1a531a2', u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3', u'vcpus': 1, u'root_gb': 0, u'ephemeral_gb': 0, u'host': u'compute-host-name', u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4', u'os_type': u'linux?', u'architecture': u'x86', u'image_ref': u'UUID', u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5', u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6', }, u'priority': u'INFO', u'publisher_id': u'compute.vagrant-precise', u'timestamp': u'2012-05-08 20:23:48.028195', } class TestNotifier(test.BaseTestCase): def test_process_notification(self): transformer_manager = transformer.TransformerExtensionManager( 'ceilometer.transformer', ) notifier._pipeline_manager = pipeline.PipelineManager( [{ 'name': "test_pipeline", 'interval': 60, 'counters': ['*'], 'transformers': [], 'publishers': ["test"], }], transformer_manager) pub = notifier._pipeline_manager.pipelines[0].publishers[0] self.assertEqual(0, len(pub.samples)) notifier.notify(None, MESSAGE) self.assertTrue(len(pub.samples) > 0) self.assertIn('disk.ephemeral.size', [c.name for c in pub.samples]) ceilometer-2014.1/ceilometer/tests/storage/0000775000175300017540000000000012323717426022033 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/storage/test_get_engine.py0000664000175300017540000000255312323717132025547 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Tests for ceilometer/storage/ """ import mock from ceilometer.openstack.common import test from ceilometer import storage from ceilometer.storage import impl_log class EngineTest(test.BaseTestCase): def test_get_engine(self): conf = mock.Mock() conf.database.connection = 'log://localhost' engine = storage.get_engine(conf) self.assertIsInstance(engine, impl_log.LogStorage) def test_get_engine_no_such_engine(self): conf = mock.Mock() conf.database.connection = 'no-such-engine://localhost' try: storage.get_engine(conf) except RuntimeError as err: self.assertIn('no-such-engine', unicode(err)) ceilometer-2014.1/ceilometer/tests/storage/test_base.py0000664000175300017540000000455612323717130024360 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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 datetime import math from ceilometer.openstack.common import test from ceilometer.storage import base class BaseTest(test.BaseTestCase): def test_iter_period(self): times = list(base.iter_period( datetime.datetime(2013, 1, 1, 12, 0), datetime.datetime(2013, 1, 1, 13, 0), 60)) self.assertEqual(60, len(times)) self.assertEqual((datetime.datetime(2013, 1, 1, 12, 10), datetime.datetime(2013, 1, 1, 12, 11)), times[10]) self.assertEqual((datetime.datetime(2013, 1, 1, 12, 21), datetime.datetime(2013, 1, 1, 12, 22)), times[21]) def test_iter_period_bis(self): times = list(base.iter_period( datetime.datetime(2013, 1, 2, 13, 0), datetime.datetime(2013, 1, 2, 14, 0), 55)) self.assertEqual(math.ceil(3600 / 55.0), len(times)) self.assertEqual((datetime.datetime(2013, 1, 2, 13, 9, 10), datetime.datetime(2013, 1, 2, 13, 10, 5)), times[10]) self.assertEqual((datetime.datetime(2013, 1, 2, 13, 19, 15), datetime.datetime(2013, 1, 2, 13, 20, 10)), times[21]) def test_handle_sort_key(self): sort_keys_alarm = base._handle_sort_key('alarm') self.assertEqual(['name', 'user_id', 'project_id'], sort_keys_alarm) sort_keys_meter = base._handle_sort_key('meter', 'foo') self.assertEqual(['foo', 'user_id', 'project_id'], sort_keys_meter) sort_keys_resource = base._handle_sort_key('resource', 'project_id') self.assertEqual(['project_id', 'user_id', 'timestamp'], sort_keys_resource) ceilometer-2014.1/ceilometer/tests/storage/test_impl_sqlalchemy.py0000664000175300017540000002524012323717132026624 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Author: John Tran # Julien Danjou # # 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. """Tests for ceilometer/storage/impl_sqlalchemy.py .. note:: In order to run the tests against real SQL server set the environment variable CEILOMETER_TEST_SQL_URL to point to a SQL server before running the tests. """ import datetime import repr from mock import patch from ceilometer.openstack.common.fixture import config from ceilometer.openstack.common import timeutils from ceilometer.storage import models from ceilometer.storage.sqlalchemy import models as sql_models from ceilometer.tests import base as tests_base from ceilometer.tests import db as tests_db from ceilometer.tests.storage import test_storage_scenarios as scenarios class EventTestBase(tests_db.TestBase): # Note: Do not derive from SQLAlchemyEngineTestBase, since we # don't want to automatically inherit all the Meter setup. database_connection = 'sqlite://' class CeilometerBaseTest(EventTestBase): def test_ceilometer_base(self): base = sql_models.CeilometerBase() base['key'] = 'value' self.assertEqual('value', base['key']) class TraitTypeTest(EventTestBase): # TraitType is a construct specific to sqlalchemy. # Not applicable to other drivers. def test_trait_type_exists(self): tt1 = self.conn._get_or_create_trait_type("foo", 0) self.assertTrue(tt1.id >= 0) tt2 = self.conn._get_or_create_trait_type("foo", 0) self.assertEqual(tt2.id, tt1.id) self.assertEqual(tt2.desc, tt1.desc) self.assertEqual(tt2.data_type, tt1.data_type) def test_new_trait_type(self): tt1 = self.conn._get_or_create_trait_type("foo", 0) self.assertTrue(tt1.id >= 0) tt2 = self.conn._get_or_create_trait_type("blah", 0) self.assertNotEqual(tt1.id, tt2.id) self.assertNotEqual(tt1.desc, tt2.desc) # Test the method __repr__ returns a string self.assertTrue(repr.repr(tt2)) def test_trait_different_data_type(self): tt1 = self.conn._get_or_create_trait_type("foo", 0) self.assertTrue(tt1.id >= 0) tt2 = self.conn._get_or_create_trait_type("foo", 1) self.assertNotEqual(tt1.id, tt2.id) self.assertEqual(tt2.desc, tt1.desc) self.assertNotEqual(tt1.data_type, tt2.data_type) # Test the method __repr__ returns a string self.assertTrue(repr.repr(tt2)) class EventTypeTest(EventTestBase): # EventType is a construct specific to sqlalchemy # Not applicable to other drivers. def test_event_type_exists(self): et1 = self.conn._get_or_create_event_type("foo") self.assertTrue(et1.id >= 0) et2 = self.conn._get_or_create_event_type("foo") self.assertEqual(et2.id, et1.id) self.assertEqual(et2.desc, et1.desc) def test_event_type_unique(self): et1 = self.conn._get_or_create_event_type("foo") self.assertTrue(et1.id >= 0) et2 = self.conn._get_or_create_event_type("blah") self.assertNotEqual(et1.id, et2.id) self.assertNotEqual(et1.desc, et2.desc) # Test the method __repr__ returns a string self.assertTrue(repr.repr(et2)) class MyException(Exception): pass class EventTest(EventTestBase): def test_string_traits(self): model = models.Trait("Foo", models.Trait.TEXT_TYPE, "my_text") trait = self.conn._make_trait(model, None) self.assertEqual(models.Trait.TEXT_TYPE, trait.trait_type.data_type) self.assertIsNone(trait.t_float) self.assertIsNone(trait.t_int) self.assertIsNone(trait.t_datetime) self.assertEqual("my_text", trait.t_string) self.assertIsNotNone(trait.trait_type.desc) def test_int_traits(self): model = models.Trait("Foo", models.Trait.INT_TYPE, 100) trait = self.conn._make_trait(model, None) self.assertEqual(models.Trait.INT_TYPE, trait.trait_type.data_type) self.assertIsNone(trait.t_float) self.assertIsNone(trait.t_string) self.assertIsNone(trait.t_datetime) self.assertEqual(100, trait.t_int) self.assertIsNotNone(trait.trait_type.desc) def test_float_traits(self): model = models.Trait("Foo", models.Trait.FLOAT_TYPE, 123.456) trait = self.conn._make_trait(model, None) self.assertEqual(models.Trait.FLOAT_TYPE, trait.trait_type.data_type) self.assertIsNone(trait.t_int) self.assertIsNone(trait.t_string) self.assertIsNone(trait.t_datetime) self.assertEqual(123.456, trait.t_float) self.assertIsNotNone(trait.trait_type.desc) def test_datetime_traits(self): now = datetime.datetime.utcnow() model = models.Trait("Foo", models.Trait.DATETIME_TYPE, now) trait = self.conn._make_trait(model, None) self.assertEqual(models.Trait.DATETIME_TYPE, trait.trait_type.data_type) self.assertIsNone(trait.t_int) self.assertIsNone(trait.t_string) self.assertIsNone(trait.t_float) self.assertEqual(now, trait.t_datetime) self.assertIsNotNone(trait.trait_type.desc) def test_bad_event(self): now = datetime.datetime.utcnow() m = [models.Event("1", "Foo", now, []), models.Event("2", "Zoo", now, [])] with patch.object(self.conn, "_record_event") as mock_save: mock_save.side_effect = MyException("Boom") problem_events = self.conn.record_events(m) self.assertEqual(2, len(problem_events)) for bad, event in problem_events: self.assertEqual(bad, models.Event.UNKNOWN_PROBLEM) def test_get_none_value_traits(self): model = sql_models.Trait(None, None, 5) self.assertIsNone(model.get_value()) self.assertTrue(repr.repr(model)) def test_event_repr(self): ev = sql_models.Event('msg_id', None, False) ev.id = 100 self.assertTrue(repr.repr(ev)) class ModelTest(tests_base.BaseTestCase): database_connection = 'mysql://localhost' def test_model_table_args(self): self.CONF = self.useFixture(config.Config()).conf self.CONF.set_override('connection', self.database_connection, group='database') self.assertIsNotNone(sql_models.table_args()) class RelationshipTest(scenarios.DBTestBase): # Note: Do not derive from SQLAlchemyEngineTestBase, since we # don't want to automatically inherit all the Meter setup. database_connection = 'sqlite://' def test_clear_metering_data_meta_tables(self): timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45) self.conn.clear_expired_metering_data(3 * 60) session = self.conn._get_db_session() meta_tables = [sql_models.MetaText, sql_models.MetaFloat, sql_models.MetaBigInt, sql_models.MetaBool] for table in meta_tables: self.assertEqual(0, session.query(table) .filter(~table.id.in_( session.query(sql_models.Sample.id) .group_by(sql_models.Sample.id) )).count()) def test_clear_metering_data_associations(self): timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45) self.conn.clear_expired_metering_data(3 * 60) session = self.conn._get_db_session() self.assertEqual(0, session.query(sql_models.sourceassoc) .filter(~sql_models.sourceassoc.c.sample_id.in_( session.query(sql_models.Sample.id) .group_by(sql_models.Sample.id) )).count()) self.assertEqual(0, session.query(sql_models.sourceassoc) .filter(~sql_models.sourceassoc.c.project_id.in_( session.query(sql_models.Project.id) .group_by(sql_models.Project.id) )).count()) self.assertEqual(0, session.query(sql_models.sourceassoc) .filter(~sql_models.sourceassoc.c.user_id.in_( session.query(sql_models.User.id) .group_by(sql_models.User.id) )).count()) class CapabilitiesTest(EventTestBase): # Check the returned capabilities list, which is specific to each DB # driver def test_capabilities(self): expected_capabilities = { 'meters': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'resources': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'samples': {'pagination': True, 'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': True}}, 'statistics': {'pagination': False, 'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, 'aggregation': {'standard': True, 'selectable': { 'max': True, 'min': True, 'sum': True, 'avg': True, 'count': True, 'stddev': True, 'cardinality': True}} }, 'alarms': {'query': {'simple': True, 'complex': True}, 'history': {'query': {'simple': True, 'complex': True}}}, 'events': {'query': {'simple': True}} } actual_capabilities = self.conn.get_capabilities() self.assertEqual(expected_capabilities, actual_capabilities) ceilometer-2014.1/ceilometer/tests/storage/test_storage_scenarios.py0000664000175300017540000040360112323717132027154 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp. # # Author: Lianhao Lu # Shane Wang # Julien Danjou # # 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. """ Base classes for DB backend implementation test """ import datetime import testscenarios from ceilometer.openstack.common import timeutils from ceilometer.publisher import utils from ceilometer import sample from ceilometer import storage from ceilometer.storage import base from ceilometer.storage import models from ceilometer.tests import db as tests_db load_tests = testscenarios.load_tests_apply_scenarios class DBTestBase(tests_db.TestBase): def create_and_store_sample(self, timestamp=datetime.datetime.utcnow(), metadata={ 'display_name': 'test-server', 'tag': 'self.counter' }, name='instance', sample_type=sample.TYPE_CUMULATIVE, unit='', volume=1, user_id='user-id', project_id='project-id', resource_id='resource-id', source=None): s = sample.Sample( name, sample_type, unit=unit, volume=volume, user_id=user_id, project_id=project_id, resource_id=resource_id, timestamp=timestamp, resource_metadata=metadata, source=source ) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret ) self.conn.record_metering_data(msg) return msg def setUp(self): super(DBTestBase, self).setUp() timeutils.set_time_override( datetime.datetime(2015, 7, 2, 10, 39)) self.prepare_data() def prepare_data(self): original_timestamps = [(2012, 7, 2, 10, 40), (2012, 7, 2, 10, 41), (2012, 7, 2, 10, 41), (2012, 7, 2, 10, 42), (2012, 7, 2, 10, 43)] timestamps_for_test_samples_default_order = [(2012, 7, 2, 10, 44), (2011, 5, 30, 18, 3), (2012, 12, 1, 1, 25), (2012, 2, 29, 6, 59), (2013, 5, 31, 23, 7)] timestamp_list = (original_timestamps + timestamps_for_test_samples_default_order) self.msgs = [] self.msgs.append(self.create_and_store_sample( timestamp=datetime.datetime(2012, 7, 2, 10, 39), source='test-1') ) self.msgs.append(self.create_and_store_sample( timestamp=datetime.datetime(*timestamp_list[0]), source='test-1') ) self.msgs.append(self.create_and_store_sample( timestamp=datetime.datetime(*timestamp_list[1]), resource_id='resource-id-alternate', metadata={'display_name': 'test-server', 'tag': 'self.counter2'}, source='test-2') ) self.msgs.append(self.create_and_store_sample( timestamp=datetime.datetime(*timestamp_list[2]), resource_id='resource-id-alternate', user_id='user-id-alternate', metadata={'display_name': 'test-server', 'tag': 'self.counter3'}, source='test-3') ) start_idx = 3 end_idx = len(timestamp_list) for i, ts in zip(range(start_idx - 1, end_idx - 1), timestamp_list[start_idx:end_idx]): self.msgs.append( self.create_and_store_sample( timestamp=datetime.datetime(*ts), user_id='user-id-%s' % i, project_id='project-id-%s' % i, resource_id='resource-id-%s' % i, metadata={ 'display_name': 'test-server', 'tag': 'counter-%s' % i }, source='test') ) class UserTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_users(self): users = self.conn.get_users() expected = set(['user-id', 'user-id-alternate', 'user-id-2', 'user-id-3', 'user-id-4', 'user-id-5', 'user-id-6', 'user-id-7', 'user-id-8']) self.assertEqual(set(users), expected) def test_get_users_by_source(self): users = self.conn.get_users(source='test-1') self.assertEqual(list(users), ['user-id']) class ProjectTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_projects(self): projects = self.conn.get_projects() expected = set(['project-id', 'project-id-2', 'project-id-3', 'project-id-4', 'project-id-5', 'project-id-6', 'project-id-7', 'project-id-8']) self.assertEqual(set(projects), expected) def test_get_projects_by_source(self): projects = self.conn.get_projects(source='test-1') expected = ['project-id'] self.assertEqual(list(projects), expected) class ResourceTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_resources(self): expected_first_sample_timestamp = datetime.datetime(2012, 7, 2, 10, 39) expected_last_sample_timestamp = datetime.datetime(2012, 7, 2, 10, 40) msgs_sources = [msg['source'] for msg in self.msgs] resources = list(self.conn.get_resources()) self.assertEqual(len(resources), 9) for resource in resources: if resource.resource_id != 'resource-id': continue self.assertEqual(resource.first_sample_timestamp, expected_first_sample_timestamp) self.assertEqual(resource.last_sample_timestamp, expected_last_sample_timestamp) self.assertEqual(resource.resource_id, 'resource-id') self.assertEqual(resource.project_id, 'project-id') self.assertIn(resource.source, msgs_sources) self.assertEqual(resource.user_id, 'user-id') self.assertEqual(resource.metadata['display_name'], 'test-server') break else: assert False, 'Never found resource-id' def test_get_resources_start_timestamp(self): timestamp = datetime.datetime(2012, 7, 2, 10, 42) expected = set(['resource-id-2', 'resource-id-3', 'resource-id-4', 'resource-id-6', 'resource-id-8']) resources = list(self.conn.get_resources(start_timestamp=timestamp)) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), expected) resources = list(self.conn.get_resources(start_timestamp=timestamp, start_timestamp_op='ge')) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), expected) resources = list(self.conn.get_resources(start_timestamp=timestamp, start_timestamp_op='gt')) resource_ids = [r.resource_id for r in resources] expected.remove('resource-id-2') self.assertEqual(set(resource_ids), expected) def test_get_resources_end_timestamp(self): timestamp = datetime.datetime(2012, 7, 2, 10, 42) expected = set(['resource-id', 'resource-id-alternate', 'resource-id-5', 'resource-id-7']) resources = list(self.conn.get_resources(end_timestamp=timestamp)) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), expected) resources = list(self.conn.get_resources(end_timestamp=timestamp, end_timestamp_op='lt')) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), expected) resources = list(self.conn.get_resources(end_timestamp=timestamp, end_timestamp_op='le')) resource_ids = [r.resource_id for r in resources] expected.add('resource-id-2') self.assertEqual(set(resource_ids), expected) def test_get_resources_both_timestamps(self): start_ts = datetime.datetime(2012, 7, 2, 10, 42) end_ts = datetime.datetime(2012, 7, 2, 10, 43) resources = list(self.conn.get_resources(start_timestamp=start_ts, end_timestamp=end_ts)) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), set(['resource-id-2'])) resources = list(self.conn.get_resources(start_timestamp=start_ts, end_timestamp=end_ts, start_timestamp_op='ge', end_timestamp_op='lt')) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), set(['resource-id-2'])) resources = list(self.conn.get_resources(start_timestamp=start_ts, end_timestamp=end_ts, start_timestamp_op='gt', end_timestamp_op='lt')) resource_ids = [r.resource_id for r in resources] self.assertEqual(len(resource_ids), 0) resources = list(self.conn.get_resources(start_timestamp=start_ts, end_timestamp=end_ts, start_timestamp_op='gt', end_timestamp_op='le')) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), set(['resource-id-3'])) resources = list(self.conn.get_resources(start_timestamp=start_ts, end_timestamp=end_ts, start_timestamp_op='ge', end_timestamp_op='le')) resource_ids = [r.resource_id for r in resources] self.assertEqual(set(resource_ids), set(['resource-id-2', 'resource-id-3'])) def test_get_resources_by_source(self): resources = list(self.conn.get_resources(source='test-1')) self.assertEqual(len(resources), 1) ids = set(r.resource_id for r in resources) self.assertEqual(ids, set(['resource-id'])) def test_get_resources_by_user(self): resources = list(self.conn.get_resources(user='user-id')) self.assertTrue(len(resources) == 2 or len(resources) == 1) ids = set(r.resource_id for r in resources) # tolerate storage driver only reporting latest owner of resource resources_ever_owned_by = set(['resource-id', 'resource-id-alternate']) resources_now_owned_by = set(['resource-id']) self.assertTrue(ids == resources_ever_owned_by or ids == resources_now_owned_by, 'unexpected resources: %s' % ids) def test_get_resources_by_alternate_user(self): resources = list(self.conn.get_resources(user='user-id-alternate')) self.assertEqual(1, len(resources)) # only a single resource owned by this user ever self.assertEqual('resource-id-alternate', resources[0].resource_id) def test_get_resources_by_project(self): resources = list(self.conn.get_resources(project='project-id')) self.assertEqual(len(resources), 2) ids = set(r.resource_id for r in resources) self.assertEqual(ids, set(['resource-id', 'resource-id-alternate'])) def test_get_resources_by_metaquery(self): q = {'metadata.display_name': 'test-server'} resources = list(self.conn.get_resources(metaquery=q)) self.assertEqual(len(resources), 9) def test_get_resources_by_empty_metaquery(self): resources = list(self.conn.get_resources(metaquery={})) self.assertEqual(len(resources), 9) def test_get_resources_most_recent_metadata_all(self): resources = self.conn.get_resources() expected_tags = ['self.counter', 'self.counter3', 'counter-2', 'counter-3', 'counter-4', 'counter-5', 'counter-6', 'counter-7', 'counter-8'] for resource in resources: self.assertIn(resource.metadata['tag'], expected_tags) def test_get_resources_most_recent_metadata_single(self): resource = list( self.conn.get_resources(resource='resource-id-alternate') )[0] expected_tag = 'self.counter3' self.assertEqual(resource.metadata['tag'], expected_tag) class ResourceTestPagination(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_resource_all_limit(self): pagination = base.Pagination(limit=8) results = list(self.conn.get_resources(pagination=pagination)) self.assertEqual(len(results), 8) pagination = base.Pagination(limit=5) results = list(self.conn.get_resources(pagination=pagination)) self.assertEqual(len(results), 5) def test_get_resources_all_marker(self): pagination = base.Pagination(primary_sort_dir='asc', sort_keys=['user_id'], sort_dirs=['asc'], marker_value='resource-id-4') results = list(self.conn.get_resources(pagination=pagination)) self.assertEqual(len(results), 5) def test_get_resources_paginate(self): pagination = base.Pagination(limit=3, primary_sort_dir='asc', sort_keys=['user_id'], sort_dirs=['asc'], marker_value='resource-id-4') results = self.conn.get_resources(pagination=pagination) self.assertEqual(['user-id-5', 'user-id-6', 'user-id-7'], [i.user_id for i in results]) pagination = base.Pagination(limit=2, primary_sort_dir='desc', sort_keys=['user_id'], sort_dirs=['asc'], marker_value='resource-id-4') results = list(self.conn.get_resources(pagination=pagination)) self.assertEqual(['user-id-3', 'user-id-2'], [i.user_id for i in results]) pagination = base.Pagination(limit=3, primary_sort_dir='asc', sort_keys=['user_id'], sort_dirs=['asc'], marker_value='resource-id-5') results = list(self.conn.get_resources(pagination=pagination)) self.assertEqual(['resource-id-6', 'resource-id-7', 'resource-id-8'], [i.resource_id for i in results]) class ResourceTestOrdering(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def prepare_data(self): sample_timings = [('resource-id-1', [(2013, 8, 10, 10, 43), (2013, 8, 10, 10, 44), (2013, 8, 10, 10, 42), (2013, 8, 10, 10, 49), (2013, 8, 10, 10, 47)]), ('resource-id-2', [(2013, 8, 10, 10, 43), (2013, 8, 10, 10, 48), (2013, 8, 10, 10, 42), (2013, 8, 10, 10, 48), (2013, 8, 10, 10, 47)]), ('resource-id-3', [(2013, 8, 10, 10, 43), (2013, 8, 10, 10, 44), (2013, 8, 10, 10, 50), (2013, 8, 10, 10, 49), (2013, 8, 10, 10, 47)])] counter = 0 for resource, timestamps in sample_timings: for timestamp in timestamps: self.create_and_store_sample( timestamp=datetime.datetime(*timestamp), resource_id=resource, user_id=str(counter % 2), project_id=str(counter % 3), metadata={ 'display_name': 'test-server', 'tag': 'sample-%s' % counter }, source='test' ) counter += 1 def test_get_resources_ordering_all(self): resources = list(self.conn.get_resources()) expected = set([ ('resource-id-1', 'sample-3'), ('resource-id-2', 'sample-8'), ('resource-id-3', 'sample-12') ]) received = set([(r.resource_id, r.metadata['tag']) for r in resources]) self.assertEqual(received, expected) def test_get_resources_ordering_single(self): resource = list(self.conn.get_resources(resource='resource-id-2'))[0] self.assertEqual(resource.resource_id, 'resource-id-2') self.assertEqual(resource.metadata['tag'], 'sample-8') class MeterTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_meters(self): msgs_sources = [msg['source'] for msg in self.msgs] results = list(self.conn.get_meters()) self.assertEqual(len(results), 9) for meter in results: self.assertIn(meter.source, msgs_sources) def test_get_meters_by_user(self): results = list(self.conn.get_meters(user='user-id')) self.assertEqual(len(results), 1) def test_get_meters_by_project(self): results = list(self.conn.get_meters(project='project-id')) self.assertEqual(len(results), 2) def test_get_meters_by_metaquery(self): q = {'metadata.display_name': 'test-server'} results = list(self.conn.get_meters(metaquery=q)) assert results self.assertEqual(len(results), 9) def test_get_meters_by_empty_metaquery(self): results = list(self.conn.get_meters(metaquery={})) self.assertEqual(len(results), 9) class MeterTestPagination(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def tet_get_meters_all_limit(self): pagination = base.Pagination(limit=8) results = list(self.conn.get_meters(pagination=pagination)) self.assertEqual(len(results), 8) pagination = base.Pagination(limit=5) results = list(self.conn.get_meters(pagination=pagination)) self.assertEqual(len(results), 5) def test_get_meters_all_marker(self): pagination = base.Pagination(limit=3, primary_sort_dir='desc', sort_keys=['user_id'], sort_dirs=['desc'], marker_value='resource-id-5') results = list(self.conn.get_meters(pagination=pagination)) self.assertEqual(len(results), 8) def test_get_meters_paginate(self): pagination = base.Pagination(limit=3, primary_sort_dir='desc', sort_keys=['user_id'], sort_dirs=['desc'], marker_value='resource-id-5') results = self.conn.get_meters(pagination=pagination) self.assertEqual(['user-id-8', 'user-id-7', 'user-id-6'], [i.user_id for i in results]) pagination = base.Pagination(limit=3, primary_sort_dir='asc', sort_keys=['user_id'], sort_dirs=['desc'], marker_value='resource-id-5') results = self.conn.get_meters(pagination=pagination) self.assertEqual(['user-id-5', 'user-id-6', 'user-id-7'], [i.user_id for i in results]) pagination = base.Pagination(limit=2, primary_sort_dir='desc', sort_keys=['user_id'], sort_dirs=['desc'], marker_value='resource-id-5') results = list(self.conn.get_meters(pagination=pagination)) self.assertEqual(['user-id-3', 'user-id-2'], [i.user_id for i in results]) pagination = base.Pagination(limit=3, primary_sort_dir='desc', sort_keys=['user_id'], sort_dirs=['desc'], marker_value='resource-id-5') results = self.conn.get_meters(pagination=pagination) self.assertEqual([], [i.user_id for i in results]) class RawSampleTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_samples_limit_zero(self): f = storage.SampleFilter() results = list(self.conn.get_samples(f, limit=0)) self.assertEqual(len(results), 0) def test_get_samples_limit(self): f = storage.SampleFilter() results = list(self.conn.get_samples(f, limit=3)) self.assertEqual(len(results), 3) for result in results: self.assertTimestampEqual(result.recorded_at, timeutils.utcnow()) def test_get_samples_in_default_order(self): f = storage.SampleFilter() prev_timestamp = None for sample in self.conn.get_samples(f): if prev_timestamp is not None: self.assertTrue(prev_timestamp >= sample.timestamp) prev_timestamp = sample.timestamp def test_get_samples_by_user(self): f = storage.SampleFilter(user='user-id') results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 3) for meter in results: d = meter.as_dict() self.assertTimestampEqual(d['recorded_at'], timeutils.utcnow()) del d['recorded_at'] self.assertIn(d, self.msgs[:3]) def test_get_samples_by_user_limit(self): f = storage.SampleFilter(user='user-id') results = list(self.conn.get_samples(f, limit=1)) self.assertEqual(len(results), 1) def test_get_samples_by_user_limit_bigger(self): f = storage.SampleFilter(user='user-id') results = list(self.conn.get_samples(f, limit=42)) self.assertEqual(len(results), 3) def test_get_samples_by_project(self): f = storage.SampleFilter(project='project-id') results = list(self.conn.get_samples(f)) self.assertIsNotNone(results) for meter in results: d = meter.as_dict() self.assertTimestampEqual(d['recorded_at'], timeutils.utcnow()) del d['recorded_at'] self.assertIn(d, self.msgs[:4]) def test_get_samples_by_resource(self): f = storage.SampleFilter(user='user-id', resource='resource-id') results = list(self.conn.get_samples(f)) assert results meter = results[1] d = meter.as_dict() self.assertEqual(d['recorded_at'], timeutils.utcnow()) del d['recorded_at'] self.assertEqual(d, self.msgs[0]) def test_get_samples_by_metaquery(self): q = {'metadata.display_name': 'test-server'} f = storage.SampleFilter(metaquery=q) results = list(self.conn.get_samples(f)) self.assertIsNotNone(results) for meter in results: d = meter.as_dict() self.assertTimestampEqual(d['recorded_at'], timeutils.utcnow()) del d['recorded_at'] self.assertIn(d, self.msgs) def test_get_samples_by_start_time(self): timestamp = datetime.datetime(2012, 7, 2, 10, 41) f = storage.SampleFilter( user='user-id', start=timestamp, ) results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) self.assertEqual(results[0].timestamp, timestamp) f.start_timestamp_op = 'ge' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) self.assertEqual(results[0].timestamp, timestamp) f.start_timestamp_op = 'gt' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 0) def test_get_samples_by_end_time(self): timestamp = datetime.datetime(2012, 7, 2, 10, 40) f = storage.SampleFilter( user='user-id', end=timestamp, ) results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) f.end_timestamp_op = 'lt' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) f.end_timestamp_op = 'le' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 2) self.assertEqual(results[1].timestamp, datetime.datetime(2012, 7, 2, 10, 39)) def test_get_samples_by_both_times(self): start_ts = datetime.datetime(2012, 7, 2, 10, 42) end_ts = datetime.datetime(2012, 7, 2, 10, 43) f = storage.SampleFilter( start=start_ts, end=end_ts, ) results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) self.assertEqual(results[0].timestamp, start_ts) f.start_timestamp_op = 'gt' f.end_timestamp_op = 'lt' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 0) f.start_timestamp_op = 'ge' f.end_timestamp_op = 'lt' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) self.assertEqual(results[0].timestamp, start_ts) f.start_timestamp_op = 'gt' f.end_timestamp_op = 'le' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 1) self.assertEqual(results[0].timestamp, end_ts) f.start_timestamp_op = 'ge' f.end_timestamp_op = 'le' results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 2) self.assertEqual(results[0].timestamp, end_ts) self.assertEqual(results[1].timestamp, start_ts) def test_get_samples_by_name(self): f = storage.SampleFilter(user='user-id', meter='no-such-meter') results = list(self.conn.get_samples(f)) assert not results def test_get_samples_by_name2(self): f = storage.SampleFilter(user='user-id', meter='instance') results = list(self.conn.get_samples(f)) assert results def test_get_samples_by_source(self): f = storage.SampleFilter(source='test-1') results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 2) def test_clear_metering_data(self): # NOTE(jd) Override this test in MongoDB because our code doesn't clear # the collections, this is handled by MongoDB TTL feature. if self.CONF.database.connection.startswith('mongodb://'): return timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45) self.conn.clear_expired_metering_data(3 * 60) f = storage.SampleFilter(meter='instance') results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 5) results = list(self.conn.get_users()) self.assertEqual(len(results), 5) results = list(self.conn.get_projects()) self.assertEqual(len(results), 5) results = list(self.conn.get_resources()) self.assertEqual(len(results), 5) def test_clear_metering_data_no_data_to_remove(self): # NOTE(jd) Override this test in MongoDB because our code doesn't clear # the collections, this is handled by MongoDB TTL feature. if self.CONF.database.connection.startswith('mongodb://'): return timeutils.utcnow.override_time = datetime.datetime(2010, 7, 2, 10, 45) self.conn.clear_expired_metering_data(3 * 60) f = storage.SampleFilter(meter='instance') results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 11) results = list(self.conn.get_users()) self.assertEqual(len(results), 9) results = list(self.conn.get_projects()) self.assertEqual(len(results), 8) results = list(self.conn.get_resources()) self.assertEqual(len(results), 9) def test_clear_metering_data_with_alarms(self): # NOTE(jd) Override this test in MongoDB because our code doesn't clear # the collections, this is handled by MongoDB TTL feature. if self.CONF.database.connection.startswith('mongodb://'): return alarm = models.Alarm(alarm_id='r3d', enabled=True, type='threshold', name='red-alert', description='my red-alert', timestamp=None, user_id='user-id', project_id='project-id', state="insufficient data", state_timestamp=None, ok_actions=[], alarm_actions=['http://nowhere/alarms'], insufficient_data_actions=[], repeat_actions=False, time_constraints=[], rule=dict(comparison_operator='eq', threshold=36, statistic='count', evaluation_periods=1, period=60, meter_name='test.one', query=[{'field': 'key', 'op': 'eq', 'value': 'value', 'type': 'string'}]), ) self.conn.create_alarm(alarm) timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45) self.conn.clear_expired_metering_data(5) f = storage.SampleFilter(meter='instance') results = list(self.conn.get_samples(f)) self.assertEqual(len(results), 2) results = list(self.conn.get_users()) self.assertEqual(len(results), 2) self.assertNotIn('user-id', results) results = list(self.conn.get_projects()) self.assertEqual(len(results), 2) self.assertNotIn('project-id', results) results = list(self.conn.get_resources()) self.assertEqual(len(results), 2) class ComplexSampleQueryTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(ComplexSampleQueryTest, self).setUp() self.complex_filter = { "and": [{"or": [{"=": {"resource_id": "resource-id-42"}}, {"=": {"resource_id": "resource-id-44"}}]}, {"and": [{"=": {"counter_name": "cpu_util"}}, {"and": [{">": {"counter_volume": 0.4}}, {"not": {">": {"counter_volume": 0.8}}}]}]}]} or_expression = [{"=": {"resource_id": "resource-id-42"}}, {"=": {"resource_id": "resource-id-43"}}, {"=": {"resource_id": "resource-id-44"}}] and_expression = [{">": {"counter_volume": 0.4}}, {"not": {">": {"counter_volume": 0.8}}}] self.complex_filter_list = {"and": [{"or": or_expression}, {"and": [{"=": {"counter_name": "cpu_util"}}, {"and": and_expression}]}]} in_expression = {"in": {"resource_id": ["resource-id-42", "resource-id-43", "resource-id-44"]}} self.complex_filter_in = {"and": [in_expression, {"and": [{"=": {"counter_name": "cpu_util"}}, {"and": and_expression}]}]} def _create_samples(self): for resource in range(42, 45): for volume in [0.79, 0.41, 0.4, 0.8, 0.39, 0.81]: metadata = {'a_string_key': "meta-value" + str(volume), 'a_float_key': volume, 'an_int_key': resource, 'a_bool_key': (resource == 43)} self.create_and_store_sample(resource_id="resource-id-%s" % resource, metadata=metadata, name="cpu_util", volume=volume) def test_no_filter(self): results = list(self.conn.query_samples()) self.assertEqual(len(results), len(self.msgs)) for sample in results: d = sample.as_dict() del d['recorded_at'] self.assertIn(d, self.msgs) def test_no_filter_with_zero_limit(self): limit = 0 results = list(self.conn.query_samples(limit=limit)) self.assertEqual(len(results), limit) def test_no_filter_with_limit(self): limit = 3 results = list(self.conn.query_samples(limit=limit)) self.assertEqual(len(results), limit) def test_query_simple_filter(self): simple_filter = {"=": {"resource_id": "resource-id-8"}} results = list(self.conn.query_samples(filter_expr=simple_filter)) self.assertEqual(len(results), 1) for sample in results: self.assertEqual(sample.resource_id, "resource-id-8") def test_query_simple_filter_with_not_equal_relation(self): simple_filter = {"!=": {"resource_id": "resource-id-8"}} results = list(self.conn.query_samples(filter_expr=simple_filter)) self.assertEqual(len(results), len(self.msgs) - 1) for sample in results: self.assertNotEqual(sample.resource_id, "resource-id-8") def test_query_complex_filter(self): self._create_samples() results = list(self.conn.query_samples(filter_expr= self.complex_filter)) self.assertEqual(len(results), 6) for sample in results: self.assertIn(sample.resource_id, set(["resource-id-42", "resource-id-44"])) self.assertEqual(sample.counter_name, "cpu_util") self.assertTrue(sample.counter_volume > 0.4) self.assertTrue(sample.counter_volume <= 0.8) def test_query_complex_filter_with_limit(self): self._create_samples() limit = 3 results = list(self.conn.query_samples(filter_expr=self.complex_filter, limit=limit)) self.assertEqual(len(results), limit) def test_query_complex_filter_with_simple_orderby(self): self._create_samples() expected_volume_order = [0.41, 0.41, 0.79, 0.79, 0.8, 0.8] orderby = [{"counter_volume": "asc"}] results = list(self.conn.query_samples(filter_expr=self.complex_filter, orderby=orderby)) self.assertEqual(expected_volume_order, [s.counter_volume for s in results]) def test_query_complex_filter_with_complex_orderby(self): self._create_samples() expected_volume_order = [0.41, 0.41, 0.79, 0.79, 0.8, 0.8] expected_resource_id_order = ["resource-id-44", "resource-id-42", "resource-id-44", "resource-id-42", "resource-id-44", "resource-id-42"] orderby = [{"counter_volume": "asc"}, {"resource_id": "desc"}] results = list(self.conn.query_samples(filter_expr=self.complex_filter, orderby=orderby)) self.assertEqual(expected_volume_order, [s.counter_volume for s in results]) self.assertEqual(expected_resource_id_order, [s.resource_id for s in results]) def test_query_complex_filter_with_list(self): self._create_samples() results = list( self.conn.query_samples(filter_expr=self.complex_filter_list)) self.assertEqual(len(results), 9) for sample in results: self.assertIn(sample.resource_id, set(["resource-id-42", "resource-id-43", "resource-id-44"])) self.assertEqual(sample.counter_name, "cpu_util") self.assertTrue(sample.counter_volume > 0.4) self.assertTrue(sample.counter_volume <= 0.8) def test_query_complex_filter_with_list_with_limit(self): self._create_samples() limit = 3 results = list( self.conn.query_samples(filter_expr=self.complex_filter_list, limit=limit)) self.assertEqual(len(results), limit) def test_query_complex_filter_with_list_with_simple_orderby(self): self._create_samples() expected_volume_order = [0.41, 0.41, 0.41, 0.79, 0.79, 0.79, 0.8, 0.8, 0.8] orderby = [{"counter_volume": "asc"}] results = list( self.conn.query_samples(filter_expr=self.complex_filter_list, orderby=orderby)) self.assertEqual(expected_volume_order, [s.counter_volume for s in results]) def test_query_complex_filterwith_list_with_complex_orderby(self): self._create_samples() expected_volume_order = [0.41, 0.41, 0.41, 0.79, 0.79, 0.79, 0.8, 0.8, 0.8] expected_resource_id_order = ["resource-id-44", "resource-id-43", "resource-id-42", "resource-id-44", "resource-id-43", "resource-id-42", "resource-id-44", "resource-id-43", "resource-id-42"] orderby = [{"counter_volume": "asc"}, {"resource_id": "desc"}] results = list( self.conn.query_samples(filter_expr=self.complex_filter_list, orderby=orderby)) self.assertEqual(expected_volume_order, [s.counter_volume for s in results]) self.assertEqual(expected_resource_id_order, [s.resource_id for s in results]) def test_query_complex_filter_with_wrong_order_in_orderby(self): self._create_samples() orderby = [{"counter_volume": "not valid order"}, {"resource_id": "desc"}] query = lambda: list(self.conn.query_samples(filter_expr= self.complex_filter, orderby=orderby)) self.assertRaises(KeyError, query) def test_query_complex_filter_with_in(self): self._create_samples() results = list( self.conn.query_samples(filter_expr=self.complex_filter_in)) self.assertEqual(len(results), 9) for sample in results: self.assertIn(sample.resource_id, set(["resource-id-42", "resource-id-43", "resource-id-44"])) self.assertEqual(sample.counter_name, "cpu_util") self.assertTrue(sample.counter_volume > 0.4) self.assertTrue(sample.counter_volume <= 0.8) def test_query_filter_with_empty_in(self): results = list( self.conn.query_samples(filter_expr={"in": {"resource_id": []}})) self.assertEqual(len(results), 0) def test_query_simple_metadata_filter(self): self._create_samples() filter_expr = {"=": {"resource_metadata.a_bool_key": True}} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 6) for sample in results: self.assertTrue(sample.resource_metadata["a_bool_key"]) def test_query_simple_metadata_with_in_op(self): self._create_samples() filter_expr = {"in": {"resource_metadata.an_int_key": [42, 43]}} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 12) for sample in results: self.assertIn(sample.resource_metadata["an_int_key"], [42, 43]) def test_query_complex_metadata_filter(self): self._create_samples() subfilter = {"or": [{"=": {"resource_metadata.a_string_key": "meta-value0.81"}}, {"<=": {"resource_metadata.a_float_key": 0.41}}]} filter_expr = {"and": [{">": {"resource_metadata.an_int_key": 42}}, subfilter]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 8) for sample in results: self.assertTrue((sample.resource_metadata["a_string_key"] == "meta-value0.81" or sample.resource_metadata["a_float_key"] <= 0.41)) self.assertTrue(sample.resource_metadata["an_int_key"] > 42) def test_query_mixed_data_and_metadata_filter(self): self._create_samples() subfilter = {"or": [{"=": {"resource_metadata.a_string_key": "meta-value0.81"}}, {"<=": {"resource_metadata.a_float_key": 0.41}}]} filter_expr = {"and": [{"=": {"resource_id": "resource-id-42"}}, subfilter]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 4) for sample in results: self.assertTrue((sample.resource_metadata["a_string_key"] == "meta-value0.81" or sample.resource_metadata["a_float_key"] <= 0.41)) self.assertEqual(sample.resource_id, "resource-id-42") def test_query_non_existing_metadata_with_result(self): self._create_samples() filter_expr = { "or": [{"=": {"resource_metadata.a_string_key": "meta-value0.81"}}, {"<=": {"resource_metadata.key_not_exists": 0.41}}]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 3) for sample in results: self.assertEqual(sample.resource_metadata["a_string_key"], "meta-value0.81") def test_query_non_existing_metadata_without_result(self): self._create_samples() filter_expr = { "or": [{"=": {"resource_metadata.key_not_exists": "meta-value0.81"}}, {"<=": {"resource_metadata.key_not_exists": 0.41}}]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 0) def test_query_negated_metadata(self): self._create_samples() filter_expr = { "and": [{"=": {"resource_id": "resource-id-42"}}, {"not": {"or": [{">": {"resource_metadata.an_int_key": 43}}, {"<=": {"resource_metadata.a_float_key": 0.41}}]}}]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 3) for sample in results: self.assertEqual(sample.resource_id, "resource-id-42") self.assertTrue(sample.resource_metadata["an_int_key"] <= 43) self.assertTrue(sample.resource_metadata["a_float_key"] > 0.41) def test_query_negated_complex_expression(self): self._create_samples() filter_expr = { "and": [{"=": {"counter_name": "cpu_util"}}, {"not": {"or": [{"or": [{"=": {"resource_id": "resource-id-42"}}, {"=": {"resource_id": "resource-id-44"}}]}, {"and": [{">": {"counter_volume": 0.4}}, {"<": {"counter_volume": 0.8}}]}]}}]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 4) for sample in results: self.assertEqual(sample.resource_id, "resource-id-43") self.assertIn(sample.counter_volume, [0.39, 0.4, 0.8, 0.81]) self.assertEqual(sample.counter_name, "cpu_util") def test_query_with_double_negation(self): self._create_samples() filter_expr = { "and": [{"=": {"counter_name": "cpu_util"}}, {"not": {"or": [{"or": [{"=": {"resource_id": "resource-id-42"}}, {"=": {"resource_id": "resource-id-44"}}]}, {"and": [{"not": {"<=": {"counter_volume": 0.4}}}, {"<": {"counter_volume": 0.8}}]}]}}]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 4) for sample in results: self.assertEqual(sample.resource_id, "resource-id-43") self.assertIn(sample.counter_volume, [0.39, 0.4, 0.8, 0.81]) self.assertEqual(sample.counter_name, "cpu_util") def test_query_negate_not_equal(self): self._create_samples() filter_expr = {"not": {"!=": {"resource_id": "resource-id-43"}}} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 6) for sample in results: self.assertEqual(sample.resource_id, "resource-id-43") def test_query_negated_in_op(self): self._create_samples() filter_expr = { "and": [{"not": {"in": {"counter_volume": [0.39, 0.4, 0.79]}}}, {"=": {"resource_id": "resource-id-42"}}]} results = list(self.conn.query_samples(filter_expr=filter_expr)) self.assertEqual(len(results), 3) for sample in results: self.assertIn(sample.counter_volume, [0.41, 0.8, 0.81]) class StatisticsTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def prepare_data(self): for i in range(3): c = sample.Sample( 'volume.size', 'gauge', 'GiB', 5 + i, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.counter', }, source='test', ) msg = utils.meter_message_from_counter( c, secret='not-so-secret', ) self.conn.record_metering_data(msg) for i in range(3): c = sample.Sample( 'volume.size', 'gauge', 'GiB', 8 + i, 'user-5', 'project2', 'resource-6', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={'display_name': 'test-volume', 'tag': 'self.counter', }, source='test', ) msg = utils.meter_message_from_counter( c, secret='not-so-secret', ) self.conn.record_metering_data(msg) for i in range(3): c = sample.Sample( 'memory', 'gauge', 'MB', 8 + i, 'user-5', 'project2', 'resource-6', timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i), resource_metadata={}, source='test', ) msg = utils.meter_message_from_counter( c, secret='not-so-secret', ) self.conn.record_metering_data(msg) def test_by_meter(self): f = storage.SampleFilter( meter='memory' ) results = list(self.conn.get_meter_statistics(f))[0] self.assertEqual(results.duration, (datetime.datetime(2012, 9, 25, 12, 32) - datetime.datetime(2012, 9, 25, 10, 30)).seconds) self.assertEqual(results.count, 3) self.assertEqual(results.unit, 'MB') self.assertEqual(results.min, 8) self.assertEqual(results.max, 10) self.assertEqual(results.sum, 27) self.assertEqual(results.avg, 9) def test_by_user(self): f = storage.SampleFilter( user='user-5', meter='volume.size', ) results = list(self.conn.get_meter_statistics(f))[0] self.assertEqual(results.duration, (datetime.datetime(2012, 9, 25, 12, 32) - datetime.datetime(2012, 9, 25, 10, 30)).seconds) self.assertEqual(results.count, 3) self.assertEqual(results.unit, 'GiB') self.assertEqual(results.min, 8) self.assertEqual(results.max, 10) self.assertEqual(results.sum, 27) self.assertEqual(results.avg, 9) def test_no_period_in_query(self): f = storage.SampleFilter( user='user-5', meter='volume.size', ) results = list(self.conn.get_meter_statistics(f))[0] self.assertEqual(results.period, 0) def test_period_is_int(self): f = storage.SampleFilter( meter='volume.size', ) results = list(self.conn.get_meter_statistics(f))[0] self.assertIs(type(results.period), int) self.assertEqual(results.count, 6) def test_by_user_period(self): f = storage.SampleFilter( user='user-5', meter='volume.size', start='2012-09-25T10:28:00', ) results = list(self.conn.get_meter_statistics(f, period=7200)) self.assertEqual(len(results), 2) self.assertEqual(set(r.period_start for r in results), set([datetime.datetime(2012, 9, 25, 10, 28), datetime.datetime(2012, 9, 25, 12, 28)])) self.assertEqual(set(r.period_end for r in results), set([datetime.datetime(2012, 9, 25, 12, 28), datetime.datetime(2012, 9, 25, 14, 28)])) r = results[0] self.assertEqual(r.period_start, datetime.datetime(2012, 9, 25, 10, 28)) self.assertEqual(r.count, 2) self.assertEqual(r.unit, 'GiB') self.assertEqual(r.avg, 8.5) self.assertEqual(r.min, 8) self.assertEqual(r.max, 9) self.assertEqual(r.sum, 17) self.assertEqual(r.period, 7200) self.assertIsInstance(r.period, int) expected_end = r.period_start + datetime.timedelta(seconds=7200) self.assertEqual(r.period_end, expected_end) self.assertEqual(r.duration, 3660) self.assertEqual(r.duration_start, datetime.datetime(2012, 9, 25, 10, 30)) self.assertEqual(r.duration_end, datetime.datetime(2012, 9, 25, 11, 31)) def test_by_user_period_with_timezone(self): dates = [ '2012-09-25T00:28:00-10:00', '2012-09-25T01:28:00-09:00', '2012-09-25T02:28:00-08:00', '2012-09-25T03:28:00-07:00', '2012-09-25T04:28:00-06:00', '2012-09-25T05:28:00-05:00', '2012-09-25T06:28:00-04:00', '2012-09-25T07:28:00-03:00', '2012-09-25T08:28:00-02:00', '2012-09-25T09:28:00-01:00', '2012-09-25T10:28:00Z', '2012-09-25T11:28:00+01:00', '2012-09-25T12:28:00+02:00', '2012-09-25T13:28:00+03:00', '2012-09-25T14:28:00+04:00', '2012-09-25T15:28:00+05:00', '2012-09-25T16:28:00+06:00', '2012-09-25T17:28:00+07:00', '2012-09-25T18:28:00+08:00', '2012-09-25T19:28:00+09:00', '2012-09-25T20:28:00+10:00', '2012-09-25T21:28:00+11:00', '2012-09-25T22:28:00+12:00', ] for date in dates: f = storage.SampleFilter( user='user-5', meter='volume.size', start=date ) results = list(self.conn.get_meter_statistics(f, period=7200)) self.assertEqual(len(results), 2) self.assertEqual(set(r.period_start for r in results), set([datetime.datetime(2012, 9, 25, 10, 28), datetime.datetime(2012, 9, 25, 12, 28)])) self.assertEqual(set(r.period_end for r in results), set([datetime.datetime(2012, 9, 25, 12, 28), datetime.datetime(2012, 9, 25, 14, 28)])) def test_by_user_period_start_end(self): f = storage.SampleFilter( user='user-5', meter='volume.size', start='2012-09-25T10:28:00', end='2012-09-25T11:28:00', ) results = list(self.conn.get_meter_statistics(f, period=1800)) self.assertEqual(len(results), 1) r = results[0] self.assertEqual(r.period_start, datetime.datetime(2012, 9, 25, 10, 28)) self.assertEqual(r.count, 1) self.assertEqual(r.unit, 'GiB') self.assertEqual(r.avg, 8) self.assertEqual(r.min, 8) self.assertEqual(r.max, 8) self.assertEqual(r.sum, 8) self.assertEqual(r.period, 1800) self.assertEqual(r.period_end, r.period_start + datetime.timedelta(seconds=1800)) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2012, 9, 25, 10, 30)) self.assertEqual(r.duration_end, datetime.datetime(2012, 9, 25, 10, 30)) def test_by_project(self): f = storage.SampleFilter( meter='volume.size', resource='resource-id', start='2012-09-25T11:30:00', end='2012-09-25T11:32:00', ) results = list(self.conn.get_meter_statistics(f))[0] self.assertEqual(results.duration, 0) self.assertEqual(results.count, 1) self.assertEqual(results.unit, 'GiB') self.assertEqual(results.min, 6) self.assertEqual(results.max, 6) self.assertEqual(results.sum, 6) self.assertEqual(results.avg, 6) def test_one_resource(self): f = storage.SampleFilter( user='user-id', meter='volume.size', ) results = list(self.conn.get_meter_statistics(f))[0] self.assertEqual(results.duration, (datetime.datetime(2012, 9, 25, 12, 32) - datetime.datetime(2012, 9, 25, 10, 30)).seconds) self.assertEqual(results.count, 3) self.assertEqual(results.unit, 'GiB') self.assertEqual(results.min, 5) self.assertEqual(results.max, 7) self.assertEqual(results.sum, 18) self.assertEqual(results.avg, 6) class StatisticsGroupByTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def prepare_data(self): test_sample_data = ( {'volume': 2, 'user': 'user-1', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 16, 10), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-1', 'source': 'source-2'}, {'volume': 2, 'user': 'user-1', 'project': 'project-2', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 15, 37), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-1', 'source': 'source-2'}, {'volume': 1, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 11), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 1, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 10, 40), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 2, 'user': 'user-2', 'project': 'project-1', 'resource': 'resource-1', 'timestamp': (2013, 8, 1, 14, 59), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 4, 'user': 'user-2', 'project': 'project-2', 'resource': 'resource-2', 'timestamp': (2013, 8, 1, 17, 28), 'metadata_flavor': 'm1.large', 'metadata_event': 'event-2', 'source': 'source-1'}, {'volume': 4, 'user': 'user-3', 'project': 'project-1', 'resource': 'resource-3', 'timestamp': (2013, 8, 1, 11, 22), 'metadata_flavor': 'm1.tiny', 'metadata_event': 'event-2', 'source': 'source-3'}, ) for test_sample in test_sample_data: c = sample.Sample( 'instance', sample.TYPE_CUMULATIVE, unit='s', volume=test_sample['volume'], user_id=test_sample['user'], project_id=test_sample['project'], resource_id=test_sample['resource'], timestamp=datetime.datetime(*test_sample['timestamp']), resource_metadata={'flavor': test_sample['metadata_flavor'], 'event': test_sample['metadata_event'], }, source=test_sample['source'], ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_group_by_user(self): f = storage.SampleFilter( meter='instance', ) results = list(self.conn.get_meter_statistics(f, groupby=['user_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['user_id'])) self.assertEqual(groupby_vals_set, set(['user-1', 'user-2', 'user-3'])) for r in results: if r.groupby == {'user_id': 'user-1'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) elif r.groupby == {'user_id': 'user-2'}: self.assertEqual(r.count, 4) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 8) self.assertEqual(r.avg, 2) elif r.groupby == {'user_id': 'user-3'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) def test_group_by_resource(self): f = storage.SampleFilter( meter='instance', ) results = list(self.conn.get_meter_statistics(f, groupby=['resource_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['resource_id'])) self.assertEqual(groupby_vals_set, set(['resource-1', 'resource-2', 'resource-3'])) for r in results: if r.groupby == {'resource_id': 'resource-1'}: self.assertEqual(r.count, 3) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 2) elif r.groupby == {'resource_id': 'resource-2'}: self.assertEqual(r.count, 3) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 2) elif r.groupby == {'resource_id': 'resource-3'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) def test_group_by_project(self): f = storage.SampleFilter( meter='instance', ) results = list(self.conn.get_meter_statistics(f, groupby=['project_id'])) self.assertEqual(len(results), 2) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) for r in results: if r.groupby == {'project_id': 'project-1'}: self.assertEqual(r.count, 5) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 10) self.assertEqual(r.avg, 2) elif r.groupby == {'project_id': 'project-2'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 3) def test_group_by_source(self): f = storage.SampleFilter( meter='instance', ) results = list(self.conn.get_meter_statistics(f, groupby=['source'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['source'])) self.assertEqual(groupby_vals_set, set(['source-1', 'source-2', 'source-3'])) for r in results: if r.groupby == {'source': 'source-1'}: self.assertEqual(r.count, 4) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 8) self.assertEqual(r.avg, 2) elif r.groupby == {'source': 'source-2'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) elif r.groupby == {'source': 'source-3'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) def test_group_by_unknown_field(self): f = storage.SampleFilter( meter='instance', ) # NOTE(terriyu): The MongoDB get_meter_statistics() returns a list # whereas the SQLAlchemy get_meter_statistics() returns a generator. # You have to apply list() to the SQLAlchemy generator to get it to # throw an error. The MongoDB get_meter_statistics() will throw an # error before list() is called. By using lambda, we can cover both # MongoDB and SQLAlchemy in a single test. self.assertRaises( NotImplementedError, lambda: list(self.conn.get_meter_statistics(f, groupby=['wtf'])) ) def test_group_by_metadata(self): # TODO(terriyu): test_group_by_metadata needs to be implemented. # This test should check grouping by a single metadata field. pass def test_group_by_multiple_regular(self): f = storage.SampleFilter( meter='instance', ) results = list(self.conn.get_meter_statistics(f, groupby=['user_id', 'resource_id'])) self.assertEqual(len(results), 4) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['user_id', 'resource_id'])) self.assertEqual(groupby_vals_set, set(['user-1', 'user-2', 'user-3', 'resource-1', 'resource-2', 'resource-3'])) for r in results: if r.groupby == {'user_id': 'user-1', 'resource_id': 'resource-1'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) elif r.groupby == {'user_id': 'user-2', 'resource_id': 'resource-1'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) elif r.groupby == {'user_id': 'user-2', 'resource_id': 'resource-2'}: self.assertEqual(r.count, 3) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 2) elif r.groupby == {'user_id': 'user-3', 'resource_id': 'resource-3'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) else: self.assertNotEqual(r.groupby, {'user_id': 'user-1', 'resource_id': 'resource-2'}) self.assertNotEqual(r.groupby, {'user_id': 'user-1', 'resource_id': 'resource-3'}) self.assertNotEqual(r.groupby, {'user_id': 'user-2', 'resource_id': 'resource-3'}) self.assertNotEqual(r.groupby, {'user_id': 'user-3', 'resource_id': 'resource-1'}) self.assertNotEqual(r.groupby, {'user_id': 'user-3', 'resource_id': 'resource-2'}) def test_group_by_multiple_metadata(self): # TODO(terriyu): test_group_by_multiple_metadata needs to be # implemented. # This test should check grouping by multiple metadata fields. pass def test_group_by_multiple_regular_metadata(self): # TODO(terriyu): test_group_by_multiple_regular_metadata needs to be # implemented. # This test should check grouping by a combination of regular and # metadata fields. pass def test_group_by_with_query_filter(self): f = storage.SampleFilter( meter='instance', project='project-1', ) results = list(self.conn.get_meter_statistics( f, groupby=['resource_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['resource_id'])) self.assertEqual(groupby_vals_set, set(['resource-1', 'resource-2', 'resource-3'])) for r in results: if r.groupby == {'resource_id': 'resource-1'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) elif r.groupby == {'resource_id': 'resource-2'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 1) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 1) elif r.groupby == {'resource_id': 'resource-3'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) def test_group_by_metadata_with_query_filter(self): # TODO(terriyu): test_group_by_metadata_with_query_filter needs to be # implemented. # This test should check grouping by a metadata field in combination # with a query filter. pass def test_group_by_with_query_filter_multiple(self): f = storage.SampleFilter( meter='instance', user='user-2', source='source-1', ) results = list(self.conn.get_meter_statistics( f, groupby=['project_id', 'resource_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id', 'resource_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2', 'resource-1', 'resource-2'])) for r in results: if r.groupby == {'project_id': 'project-1', 'resource_id': 'resource-1'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) elif r.groupby == {'project_id': 'project-1', 'resource_id': 'resource-2'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 1) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 1) elif r.groupby == {'project_id': 'project-2', 'resource_id': 'resource-2'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) else: self.assertNotEqual(r.groupby, {'project_id': 'project-2', 'resource_id': 'resource-1'}) def test_group_by_metadata_with_query_filter_multiple(self): # TODO(terriyu): test_group_by_metadata_with_query_filter_multiple # needs to be implemented. # This test should check grouping by multiple metadata fields in # combination with a query filter. pass def test_group_by_with_period(self): f = storage.SampleFilter( meter='instance', ) results = list(self.conn.get_meter_statistics(f, period=7200, groupby=['project_id'])) self.assertEqual(len(results), 4) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) period_start_set = set([r.period_start for r in results]) period_start_valid = set([datetime.datetime(2013, 8, 1, 10, 11), datetime.datetime(2013, 8, 1, 14, 11), datetime.datetime(2013, 8, 1, 16, 11)]) self.assertEqual(period_start_set, period_start_valid) for r in results: if (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 10, 11)): self.assertEqual(r.count, 3) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 4260) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 10, 11)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 11, 22)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 12, 11)) elif (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 14, 11)): self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 4260) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 16, 10)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 16, 11)) elif (r.groupby == {'project_id': 'project-2'} and r.period_start == datetime.datetime(2013, 8, 1, 14, 11)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 15, 37)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 15, 37)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 16, 11)) elif (r.groupby == {'project_id': 'project-2'} and r.period_start == datetime.datetime(2013, 8, 1, 16, 11)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 17, 28)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 17, 28)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 18, 11)) else: self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-1'}, datetime.datetime(2013, 8, 1, 16, 11)]) self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-2'}, datetime.datetime(2013, 8, 1, 10, 11)]) def test_group_by_metadata_with_period(self): # TODO(terriyu): test_group_by_metadata_with_period needs to be # implemented. # This test should check grouping by metadata fields in combination # with period grouping. pass def test_group_by_with_query_filter_and_period(self): f = storage.SampleFilter( meter='instance', source='source-1', ) results = list(self.conn.get_meter_statistics(f, period=7200, groupby=['project_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) period_start_set = set([r.period_start for r in results]) period_start_valid = set([datetime.datetime(2013, 8, 1, 10, 11), datetime.datetime(2013, 8, 1, 14, 11), datetime.datetime(2013, 8, 1, 16, 11)]) self.assertEqual(period_start_set, period_start_valid) for r in results: if (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 10, 11)): self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 1) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 1) self.assertEqual(r.duration, 1740) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 10, 11)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 10, 40)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 12, 11)) elif (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 14, 11)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 16, 11)) elif (r.groupby == {'project_id': 'project-2'} and r.period_start == datetime.datetime(2013, 8, 1, 16, 11)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 17, 28)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 17, 28)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 18, 11)) else: self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-1'}, datetime.datetime(2013, 8, 1, 16, 11)]) self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-2'}, datetime.datetime(2013, 8, 1, 10, 11)]) def test_group_by_metadata_with_query_filter_and_period(self): # TODO(terriyu): test_group_by_metadata_with_query_filter_and_period # needs to be implemented. # This test should check grouping with metadata fields in combination # with a query filter and period grouping. pass def test_group_by_start_timestamp_after(self): f = storage.SampleFilter( meter='instance', start=datetime.datetime(2013, 8, 1, 17, 28, 1), ) results = list(self.conn.get_meter_statistics(f, groupby=['project_id'])) self.assertEqual(results, []) def test_group_by_end_timestamp_before(self): f = storage.SampleFilter( meter='instance', end=datetime.datetime(2013, 8, 1, 10, 10, 59), ) results = list(self.conn.get_meter_statistics(f, groupby=['project_id'])) self.assertEqual(results, []) def test_group_by_start_timestamp(self): f = storage.SampleFilter( meter='instance', start=datetime.datetime(2013, 8, 1, 14, 58), ) results = list(self.conn.get_meter_statistics(f, groupby=['project_id'])) self.assertEqual(len(results), 2) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) for r in results: if r.groupby == {'project_id': 'project-1'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) elif r.groupby == {'project_id': 'project-2'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 3) def test_group_by_end_timestamp(self): f = storage.SampleFilter( meter='instance', end=datetime.datetime(2013, 8, 1, 11, 45), ) results = list(self.conn.get_meter_statistics(f, groupby=['project_id'])) self.assertEqual(len(results), 1) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1'])) for r in results: if r.groupby == {'project_id': 'project-1'}: self.assertEqual(r.count, 3) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 2) def test_group_by_start_end_timestamp(self): f = storage.SampleFilter( meter='instance', start=datetime.datetime(2013, 8, 1, 8, 17, 3), end=datetime.datetime(2013, 8, 1, 23, 59, 59), ) results = list(self.conn.get_meter_statistics(f, groupby=['project_id'])) self.assertEqual(len(results), 2) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) for r in results: if r.groupby == {'project_id': 'project-1'}: self.assertEqual(r.count, 5) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 10) self.assertEqual(r.avg, 2) elif r.groupby == {'project_id': 'project-2'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 6) self.assertEqual(r.avg, 3) def test_group_by_start_end_timestamp_with_query_filter(self): f = storage.SampleFilter( meter='instance', project='project-1', start=datetime.datetime(2013, 8, 1, 11, 1), end=datetime.datetime(2013, 8, 1, 20, 0), ) results = list(self.conn.get_meter_statistics(f, groupby=['resource_id'])) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['resource_id'])) self.assertEqual(groupby_vals_set, set(['resource-1', 'resource-3'])) for r in results: if r.groupby == {'resource_id': 'resource-1'}: self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 2) elif r.groupby == {'resource_id': 'resource-3'}: self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) def test_group_by_start_end_timestamp_with_period(self): f = storage.SampleFilter( meter='instance', start=datetime.datetime(2013, 8, 1, 14, 0), end=datetime.datetime(2013, 8, 1, 17, 0), ) results = list(self.conn.get_meter_statistics(f, period=3600, groupby=['project_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) period_start_set = set([r.period_start for r in results]) period_start_valid = set([datetime.datetime(2013, 8, 1, 14, 0), datetime.datetime(2013, 8, 1, 15, 0), datetime.datetime(2013, 8, 1, 16, 0)]) self.assertEqual(period_start_set, period_start_valid) for r in results: if (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 14, 0)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.period, 3600) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 15, 0)) elif (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 16, 0)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 16, 10)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 16, 10)) self.assertEqual(r.period, 3600) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 17, 0)) elif (r.groupby == {'project_id': 'project-2'} and r.period_start == datetime.datetime(2013, 8, 1, 15, 0)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 15, 37)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 15, 37)) self.assertEqual(r.period, 3600) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 16, 0)) else: self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-1'}, datetime.datetime(2013, 8, 1, 15, 0)]) self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-2'}, datetime.datetime(2013, 8, 1, 14, 0)]) self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-2'}, datetime.datetime(2013, 8, 1, 16, 0)]) def test_group_by_start_end_timestamp_with_query_filter_and_period(self): f = storage.SampleFilter( meter='instance', source='source-1', start=datetime.datetime(2013, 8, 1, 10, 0), end=datetime.datetime(2013, 8, 1, 18, 0), ) results = list(self.conn.get_meter_statistics(f, period=7200, groupby=['project_id'])) self.assertEqual(len(results), 3) groupby_list = [r.groupby for r in results] groupby_keys_set = set(x for sub_dict in groupby_list for x in sub_dict.keys()) groupby_vals_set = set(x for sub_dict in groupby_list for x in sub_dict.values()) self.assertEqual(groupby_keys_set, set(['project_id'])) self.assertEqual(groupby_vals_set, set(['project-1', 'project-2'])) period_start_set = set([r.period_start for r in results]) period_start_valid = set([datetime.datetime(2013, 8, 1, 10, 0), datetime.datetime(2013, 8, 1, 14, 0), datetime.datetime(2013, 8, 1, 16, 0)]) self.assertEqual(period_start_set, period_start_valid) for r in results: if (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 10, 0)): self.assertEqual(r.count, 2) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 1) self.assertEqual(r.max, 1) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 1) self.assertEqual(r.duration, 1740) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 10, 11)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 10, 40)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 12, 0)) elif (r.groupby == {'project_id': 'project-1'} and r.period_start == datetime.datetime(2013, 8, 1, 14, 0)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 2) self.assertEqual(r.max, 2) self.assertEqual(r.sum, 2) self.assertEqual(r.avg, 2) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 14, 59)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 16, 0)) elif (r.groupby == {'project_id': 'project-2'} and r.period_start == datetime.datetime(2013, 8, 1, 16, 0)): self.assertEqual(r.count, 1) self.assertEqual(r.unit, 's') self.assertEqual(r.min, 4) self.assertEqual(r.max, 4) self.assertEqual(r.sum, 4) self.assertEqual(r.avg, 4) self.assertEqual(r.duration, 0) self.assertEqual(r.duration_start, datetime.datetime(2013, 8, 1, 17, 28)) self.assertEqual(r.duration_end, datetime.datetime(2013, 8, 1, 17, 28)) self.assertEqual(r.period, 7200) self.assertEqual(r.period_end, datetime.datetime(2013, 8, 1, 18, 0)) else: self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-1'}, datetime.datetime(2013, 8, 1, 16, 0)]) self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-2'}, datetime.datetime(2013, 8, 1, 10, 0)]) self.assertNotEqual([r.groupby, r.period_start], [{'project_id': 'project-2'}, datetime.datetime(2013, 8, 1, 14, 0)]) class CounterDataTypeTest(DBTestBase, tests_db.MixinTestsWithBackendScenarios): def prepare_data(self): c = sample.Sample( 'dummyBigCounter', sample.TYPE_CUMULATIVE, unit='', volume=3372036854775807, user_id='user-id', project_id='project-id', resource_id='resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={}, source='test-1', ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) c = sample.Sample( 'dummySmallCounter', sample.TYPE_CUMULATIVE, unit='', volume=-3372036854775807, user_id='user-id', project_id='project-id', resource_id='resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={}, source='test-1', ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) c = sample.Sample( 'floatCounter', sample.TYPE_CUMULATIVE, unit='', volume=1938495037.53697, user_id='user-id', project_id='project-id', resource_id='resource-id', timestamp=datetime.datetime(2012, 7, 2, 10, 40), resource_metadata={}, source='test-1', ) msg = utils.meter_message_from_counter( c, self.CONF.publisher.metering_secret, ) self.conn.record_metering_data(msg) def test_storage_can_handle_large_values(self): f = storage.SampleFilter( meter='dummyBigCounter', ) results = list(self.conn.get_samples(f)) self.assertEqual(results[0].counter_volume, 3372036854775807) f = storage.SampleFilter( meter='dummySmallCounter', ) results = list(self.conn.get_samples(f)) self.assertEqual(results[0].counter_volume, -3372036854775807) def test_storage_can_handle_float_values(self): f = storage.SampleFilter( meter='floatCounter', ) results = list(self.conn.get_samples(f)) self.assertEqual(results[0].counter_volume, 1938495037.53697) class AlarmTestBase(DBTestBase): def add_some_alarms(self): alarms = [models.Alarm(alarm_id='r3d', enabled=True, type='threshold', name='red-alert', description='my red-alert', timestamp=None, user_id='me', project_id='and-da-boys', state="insufficient data", state_timestamp=None, ok_actions=[], alarm_actions=['http://nowhere/alarms'], insufficient_data_actions=[], repeat_actions=False, time_constraints=[dict(name='testcons', start='0 11 * * *', duration=300)], rule=dict(comparison_operator='eq', threshold=36, statistic='count', evaluation_periods=1, period=60, meter_name='test.one', query=[{'field': 'key', 'op': 'eq', 'value': 'value', 'type': 'string'}]), ), models.Alarm(alarm_id='0r4ng3', enabled=True, type='threshold', name='orange-alert', description='a orange', timestamp=None, user_id='me', project_id='and-da-boys', state="insufficient data", state_timestamp=None, ok_actions=[], alarm_actions=['http://nowhere/alarms'], insufficient_data_actions=[], repeat_actions=False, time_constraints=[], rule=dict(comparison_operator='gt', threshold=75, statistic='avg', evaluation_periods=1, period=60, meter_name='test.fourty', query=[{'field': 'key2', 'op': 'eq', 'value': 'value2', 'type': 'string'}]), ), models.Alarm(alarm_id='y3ll0w', enabled=False, type='threshold', name='yellow-alert', description='yellow', timestamp=None, user_id='me', project_id='and-da-boys', state="insufficient data", state_timestamp=None, ok_actions=[], alarm_actions=['http://nowhere/alarms'], insufficient_data_actions=[], repeat_actions=False, time_constraints=[], rule=dict(comparison_operator='lt', threshold=10, statistic='min', evaluation_periods=1, period=60, meter_name='test.five', query=[{'field': 'key2', 'op': 'eq', 'value': 'value2', 'type': 'string'}, {'field': 'user_metadata.key3', 'op': 'eq', 'value': 'value3', 'type': 'string'}]), )] for a in alarms: self.conn.create_alarm(a) class AlarmTest(AlarmTestBase, tests_db.MixinTestsWithBackendScenarios): def test_empty(self): alarms = list(self.conn.get_alarms()) self.assertEqual([], alarms) def test_list(self): self.add_some_alarms() alarms = list(self.conn.get_alarms()) self.assertEqual(len(alarms), 3) def test_list_enabled(self): self.add_some_alarms() alarms = list(self.conn.get_alarms(enabled=True)) self.assertEqual(len(alarms), 2) def test_list_disabled(self): self.add_some_alarms() alarms = list(self.conn.get_alarms(enabled=False)) self.assertEqual(len(alarms), 1) def test_add(self): self.add_some_alarms() alarms = list(self.conn.get_alarms()) self.assertEqual(len(alarms), 3) meter_names = sorted([a.rule['meter_name'] for a in alarms]) self.assertEqual(meter_names, ['test.five', 'test.fourty', 'test.one']) def test_update(self): self.add_some_alarms() orange = list(self.conn.get_alarms(name='orange-alert'))[0] orange.enabled = False orange.state = models.Alarm.ALARM_INSUFFICIENT_DATA query = [{'field': 'metadata.group', 'op': 'eq', 'value': 'test.updated', 'type': 'string'}] orange.rule['query'] = query orange.rule['meter_name'] = 'new_meter_name' updated = self.conn.update_alarm(orange) self.assertEqual(updated.enabled, False) self.assertEqual(updated.state, models.Alarm.ALARM_INSUFFICIENT_DATA) self.assertEqual(updated.rule['query'], query) self.assertEqual(updated.rule['meter_name'], 'new_meter_name') def test_update_llu(self): llu = models.Alarm(alarm_id='llu', enabled=True, type='threshold', name='llu', description='llu', timestamp=None, user_id='bla', project_id='ffo', state="insufficient data", state_timestamp=None, ok_actions=[], alarm_actions=[], insufficient_data_actions=[], repeat_actions=False, time_constraints=[], rule=dict(comparison_operator='lt', threshold=34, statistic='max', evaluation_periods=1, period=60, meter_name='llt', query=[]) ) updated = self.conn.update_alarm(llu) updated.state = models.Alarm.ALARM_OK updated.description = ':)' self.conn.update_alarm(updated) all = list(self.conn.get_alarms()) self.assertEqual(len(all), 1) def test_delete(self): self.add_some_alarms() victim = list(self.conn.get_alarms(name='orange-alert'))[0] self.conn.delete_alarm(victim.alarm_id) survivors = list(self.conn.get_alarms()) self.assertEqual(len(survivors), 2) for s in survivors: self.assertNotEqual(victim.name, s.name) class AlarmTestPagination(AlarmTestBase, tests_db.MixinTestsWithBackendScenarios): def test_get_alarm_all_limit(self): self.add_some_alarms() pagination = base.Pagination(limit=2) alarms = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(len(alarms), 2) pagination = base.Pagination(limit=1) alarms = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(len(alarms), 1) def test_get_alarm_all_marker(self): self.add_some_alarms() pagination = base.Pagination(marker_value='orange-alert') alarms = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(len(alarms), 0) pagination = base.Pagination(marker_value='red-alert') alarms = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(len(alarms), 1) pagination = base.Pagination(marker_value='yellow-alert') alarms = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(len(alarms), 2) def test_get_alarm_paginate(self): self.add_some_alarms() pagination = base.Pagination(limit=4, marker_value='yellow-alert') page = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(['red-alert', 'orange-alert'], [i.name for i in page]) pagination = base.Pagination(limit=2, marker_value='orange-alert', primary_sort_dir='asc') page1 = list(self.conn.get_alarms(pagination=pagination)) self.assertEqual(['red-alert', 'yellow-alert'], [i.name for i in page1]) class ComplexAlarmQueryTest(AlarmTestBase, tests_db.MixinTestsWithBackendScenarios): def test_no_filter(self): self.add_some_alarms() result = list(self.conn.query_alarms()) self.assertEqual(3, len(result)) def test_no_filter_with_limit(self): self.add_some_alarms() result = list(self.conn.query_alarms(limit=2)) self.assertEqual(2, len(result)) def test_filter(self): self.add_some_alarms() filter_expr = {"and": [{"or": [{"=": {"name": "yellow-alert"}}, {"=": {"name": "red-alert"}}]}, {"=": {"enabled": True}}]} result = list(self.conn.query_alarms(filter_expr=filter_expr)) self.assertEqual(1, len(result)) for a in result: self.assertIn(a.name, set(["yellow-alert", "red-alert"])) self.assertTrue(a.enabled) def test_filter_for_alarm_id(self): self.add_some_alarms() filter_expr = {"=": {"alarm_id": "0r4ng3"}} result = list(self.conn.query_alarms(filter_expr=filter_expr)) self.assertEqual(1, len(result)) for a in result: self.assertEqual(a.alarm_id, "0r4ng3") def test_filter_and_orderby(self): self.add_some_alarms() result = list(self.conn.query_alarms(filter_expr={"=": {"enabled": True}}, orderby=[{"name": "asc"}])) self.assertEqual(2, len(result)) self.assertEqual(["orange-alert", "red-alert"], [a.name for a in result]) for a in result: self.assertTrue(a.enabled) class ComplexAlarmHistoryQueryTest(AlarmTestBase, tests_db.MixinTestsWithBackendScenarios): def setUp(self): super(DBTestBase, self).setUp() self.filter_expr = {"and": [{"or": [{"=": {"type": "rule change"}}, {"=": {"type": "state transition"}}]}, {"=": {"alarm_id": "0r4ng3"}}]} self.add_some_alarms() self.prepare_alarm_history() def prepare_alarm_history(self): alarms = list(self.conn.get_alarms()) for alarm in alarms: i = alarms.index(alarm) alarm_change = dict(event_id= "16fd2706-8baf-433b-82eb-8c7fada847c%s" % i, alarm_id=alarm.alarm_id, type=models.AlarmChange.CREATION, detail="detail %s" % alarm.name, user_id=alarm.user_id, project_id=alarm.project_id, on_behalf_of=alarm.project_id, timestamp=datetime.datetime(2012, 9, 24, 7 + i, 30 + i)) self.conn.record_alarm_change(alarm_change=alarm_change) alarm_change2 = dict(event_id= "16fd2706-8baf-433b-82eb-8c7fada847d%s" % i, alarm_id=alarm.alarm_id, type=models.AlarmChange.RULE_CHANGE, detail="detail %s" % i, user_id=alarm.user_id, project_id=alarm.project_id, on_behalf_of=alarm.project_id, timestamp=datetime.datetime(2012, 9, 25, 10 + i, 30 + i)) self.conn.record_alarm_change(alarm_change=alarm_change2) alarm_change3 = dict(event_id= "16fd2706-8baf-433b-82eb-8c7fada847e%s" % i, alarm_id=alarm.alarm_id, type=models.AlarmChange.STATE_TRANSITION, detail="detail %s" % (i + 1), user_id=alarm.user_id, project_id=alarm.project_id, on_behalf_of=alarm.project_id, timestamp=datetime.datetime(2012, 9, 26, 10 + i, 30 + i)) if alarm.name == "red-alert": alarm_change3['on_behalf_of'] = 'and-da-girls' self.conn.record_alarm_change(alarm_change=alarm_change3) if alarm.name in ["red-alert", "yellow-alert"]: alarm_change4 = dict(event_id= "16fd2706-8baf-433b-82eb-8c7fada847f%s" % i, alarm_id=alarm.alarm_id, type=models.AlarmChange.DELETION, detail="detail %s" % (i + 2), user_id=alarm.user_id, project_id=alarm.project_id, on_behalf_of=alarm.project_id, timestamp=datetime.datetime(2012, 9, 27, 10 + i, 30 + i)) self.conn.record_alarm_change(alarm_change=alarm_change4) def test_alarm_history_with_no_filter(self): history = list(self.conn.query_alarm_history()) self.assertEqual(11, len(history)) def test_alarm_history_with_no_filter_and_limit(self): history = list(self.conn.query_alarm_history(limit=3)) self.assertEqual(3, len(history)) def test_alarm_history_with_filter(self): history = list( self.conn.query_alarm_history(filter_expr=self.filter_expr)) self.assertEqual(2, len(history)) def test_alarm_history_with_filter_and_orderby(self): history = list( self.conn.query_alarm_history(filter_expr=self.filter_expr, orderby=[{"timestamp": "asc"}])) self.assertEqual([models.AlarmChange.RULE_CHANGE, models.AlarmChange.STATE_TRANSITION], [h.type for h in history]) def test_alarm_history_with_filter_and_orderby_and_limit(self): history = list( self.conn.query_alarm_history(filter_expr=self.filter_expr, orderby=[{"timestamp": "asc"}], limit=1)) self.assertEqual(models.AlarmChange.RULE_CHANGE, history[0].type) def test_alarm_history_with_on_behalf_of_filter(self): filter_expr = {"=": {"on_behalf_of": "and-da-girls"}} history = list(self.conn.query_alarm_history(filter_expr=filter_expr)) self.assertEqual(1, len(history)) self.assertEqual("16fd2706-8baf-433b-82eb-8c7fada847e0", history[0].event_id) def test_alarm_history_with_alarm_id_as_filter(self): filter_expr = {"=": {"alarm_id": "r3d"}} history = list(self.conn.query_alarm_history(filter_expr=filter_expr, orderby=[{"timestamp": "asc"}])) self.assertEqual(4, len(history)) self.assertEqual([models.AlarmChange.CREATION, models.AlarmChange.RULE_CHANGE, models.AlarmChange.STATE_TRANSITION, models.AlarmChange.DELETION], [h.type for h in history]) class EventTestBase(tests_db.TestBase, tests_db.MixinTestsWithBackendScenarios): """Separate test base class because we don't want to inherit all the Meter stuff. """ def setUp(self): super(EventTestBase, self).setUp() self.prepare_data() def prepare_data(self): # Add some data ... pass class EventTest(EventTestBase): def test_duplicate_message_id(self): now = datetime.datetime.utcnow() m = [models.Event("1", "Foo", now, None), models.Event("1", "Zoo", now, [])] problem_events = self.conn.record_events(m) self.assertEqual(1, len(problem_events)) bad = problem_events[0] self.assertEqual(models.Event.DUPLICATE, bad[0]) class GetEventTest(EventTestBase): def prepare_data(self): self.event_models = [] base = 0 self.start = datetime.datetime(2013, 12, 31, 5, 0) now = self.start for event_type in ['Foo', 'Bar', 'Zoo', 'Foo', 'Bar', 'Zoo']: trait_models = \ [models.Trait(name, dtype, value) for name, dtype, value in [ ('trait_A', models.Trait.TEXT_TYPE, "my_%s_text" % event_type), ('trait_B', models.Trait.INT_TYPE, base + 1), ('trait_C', models.Trait.FLOAT_TYPE, float(base) + 0.123456), ('trait_D', models.Trait.DATETIME_TYPE, now)]] self.event_models.append( models.Event("id_%s_%d" % (event_type, base), event_type, now, trait_models)) base += 100 now = now + datetime.timedelta(hours=1) self.end = now self.conn.record_events(self.event_models) def test_generated_is_datetime(self): event_filter = storage.EventFilter(self.start, self.end) events = self.conn.get_events(event_filter) self.assertEqual(6, len(events)) for i, event in enumerate(events): self.assertIsInstance(event.generated, datetime.datetime) self.assertEqual(event.generated, self.event_models[i].generated) model_traits = self.event_models[i].traits for j, trait in enumerate(event.traits): if trait.dtype == models.Trait.DATETIME_TYPE: self.assertIsInstance(trait.value, datetime.datetime) self.assertEqual(trait.value, model_traits[j].value) def test_simple_get(self): event_filter = storage.EventFilter(self.start, self.end) events = self.conn.get_events(event_filter) self.assertEqual(6, len(events)) start_time = None for i, type in enumerate(['Foo', 'Bar', 'Zoo']): self.assertEqual(events[i].event_type, type) self.assertEqual(4, len(events[i].traits)) # Ensure sorted results ... if start_time is not None: # Python 2.6 has no assertLess :( self.assertTrue(start_time < events[i].generated) start_time = events[i].generated def test_simple_get_event_type(self): expected_trait_values = { 'id_Bar_100': { 'trait_A': 'my_Bar_text', 'trait_B': 101, 'trait_C': 100.123456, 'trait_D': self.start + datetime.timedelta(hours=1) }, 'id_Bar_400': { 'trait_A': 'my_Bar_text', 'trait_B': 401, 'trait_C': 400.123456, 'trait_D': self.start + datetime.timedelta(hours=4) } } event_filter = storage.EventFilter(self.start, self.end, "Bar") events = self.conn.get_events(event_filter) self.assertEqual(2, len(events)) self.assertEqual(events[0].event_type, "Bar") self.assertEqual(events[1].event_type, "Bar") self.assertEqual(4, len(events[0].traits)) self.assertEqual(4, len(events[1].traits)) for event in events: trait_values = expected_trait_values.get(event.message_id, None) if not trait_values: self.fail("Unexpected event ID returned:" % event.message_id) for trait in event.traits: expected_val = trait_values.get(trait.name) if not expected_val: self.fail("Unexpected trait type: %s" % trait.dtype) self.assertEqual(expected_val, trait.value) def test_get_event_trait_filter(self): trait_filters = [{'key': 'trait_B', 'integer': 101}] event_filter = storage.EventFilter(self.start, self.end, traits_filter=trait_filters) events = self.conn.get_events(event_filter) self.assertEqual(1, len(events)) self.assertEqual(events[0].event_type, "Bar") self.assertEqual(4, len(events[0].traits)) def test_get_event_multiple_trait_filter(self): trait_filters = [{'key': 'trait_B', 'integer': 1}, {'key': 'trait_A', 'string': 'my_Foo_text'}] event_filter = storage.EventFilter(self.start, self.end, traits_filter=trait_filters) events = self.conn.get_events(event_filter) self.assertEqual(1, len(events)) self.assertEqual(events[0].event_type, "Foo") self.assertEqual(4, len(events[0].traits)) def test_get_event_multiple_trait_filter_expect_none(self): trait_filters = [{'key': 'trait_B', 'integer': 1}, {'key': 'trait_A', 'string': 'my_Zoo_text'}] event_filter = storage.EventFilter(self.start, self.end, traits_filter=trait_filters) events = self.conn.get_events(event_filter) self.assertEqual(0, len(events)) def test_get_event_types(self): event_types = [e for e in self.conn.get_event_types()] self.assertEqual(3, len(event_types)) self.assertTrue("Bar" in event_types) self.assertTrue("Foo" in event_types) self.assertTrue("Zoo" in event_types) def test_get_trait_types(self): trait_types = [tt for tt in self.conn.get_trait_types("Foo")] self.assertEqual(4, len(trait_types)) trait_type_names = map(lambda x: x['name'], trait_types) self.assertIn("trait_A", trait_type_names) self.assertIn("trait_B", trait_type_names) self.assertIn("trait_C", trait_type_names) self.assertIn("trait_D", trait_type_names) def test_get_trait_types_unknown_event(self): trait_types = [tt for tt in self.conn.get_trait_types("Moo")] self.assertEqual(0, len(trait_types)) def test_get_traits(self): traits = self.conn.get_traits("Bar") #format results in a way that makes them easier to #work with trait_dict = {} for trait in traits: trait_dict[trait.name] = trait.dtype self.assertTrue("trait_A" in trait_dict) self.assertEqual(models.Trait.TEXT_TYPE, trait_dict["trait_A"]) self.assertTrue("trait_B" in trait_dict) self.assertEqual(models.Trait.INT_TYPE, trait_dict["trait_B"]) self.assertTrue("trait_C" in trait_dict) self.assertEqual(models.Trait.FLOAT_TYPE, trait_dict["trait_C"]) self.assertTrue("trait_D" in trait_dict) self.assertEqual(models.Trait.DATETIME_TYPE, trait_dict["trait_D"]) def test_get_all_traits(self): traits = self.conn.\ get_traits("Foo") traits = [t for t in traits] self.assertEqual(8, len(traits)) trait = traits[0] self.assertEqual("trait_A", trait.name) self.assertEqual(models.Trait.TEXT_TYPE, trait.dtype) def test_simple_get_event_no_traits(self): new_events = [models.Event("id_notraits", "NoTraits", self.start, [])] bad_events = self.conn.record_events(new_events) event_filter = storage.EventFilter(self.start, self.end, "NoTraits") events = self.conn.get_events(event_filter) self.assertEqual(0, len(bad_events)) self.assertEqual(1, len(events)) self.assertEqual(events[0].message_id, "id_notraits") self.assertEqual(events[0].event_type, "NoTraits") self.assertEqual(0, len(events[0].traits)) def test_simple_get_no_filters(self): event_filter = storage.EventFilter(None, None, None) events = self.conn.get_events(event_filter) self.assertEqual(6, len(events)) def test_get_by_message_id(self): new_events = [models.Event("id_testid", "MessageIDTest", self.start, [])] bad_events = self.conn.record_events(new_events) event_filter = storage.EventFilter(message_id="id_testid") events = self.conn.get_events(event_filter) self.assertEqual(0, len(bad_events)) self.assertEqual(1, len(events)) event = events[0] self.assertEqual("id_testid", event.message_id) class BigIntegerTest(tests_db.TestBase, tests_db.MixinTestsWithBackendScenarios): def test_metadata_bigint(self): metadata = {'bigint': 99999999999999} s = sample.Sample(name='name', type=sample.TYPE_GAUGE, unit='B', volume=1, user_id='user-id', project_id='project-id', resource_id='resource-id', timestamp=datetime.datetime.utcnow(), resource_metadata=metadata) msg = utils.meter_message_from_counter( s, self.CONF.publisher.metering_secret) self.conn.record_metering_data(msg) ceilometer-2014.1/ceilometer/tests/storage/test_pymongo_base.py0000664000175300017540000001562412323717132026130 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # 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. """Tests the mongodb and db2 common functionality """ import copy import datetime from mock import patch import testscenarios from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests import db as tests_db from ceilometer.tests.storage import test_storage_scenarios load_tests = testscenarios.load_tests_apply_scenarios class CompatibilityTest(test_storage_scenarios.DBTestBase, tests_db.MixinTestsWithBackendScenarios): scenarios = [ ('mongodb', dict(database_connection=tests_db.MongoDBFakeConnectionUrl())), ('db2', dict(database_connection=tests_db.DB2FakeConnectionUrl())), ] def prepare_data(self): def old_record_metering_data(self, data): self.db.user.update( {'_id': data['user_id']}, {'$addToSet': {'source': data['source'], }, }, upsert=True, ) self.db.project.update( {'_id': data['project_id']}, {'$addToSet': {'source': data['source'], }, }, upsert=True, ) received_timestamp = datetime.datetime.utcnow() self.db.resource.update( {'_id': data['resource_id']}, {'$set': {'project_id': data['project_id'], 'user_id': data['user_id'], # Current metadata being used and when it was # last updated. 'timestamp': data['timestamp'], 'received_timestamp': received_timestamp, 'metadata': data['resource_metadata'], 'source': data['source'], }, '$addToSet': {'meter': {'counter_name': data['counter_name'], 'counter_type': data['counter_type'], }, }, }, upsert=True, ) record = copy.copy(data) self.db.meter.insert(record) # Stubout with the old version DB schema, the one w/o 'counter_unit' with patch.object(self.conn, 'record_metering_data', side_effect=old_record_metering_data): self.counters = [] c = sample.Sample( 'volume.size', 'gauge', 'GiB', 5, 'user-id', 'project1', 'resource-id', timestamp=datetime.datetime(2012, 9, 25, 10, 30), resource_metadata={'display_name': 'test-volume', 'tag': 'self.counter', }, source='test', ) self.counters.append(c) msg = utils.meter_message_from_counter( c, secret='not-so-secret') self.conn.record_metering_data(self.conn, msg) # Create the old format alarm with a dict instead of a # array for matching_metadata alarm = dict(alarm_id='0ld-4l3rt', enabled=True, name='old-alert', description='old-alert', timestamp=None, meter_name='cpu', user_id='me', project_id='and-da-boys', comparison_operator='lt', threshold=36, statistic='count', evaluation_periods=1, period=60, state="insufficient data", state_timestamp=None, ok_actions=[], alarm_actions=['http://nowhere/alarms'], insufficient_data_actions=[], repeat_actions=False, matching_metadata={'key': 'value'}) self.conn.db.alarm.update( {'alarm_id': alarm['alarm_id']}, {'$set': alarm}, upsert=True) alarm['alarm_id'] = 'other-kind-of-0ld-4l3rt' alarm['name'] = 'other-old-alaert' alarm['matching_metadata'] = [{'key': 'key1', 'value': 'value1'}, {'key': 'key2', 'value': 'value2'}] self.conn.db.alarm.update( {'alarm_id': alarm['alarm_id']}, {'$set': alarm}, upsert=True) def test_alarm_get_old_format_matching_metadata_dict(self): old = list(self.conn.get_alarms(name='old-alert'))[0] self.assertEqual('threshold', old.type) self.assertEqual([{'field': 'key', 'op': 'eq', 'value': 'value', 'type': 'string'}], old.rule['query']) self.assertEqual(60, old.rule['period']) self.assertEqual('cpu', old.rule['meter_name']) self.assertEqual(1, old.rule['evaluation_periods']) self.assertEqual('count', old.rule['statistic']) self.assertEqual('lt', old.rule['comparison_operator']) self.assertEqual(36, old.rule['threshold']) def test_alarm_get_old_format_matching_metadata_array(self): old = list(self.conn.get_alarms(name='other-old-alaert'))[0] self.assertEqual('threshold', old.type) self.assertEqual(sorted([{'field': 'key1', 'op': 'eq', 'value': 'value1', 'type': 'string'}, {'field': 'key2', 'op': 'eq', 'value': 'value2', 'type': 'string'}]), sorted(old.rule['query']),) self.assertEqual('cpu', old.rule['meter_name']) self.assertEqual(60, old.rule['period']) self.assertEqual(1, old.rule['evaluation_periods']) self.assertEqual('count', old.rule['statistic']) self.assertEqual('lt', old.rule['comparison_operator']) self.assertEqual(36, old.rule['threshold']) def test_counter_unit(self): meters = list(self.conn.get_meters()) self.assertEqual(1, len(meters)) ceilometer-2014.1/ceilometer/tests/storage/__init__.py0000664000175300017540000000000012323717130024122 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/storage/sqlalchemy/0000775000175300017540000000000012323717426024175 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/storage/sqlalchemy/__init__.py0000664000175300017540000000000012323717130026264 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/tests/storage/sqlalchemy/test_models.py0000664000175300017540000000746412323717130027074 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Rackspace Hosting # # Author: Thomas Maddox # # 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 datetime import mock import sqlalchemy from sqlalchemy.dialects.mysql import DECIMAL from sqlalchemy.types import NUMERIC from ceilometer.openstack.common import test from ceilometer.storage.sqlalchemy import models from ceilometer import utils class PreciseTimestampTest(test.BaseTestCase): @staticmethod def fake_dialect(name): def _type_descriptor_mock(desc): if type(desc) == DECIMAL: return NUMERIC(precision=desc.precision, scale=desc.scale) dialect = mock.MagicMock() dialect.name = name dialect.type_descriptor = _type_descriptor_mock return dialect def setUp(self): super(PreciseTimestampTest, self).setUp() self._mysql_dialect = self.fake_dialect('mysql') self._postgres_dialect = self.fake_dialect('postgres') self._type = models.PreciseTimestamp() self._date = datetime.datetime(2012, 7, 2, 10, 44) def test_load_dialect_impl_mysql(self): result = self._type.load_dialect_impl(self._mysql_dialect) self.assertEqual(NUMERIC, type(result)) self.assertEqual(20, result.precision) self.assertEqual(6, result.scale) self.assertTrue(result.asdecimal) def test_load_dialect_impl_postgres(self): result = self._type.load_dialect_impl(self._postgres_dialect) self.assertEqual(sqlalchemy.DateTime, type(result)) def test_process_bind_param_store_decimal_mysql(self): expected = utils.dt_to_decimal(self._date) result = self._type.process_bind_param(self._date, self._mysql_dialect) self.assertEqual(expected, result) def test_process_bind_param_store_datetime_postgres(self): result = self._type.process_bind_param(self._date, self._postgres_dialect) self.assertEqual(self._date, result) def test_process_bind_param_store_none_mysql(self): result = self._type.process_bind_param(None, self._mysql_dialect) self.assertIsNone(result) def test_process_bind_param_store_none_postgres(self): result = self._type.process_bind_param(None, self._postgres_dialect) self.assertIsNone(result) def test_process_result_value_datetime_mysql(self): dec_value = utils.dt_to_decimal(self._date) result = self._type.process_result_value(dec_value, self._mysql_dialect) self.assertEqual(self._date, result) def test_process_result_value_datetime_postgres(self): result = self._type.process_result_value(self._date, self._postgres_dialect) self.assertEqual(self._date, result) def test_process_result_value_none_mysql(self): result = self._type.process_result_value(None, self._mysql_dialect) self.assertIsNone(result) def test_process_result_value_none_postgres(self): result = self._type.process_result_value(None, self._postgres_dialect) self.assertIsNone(result) ceilometer-2014.1/ceilometer/tests/storage/test_impl_hbase.py0000664000175300017540000001013412323717132025540 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012, 2013 Dell Inc. # # Author: Stas Maksimov # Author: Shengjie Min # # 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. """Tests for ceilometer/storage/impl_hbase.py .. note:: In order to run the tests against real HBase server set the environment variable CEILOMETER_TEST_HBASE_URL to point to that HBase instance before running the tests. Make sure the Thrift server is running on that server. """ from mock import patch from ceilometer.storage import impl_hbase as hbase from ceilometer.tests import db as tests_db class HBaseEngineTestBase(tests_db.TestBase): database_connection = tests_db.HBaseFakeConnectionUrl() class ConnectionTest(HBaseEngineTestBase): def test_hbase_connection(self): self.CONF.database.connection = str(self.database_connection) conn = hbase.Connection(self.CONF) self.assertIsInstance(conn.conn_pool.connection(), hbase.MConnection) class TestConn(object): def __init__(self, host, port): self.netloc = '%s:%s' % (host, port) def open(self): pass def get_connection_pool(conf): return TestConn(conf['host'], conf['port']) self.CONF.database.connection = 'hbase://test_hbase:9090' with patch.object(hbase.Connection, '_get_connection_pool', side_effect=get_connection_pool): conn = hbase.Connection(self.CONF) self.assertIsInstance(conn.conn_pool, TestConn) class CapabilitiesTest(HBaseEngineTestBase): # Check the returned capabilities list, which is specific to each DB # driver def test_capabilities(self): expected_capabilities = { 'meters': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'resources': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'samples': {'pagination': False, 'groupby': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'statistics': {'pagination': False, 'groupby': False, 'query': {'simple': True, 'metadata': True, 'complex': False}, 'aggregation': {'standard': True, 'selectable': { 'max': False, 'min': False, 'sum': False, 'avg': False, 'count': False, 'stddev': False, 'cardinality': False}} }, 'alarms': {'query': {'simple': False, 'complex': False}, 'history': {'query': {'simple': False, 'complex': False}}}, 'events': {'query': {'simple': False}} } actual_capabilities = self.conn.get_capabilities() self.assertEqual(expected_capabilities, actual_capabilities) ceilometer-2014.1/ceilometer/tests/storage/test_impl_db2.py0000664000175300017540000000614012323717132025127 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright Ericsson AB 2014. All rights reserved # # Authors: Ildiko Vancsa # # 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. """Tests for ceilometer/storage/impl_db2.py .. note:: In order to run the tests against another MongoDB server set the environment variable CEILOMETER_TEST_DB2_URL to point to a DB2 server before running the tests. """ from ceilometer.tests import db as tests_db class DB2EngineTestBase(tests_db.TestBase): database_connection = tests_db.DB2FakeConnectionUrl() class CapabilitiesTest(DB2EngineTestBase): # Check the returned capabilities list, which is specific to each DB # driver def test_capabilities(self): expected_capabilities = { 'meters': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'resources': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'samples': {'pagination': False, 'groupby': False, 'query': {'simple': True, 'metadata': True, 'complex': True}}, 'statistics': {'pagination': False, 'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, 'aggregation': {'standard': True, 'selectable': { 'max': False, 'min': False, 'sum': False, 'avg': False, 'count': False, 'stddev': False, 'cardinality': False}} }, 'alarms': {'query': {'simple': True, 'complex': True}, 'history': {'query': {'simple': True, 'complex': False}}}, 'events': {'query': {'simple': False}} } actual_capabilities = self.conn.get_capabilities() self.assertEqual(expected_capabilities, actual_capabilities) ceilometer-2014.1/ceilometer/tests/storage/test_impl_log.py0000664000175300017540000000232312323717130025236 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Tests for ceilometer/storage/impl_log.py """ import mock from ceilometer.openstack.common import test from ceilometer.storage import impl_log class ConnectionTest(test.BaseTestCase): def test_get_connection(self): conf = mock.Mock() log_stg = impl_log.LogStorage() conn = log_stg.get_connection(conf) conn.record_metering_data({'counter_name': 'test', 'resource_id': __name__, 'counter_volume': 1, }) ceilometer-2014.1/ceilometer/tests/storage/test_models.py0000664000175300017540000000772112323717130024726 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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 datetime from ceilometer.openstack.common import test from ceilometer.storage import models class FakeModel(models.Model): def __init__(self, arg1, arg2): models.Model.__init__(self, arg1=arg1, arg2=arg2) class ModelTest(test.BaseTestCase): def test_create_attributes(self): m = FakeModel(1, 2) self.assertEqual(1, m.arg1) self.assertEqual(2, m.arg2) def test_as_dict(self): m = FakeModel(1, 2) d = m.as_dict() self.assertEqual({'arg1': 1, 'arg2': 2}, d) def test_as_dict_recursive(self): m = FakeModel(1, FakeModel('a', 'b')) d = m.as_dict() self.assertEqual({'arg1': 1, 'arg2': {'arg1': 'a', 'arg2': 'b'}}, d) def test_as_dict_recursive_list(self): m = FakeModel(1, [FakeModel('a', 'b')]) d = m.as_dict() self.assertEqual({'arg1': 1, 'arg2': [{'arg1': 'a', 'arg2': 'b'}]}, d) def test_event_repr_no_traits(self): x = models.Event("1", "name", "now", None) self.assertEqual("", repr(x)) def test_get_field_names_of_sample(self): sample_fields = ["source", "counter_name", "counter_type", "counter_unit", "counter_volume", "user_id", "project_id", "resource_id", "timestamp", "resource_metadata", "message_id", "message_signature", "recorded_at"] self.assertEqual(set(sample_fields), set(models.Sample.get_field_names())) def test_get_field_names_of_alarm(self): alarm_fields = ["alarm_id", "type", "enabled", "name", "description", "timestamp", "user_id", "project_id", "state", "state_timestamp", "ok_actions", "alarm_actions", "insufficient_data_actions", "repeat_actions", "rule", "time_constraints"] self.assertEqual(set(alarm_fields), set(models.Alarm.get_field_names())) def test_get_field_names_of_alarmchange(self): alarmchange_fields = ["event_id", "alarm_id", "type", "detail", "user_id", "project_id", "on_behalf_of", "timestamp"] self.assertEqual(set(alarmchange_fields), set(models.AlarmChange.get_field_names())) class TestTraitModel(test.BaseTestCase): def test_convert_value(self): v = models.Trait.convert_value( models.Trait.INT_TYPE, '10') self.assertEqual(10, v) self.assertIsInstance(v, int) v = models.Trait.convert_value( models.Trait.FLOAT_TYPE, '10') self.assertEqual(10.0, v) self.assertIsInstance(v, float) v = models.Trait.convert_value( models.Trait.DATETIME_TYPE, '2013-08-08 21:05:37.123456') self.assertEqual(datetime.datetime(2013, 8, 8, 21, 5, 37, 123456), v) self.assertIsInstance(v, datetime.datetime) v = models.Trait.convert_value( models.Trait.TEXT_TYPE, 10) self.assertEqual("10", v) self.assertIsInstance(v, str) ceilometer-2014.1/ceilometer/tests/storage/test_impl_mongodb.py0000664000175300017540000002012012323717132026077 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Tests for ceilometer/storage/impl_mongodb.py .. note:: In order to run the tests against another MongoDB server set the environment variable CEILOMETER_TEST_MONGODB_URL to point to a MongoDB server before running the tests. """ from ceilometer.storage import base from ceilometer.storage import impl_mongodb from ceilometer.tests import db as tests_db from ceilometer.tests.storage import test_storage_scenarios class MongoDBEngineTestBase(tests_db.TestBase): database_connection = tests_db.MongoDBFakeConnectionUrl() class MongoDBConnection(MongoDBEngineTestBase): def test_connection_pooling(self): self.assertEqual(self.conn.conn, impl_mongodb.Connection(self.CONF).conn) def test_replica_set(self): self.CONF.set_override( 'connection', str(tests_db.MongoDBFakeConnectionUrl()) + '?replicaSet=foobar', group='database') conn = impl_mongodb.Connection(self.CONF) self.assertTrue(conn.conn) def test_recurse_sort_keys(self): sort_keys = ['k1', 'k2', 'k3'] marker = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} flag = '$lt' ret = impl_mongodb.Connection._recurse_sort_keys(sort_keys=sort_keys, marker=marker, flag=flag) expect = {'k3': {'$lt': 'v3'}, 'k2': {'eq': 'v2'}, 'k1': {'eq': 'v1'}} self.assertEqual(expect, ret) class MongoDBTestMarkerBase(test_storage_scenarios.DBTestBase, MongoDBEngineTestBase): #NOTE(Fengqian): All these three test case are the same for resource #and meter collection. As to alarm, we will set up in AlarmTestPagination. def test_get_marker(self): marker_pairs = {'user_id': 'user-id-4'} ret = impl_mongodb.Connection._get_marker(self.conn.db.resource, marker_pairs) self.assertEqual('project-id-4', ret['project_id']) def test_get_marker_None(self): marker_pairs = {'user_id': 'user-id-foo'} try: ret = impl_mongodb.Connection._get_marker(self.conn.db.resource, marker_pairs) self.assertEqual('project-id-foo', ret['project_id']) except base.NoResultFound: self.assertTrue(True) def test_get_marker_multiple(self): try: marker_pairs = {'project_id': 'project-id'} ret = impl_mongodb.Connection._get_marker(self.conn.db.resource, marker_pairs) self.assertEqual('project-id-foo', ret['project_id']) except base.MultipleResultsFound: self.assertTrue(True) class IndexTest(MongoDBEngineTestBase): def test_meter_ttl_index_absent(self): # create a fake index and check it is deleted self.conn.db.meter.ensure_index('foo', name='meter_ttl') self.CONF.set_override('time_to_live', -1, group='database') self.conn.upgrade() self.assertTrue(self.conn.db.meter.ensure_index('foo', name='meter_ttl')) self.CONF.set_override('time_to_live', 456789, group='database') self.conn.upgrade() self.assertFalse(self.conn.db.meter.ensure_index('foo', name='meter_ttl')) def test_meter_ttl_index_present(self): self.CONF.set_override('time_to_live', 456789, group='database') self.conn.upgrade() self.assertFalse(self.conn.db.meter.ensure_index('foo', name='meter_ttl')) self.assertEqual(456789, self.conn.db.meter.index_information() ['meter_ttl']['expireAfterSeconds']) self.CONF.set_override('time_to_live', -1, group='database') self.conn.upgrade() self.assertTrue(self.conn.db.meter.ensure_index('foo', name='meter_ttl')) class AlarmTestPagination(test_storage_scenarios.AlarmTestBase, MongoDBEngineTestBase): def test_alarm_get_marker(self): self.add_some_alarms() marker_pairs = {'name': 'red-alert'} ret = impl_mongodb.Connection._get_marker(self.conn.db.alarm, marker_pairs=marker_pairs) self.assertEqual('test.one', ret['rule']['meter_name']) def test_alarm_get_marker_None(self): self.add_some_alarms() try: marker_pairs = {'name': 'user-id-foo'} ret = impl_mongodb.Connection._get_marker(self.conn.db.alarm, marker_pairs) self.assertEqual('meter_name-foo', ret['rule']['meter_name']) except base.NoResultFound: self.assertTrue(True) def test_alarm_get_marker_multiple(self): self.add_some_alarms() try: marker_pairs = {'user_id': 'me'} ret = impl_mongodb.Connection._get_marker(self.conn.db.alarm, marker_pairs) self.assertEqual('counter-name-foo', ret['rule']['meter_name']) except base.MultipleResultsFound: self.assertTrue(True) class CapabilitiesTest(MongoDBEngineTestBase): # Check the returned capabilities list, which is specific to each DB # driver def test_capabilities(self): expected_capabilities = { 'meters': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'resources': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'samples': {'pagination': False, 'groupby': False, 'query': {'simple': True, 'metadata': True, 'complex': True}}, 'statistics': {'pagination': False, 'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, 'aggregation': {'standard': True, 'selectable': { 'max': True, 'min': True, 'sum': True, 'avg': True, 'count': True, 'stddev': True, 'cardinality': True}} }, 'alarms': {'query': {'simple': True, 'complex': True}, 'history': {'query': {'simple': True, 'complex': True}}}, 'events': {'query': {'simple': False}} } actual_capabilities = self.conn.get_capabilities() self.assertEqual(expected_capabilities, actual_capabilities) ceilometer-2014.1/ceilometer/service.py0000664000175300017540000001341112323717132021231 0ustar jenkinsjenkins00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # # Copyright © 2012-2014 eNovance # # Author: Julien Danjou # # 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 os import socket import sys from oslo.config import cfg from stevedore import named from ceilometer.openstack.common import gettextutils from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import rpc from ceilometer import utils OPTS = [ cfg.StrOpt('host', default=socket.gethostname(), help='Name of this node, which must be valid in an AMQP ' 'key. Can be an opaque identifier. For ZeroMQ only, must ' 'be a valid host name, FQDN, or IP address.'), cfg.MultiStrOpt('dispatcher', deprecated_group="collector", default=['database'], help='Dispatcher to process data.'), cfg.IntOpt('collector_workers', default=1, help='Number of workers for collector service. A single ' 'collector is enabled by default.'), cfg.IntOpt('notification_workers', default=1, help='Number of workers for notification service. A single ' 'notification agent is enabled by default.'), ] cfg.CONF.register_opts(OPTS) CLI_OPTIONS = [ cfg.StrOpt('os-username', deprecated_group="DEFAULT", default=os.environ.get('OS_USERNAME', 'ceilometer'), help='User name to use for OpenStack service access.'), cfg.StrOpt('os-password', deprecated_group="DEFAULT", secret=True, default=os.environ.get('OS_PASSWORD', 'admin'), help='Password to use for OpenStack service access.'), cfg.StrOpt('os-tenant-id', deprecated_group="DEFAULT", default=os.environ.get('OS_TENANT_ID', ''), help='Tenant ID to use for OpenStack service access.'), cfg.StrOpt('os-tenant-name', deprecated_group="DEFAULT", default=os.environ.get('OS_TENANT_NAME', 'admin'), help='Tenant name to use for OpenStack service access.'), cfg.StrOpt('os-cacert', default=os.environ.get('OS_CACERT'), help='Certificate chain for SSL validation.'), cfg.StrOpt('os-auth-url', deprecated_group="DEFAULT", default=os.environ.get('OS_AUTH_URL', 'http://localhost:5000/v2.0'), help='Auth URL to use for OpenStack service access.'), cfg.StrOpt('os-region-name', deprecated_group="DEFAULT", default=os.environ.get('OS_REGION_NAME'), help='Region name to use for OpenStack service endpoints.'), cfg.StrOpt('os-endpoint-type', default=os.environ.get('OS_ENDPOINT_TYPE', 'publicURL'), help='Type of endpoint in Identity service catalog to use for ' 'communication with OpenStack services.'), cfg.BoolOpt('insecure', default=False, help='Disables X.509 certificate validation when an ' 'SSL connection to Identity Service is established.'), ] cfg.CONF.register_cli_opts(CLI_OPTIONS, group="service_credentials") LOG = log.getLogger(__name__) class WorkerException(Exception): """Exception for errors relating to service workers """ class DispatchedService(object): DISPATCHER_NAMESPACE = 'ceilometer.dispatcher' def start(self): super(DispatchedService, self).start() LOG.debug(_('loading dispatchers from %s'), self.DISPATCHER_NAMESPACE) self.dispatcher_manager = named.NamedExtensionManager( namespace=self.DISPATCHER_NAMESPACE, names=cfg.CONF.dispatcher, invoke_on_load=True, invoke_args=[cfg.CONF]) if not list(self.dispatcher_manager): LOG.warning(_('Failed to load any dispatchers for %s'), self.DISPATCHER_NAMESPACE) def get_workers(name): workers = (cfg.CONF.get('%s_workers' % name) or utils.cpu_count()) if workers and workers < 1: msg = (_("%(worker_name)s value of %(workers)s is invalid, " "must be greater than 0") % {'worker_name': '%s_workers' % name, 'workers': str(workers)}) raise WorkerException(msg) return workers def prepare_service(argv=None): gettextutils.install('ceilometer', lazy=True) gettextutils.enable_lazy() rpc.set_defaults(control_exchange='ceilometer') cfg.set_defaults(log.log_opts, default_log_levels=['amqplib=WARN', 'qpid.messaging=INFO', 'sqlalchemy=WARN', 'keystoneclient=INFO', 'stevedore=INFO', 'eventlet.wsgi.server=WARN', 'iso8601=WARN' ]) if argv is None: argv = sys.argv cfg.CONF(argv[1:], project='ceilometer') log.setup('ceilometer') ceilometer-2014.1/ceilometer/locale/0000775000175300017540000000000012323717426020464 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/it_IT/0000775000175300017540000000000012323717426021474 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/it_IT/LC_MESSAGES/0000775000175300017540000000000012323717426023261 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/it_IT/LC_MESSAGES/ceilometer.po0000664000175300017540000013523712323717130025754 0ustar jenkinsjenkins00000000000000# Italian (Italy) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Italian (Italy) " "(http://www.transifex.com/projects/p/openstack/language/it_IT/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ko/0000775000175300017540000000000012323717426021075 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ko/LC_MESSAGES/0000775000175300017540000000000012323717426022662 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ko/LC_MESSAGES/ceilometer.po0000664000175300017540000013520312323717130025346 0ustar jenkinsjenkins00000000000000# Korean translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Korean " "(http://www.transifex.com/projects/p/openstack/language/ko/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/bs/0000775000175300017540000000000012323717426021070 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/bs/LC_MESSAGES/0000775000175300017540000000000012323717426022655 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/bs/LC_MESSAGES/ceilometer.po0000664000175300017540000013533112323717130025343 0ustar jenkinsjenkins00000000000000# Bosnian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Bosnian " "(http://www.transifex.com/projects/p/openstack/language/bs/)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/hu/0000775000175300017540000000000012323717426021100 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/hu/LC_MESSAGES/0000775000175300017540000000000012323717426022665 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/hu/LC_MESSAGES/ceilometer.po0000664000175300017540000013522012323717130025350 0ustar jenkinsjenkins00000000000000# Hungarian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Hungarian " "(http://www.transifex.com/projects/p/openstack/language/hu/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/sv/0000775000175300017540000000000012323717426021114 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sv/LC_MESSAGES/0000775000175300017540000000000012323717426022701 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sv/LC_MESSAGES/ceilometer.po0000664000175300017540000013522212323717130025366 0ustar jenkinsjenkins00000000000000# Swedish translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-11-19 11:53+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Swedish " "(http://www.transifex.com/projects/p/openstack/language/sv/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/pl_PL/0000775000175300017540000000000012323717426021472 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pl_PL/LC_MESSAGES/0000775000175300017540000000000012323717426023257 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pl_PL/LC_MESSAGES/ceilometer.po0000664000175300017540000013573012323717130025750 0ustar jenkinsjenkins00000000000000# Polish (Poland) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # Cyryl Sochacki , 2013 msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-07-04 07:30+0000\n" "Last-Translator: Cyryl Sochacki \n" "Language-Team: Polish (Poland) " "(http://www.transifex.com/projects/p/openstack/language/pl_PL/)\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " "(n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "Nieprawidłowy alarm" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "INFO %r" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "ignorowanie %s" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "przetwarzanie %s" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "Nie można otworzyć gniazda." #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "Subskrybowanie do %s" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "Nie możesz wysłać na te gniazdo." #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "%(msg)s" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "Wysyłanie wiadomości do: %s" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/kn/0000775000175300017540000000000012323717426021074 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/kn/LC_MESSAGES/0000775000175300017540000000000012323717426022661 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/kn/LC_MESSAGES/ceilometer.po0000664000175300017540000013522412323717130025350 0ustar jenkinsjenkins00000000000000# Kannada translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-09-20 18:22+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Kannada " "(http://www.transifex.com/projects/p/openstack/language/kn/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/en_AU/0000775000175300017540000000000012323717426021453 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/en_AU/LC_MESSAGES/0000775000175300017540000000000012323717426023240 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/en_AU/LC_MESSAGES/ceilometer.po0000664000175300017540000013524712323717130025734 0ustar jenkinsjenkins00000000000000# English (Australia) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (Australia) " "(http://www.transifex.com/projects/p/openstack/language/en_AU/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/tl/0000775000175300017540000000000012323717426021103 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/tl/LC_MESSAGES/0000775000175300017540000000000012323717426022670 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/tl/LC_MESSAGES/ceilometer.po0000664000175300017540000013521312323717130025355 0ustar jenkinsjenkins00000000000000# Tagalog translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Tagalog " "(http://www.transifex.com/projects/p/openstack/language/tl/)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/es/0000775000175300017540000000000012323717426021073 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/es/LC_MESSAGES/0000775000175300017540000000000012323717426022660 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/es/LC_MESSAGES/ceilometer.po0000664000175300017540000013521412323717130025346 0ustar jenkinsjenkins00000000000000# Spanish translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Spanish " "(http://www.transifex.com/projects/p/openstack/language/es/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/he/0000775000175300017540000000000012323717426021060 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/he/LC_MESSAGES/0000775000175300017540000000000012323717426022645 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/he/LC_MESSAGES/ceilometer.po0000664000175300017540000013523112323717130025332 0ustar jenkinsjenkins00000000000000# Hebrew translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-02-25 08:27+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Hebrew " "(http://www.transifex.com/projects/p/openstack/language/he/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/is_IS/0000775000175300017540000000000012323717426021472 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/is_IS/LC_MESSAGES/0000775000175300017540000000000012323717426023257 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/is_IS/LC_MESSAGES/ceilometer.po0000664000175300017540000013526112323717130025747 0ustar jenkinsjenkins00000000000000# Icelandic (Iceland) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-12-16 02:36+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: Icelandic (Iceland) " "(http://www.transifex.com/projects/p/openstack/language/is_IS/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ja/0000775000175300017540000000000012323717426021056 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ja/LC_MESSAGES/0000775000175300017540000000000012323717426022643 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ja/LC_MESSAGES/ceilometer.po0000664000175300017540000013552112323717130025332 0ustar jenkinsjenkins00000000000000# Japanese translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # Tomoyuki KATO , 2013. msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-02-13 21:01+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Japanese " "(http://www.transifex.com/projects/p/openstack/language/ja/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "syslog ファシリティは次のどれかである必要があります: %s" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "%s を受信しました" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "受信したメッセージ: %s" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "%(msg)s" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/bg_BG/0000775000175300017540000000000012323717426021424 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/bg_BG/LC_MESSAGES/0000775000175300017540000000000012323717426023211 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/bg_BG/LC_MESSAGES/ceilometer.po0000664000175300017540000013525112323717130025700 0ustar jenkinsjenkins00000000000000# Bulgarian (Bulgaria) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Bulgarian (Bulgaria) " "(http://www.transifex.com/projects/p/openstack/language/bg_BG/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/zh_HK/0000775000175300017540000000000012323717426021467 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/zh_HK/LC_MESSAGES/0000775000175300017540000000000012323717426023254 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/zh_HK/LC_MESSAGES/ceilometer.po0000664000175300017540000013525212323717130025744 0ustar jenkinsjenkins00000000000000# Chinese (Hong Kong SAR China) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Chinese (Hong Kong) " "(http://www.transifex.com/projects/p/openstack/language/zh_HK/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/nl_NL/0000775000175300017540000000000012323717426021466 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/nl_NL/LC_MESSAGES/0000775000175300017540000000000012323717426023253 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/nl_NL/LC_MESSAGES/ceilometer.po0000664000175300017540000013524712323717130025747 0ustar jenkinsjenkins00000000000000# Dutch (Netherlands) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Dutch (Netherlands) " "(http://www.transifex.com/projects/p/openstack/language/nl_NL/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/tr_TR/0000775000175300017540000000000012323717426021516 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/tr_TR/LC_MESSAGES/0000775000175300017540000000000012323717426023303 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/tr_TR/LC_MESSAGES/ceilometer.po0000664000175300017540000013523212323717130025771 0ustar jenkinsjenkins00000000000000# Turkish (Turkey) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Turkish (Turkey) " "(http://www.transifex.com/projects/p/openstack/language/tr_TR/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/pt_BR/0000775000175300017540000000000012323717426021472 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pt_BR/LC_MESSAGES/0000775000175300017540000000000012323717426023257 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pt_BR/LC_MESSAGES/ceilometer.po0000664000175300017540000013524612323717130025752 0ustar jenkinsjenkins00000000000000# Portuguese (Brazil) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Portuguese (Brazil) " "(http://www.transifex.com/projects/p/openstack/language/pt_BR/)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/sr/0000775000175300017540000000000012323717426021110 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sr/LC_MESSAGES/0000775000175300017540000000000012323717426022675 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sr/LC_MESSAGES/ceilometer.po0000664000175300017540000013551212323717130025364 0ustar jenkinsjenkins00000000000000# Serbian translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # Nenad Jovanovic , 2014 msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-03-28 18:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Serbian " "(http://www.transifex.com/projects/p/openstack/language/sr/)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "Resurs" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "syslog okruženje mora biti jedno od: %s" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/fa/0000775000175300017540000000000012323717426021052 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fa/LC_MESSAGES/0000775000175300017540000000000012323717426022637 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fa/LC_MESSAGES/ceilometer.po0000664000175300017540000013521312323717130025324 0ustar jenkinsjenkins00000000000000# Persian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-11-19 11:53+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Persian " "(http://www.transifex.com/projects/p/openstack/language/fa/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ca/0000775000175300017540000000000012323717426021047 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ca/LC_MESSAGES/0000775000175300017540000000000012323717426022634 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ca/LC_MESSAGES/ceilometer.po0000664000175300017540000013521412323717130025322 0ustar jenkinsjenkins00000000000000# Catalan translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Catalan " "(http://www.transifex.com/projects/p/openstack/language/ca/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ml_IN/0000775000175300017540000000000012323717426021462 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ml_IN/LC_MESSAGES/0000775000175300017540000000000012323717426023247 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ml_IN/LC_MESSAGES/ceilometer.po0000664000175300017540000013525112323717130025736 0ustar jenkinsjenkins00000000000000# Malayalam (India) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-11-19 11:53+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Malayalam (India) " "(http://www.transifex.com/projects/p/openstack/language/ml_IN/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/sw_KE/0000775000175300017540000000000012323717426021474 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sw_KE/LC_MESSAGES/0000775000175300017540000000000012323717426023261 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sw_KE/LC_MESSAGES/ceilometer.po0000664000175300017540000013523712323717130025754 0ustar jenkinsjenkins00000000000000# Swahili (Kenya) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Swahili (Kenya) " "(http://www.transifex.com/projects/p/openstack/language/sw_KE/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/en_GB/0000775000175300017540000000000012323717426021436 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/en_GB/LC_MESSAGES/0000775000175300017540000000000012323717426023223 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/en_GB/LC_MESSAGES/ceilometer.po0000664000175300017540000013526112323717130025713 0ustar jenkinsjenkins00000000000000# English (United Kingdom) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United Kingdom) " "(http://www.transifex.com/projects/p/openstack/language/en_GB/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ko_KR/0000775000175300017540000000000012323717426021471 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ko_KR/LC_MESSAGES/0000775000175300017540000000000012323717426023256 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ko_KR/LC_MESSAGES/ceilometer.po0000664000175300017540000013541612323717130025750 0ustar jenkinsjenkins00000000000000# Korean (South Korea) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # ujuc Gang , 2013 msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-04-17 00:01+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: ko_KR \n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "INFO %r" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "Swift endpoint를 찾지 못하였습니다." #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "UNIQUE_ID는 %s입니다." #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "%s을 얻음" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "등록 리액터" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "Payload 생성" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "%(msg)s" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/fil/0000775000175300017540000000000012323717426021236 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fil/LC_MESSAGES/0000775000175300017540000000000012323717426023023 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fil/LC_MESSAGES/ceilometer.po0000664000175300017540000013523512323717130025514 0ustar jenkinsjenkins00000000000000# Filipino translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-10-01 03:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Filipino " "(http://www.transifex.com/projects/p/openstack/language/fil/)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ka_GE/0000775000175300017540000000000012323717426021432 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ka_GE/LC_MESSAGES/0000775000175300017540000000000012323717426023217 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ka_GE/LC_MESSAGES/ceilometer.po0000664000175300017540000013523612323717130025711 0ustar jenkinsjenkins00000000000000# Georgian (Georgia) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Georgian (Georgia) " "(http://www.transifex.com/projects/p/openstack/language/ka_GE/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/zh_CN/0000775000175300017540000000000012323717426021465 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/zh_CN/LC_MESSAGES/0000775000175300017540000000000012323717426023252 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/zh_CN/LC_MESSAGES/ceilometer.po0000664000175300017540000013523012323717130025736 0ustar jenkinsjenkins00000000000000# Chinese (China) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Chinese (China) " "(http://www.transifex.com/projects/p/openstack/language/zh_CN/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ceilometer.pot0000664000175300017540000013520012323717130023331 0ustar jenkinsjenkins00000000000000# Translations template for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # FIRST AUTHOR , 2014. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: ceilometer " "jenkins.ceilometer.propose.translation.update.452\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ta/0000775000175300017540000000000012323717426021070 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ta/LC_MESSAGES/0000775000175300017540000000000012323717426022655 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ta/LC_MESSAGES/ceilometer.po0000664000175300017540000013522712323717130025347 0ustar jenkinsjenkins00000000000000# Tamil translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-03-28 18:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Tamil " "(http://www.transifex.com/projects/p/openstack/language/ta/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ru_RU/0000775000175300017540000000000012323717426021520 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ru_RU/LC_MESSAGES/0000775000175300017540000000000012323717426023305 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ru_RU/LC_MESSAGES/ceilometer.po0000664000175300017540000013535612323717130026002 0ustar jenkinsjenkins00000000000000# Russian (Russia) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Russian (Russia) " "(http://www.transifex.com/projects/p/openstack/language/ru_RU/)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/sl_SI/0000775000175300017540000000000012323717426021475 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sl_SI/LC_MESSAGES/0000775000175300017540000000000012323717426023262 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sl_SI/LC_MESSAGES/ceilometer.po0000664000175300017540000013535212323717130025753 0ustar jenkinsjenkins00000000000000# Slovenian (Slovenia) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-06-28 06:06+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: Slovenian (Slovenia) " "(http://www.transifex.com/projects/p/openstack/language/sl_SI/)\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 " "|| n%100==4 ? 2 : 3)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/hi/0000775000175300017540000000000012323717426021064 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/hi/LC_MESSAGES/0000775000175300017540000000000012323717426022651 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/hi/LC_MESSAGES/ceilometer.po0000664000175300017540000013522212323717130025336 0ustar jenkinsjenkins00000000000000# Hindi translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-08-27 04:58+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: Hindi " "(http://www.transifex.com/projects/p/openstack/language/hi/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/he_IL/0000775000175300017540000000000012323717426021444 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/he_IL/LC_MESSAGES/0000775000175300017540000000000012323717426023231 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/he_IL/LC_MESSAGES/ceilometer.po0000664000175300017540000013525612323717130025725 0ustar jenkinsjenkins00000000000000# Hebrew (Israel) translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-02-25 08:27+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Hebrew (Israel) " "(http://www.transifex.com/projects/p/openstack/language/he_IL/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/fi_FI/0000775000175300017540000000000012323717426021440 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fi_FI/LC_MESSAGES/0000775000175300017540000000000012323717426023225 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fi_FI/LC_MESSAGES/ceilometer.po0000664000175300017540000013524312323717130025715 0ustar jenkinsjenkins00000000000000# Finnish (Finland) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Finnish (Finland) " "(http://www.transifex.com/projects/p/openstack/language/fi_FI/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/el/0000775000175300017540000000000012323717426021064 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/el/LC_MESSAGES/0000775000175300017540000000000012323717426022651 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/el/LC_MESSAGES/ceilometer.po0000664000175300017540000013522712323717130025343 0ustar jenkinsjenkins00000000000000# Greek translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-03-28 18:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Greek " "(http://www.transifex.com/projects/p/openstack/language/el/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/km/0000775000175300017540000000000012323717426021073 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/km/LC_MESSAGES/0000775000175300017540000000000012323717426022660 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/km/LC_MESSAGES/ceilometer.po0000664000175300017540000013520712323717130025350 0ustar jenkinsjenkins00000000000000# Khmer translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-11-19 11:53+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Khmer " "(http://www.transifex.com/projects/p/openstack/language/km/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ru/0000775000175300017540000000000012323717426021112 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ru/LC_MESSAGES/0000775000175300017540000000000012323717426022677 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ru/LC_MESSAGES/ceilometer.po0000664000175300017540000013533112323717130025365 0ustar jenkinsjenkins00000000000000# Russian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Russian " "(http://www.transifex.com/projects/p/openstack/language/ru/)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/te_IN/0000775000175300017540000000000012323717426021462 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/te_IN/LC_MESSAGES/0000775000175300017540000000000012323717426023247 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/te_IN/LC_MESSAGES/ceilometer.po0000664000175300017540000013525412323717130025741 0ustar jenkinsjenkins00000000000000# Telugu (India) translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-03-28 18:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Telugu (India) " "(http://www.transifex.com/projects/p/openstack/language/te_IN/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/da/0000775000175300017540000000000012323717426021050 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/da/LC_MESSAGES/0000775000175300017540000000000012323717426022635 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/da/LC_MESSAGES/ceilometer.po0000664000175300017540000013612712323717130025327 0ustar jenkinsjenkins00000000000000# Danish translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # Jens Hyllegaard , 2013 msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-05-16 08:53+0000\n" "Last-Translator: Jens Hyllegaard \n" "Language-Team: Danish " "(http://www.transifex.com/projects/p/openstack/language/da/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "Alarm er forkert" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "INFO %r" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "ignorerer %s" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "behandler %s" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "syslog faciliteten skal være en af: %s" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "Fatalt kald til forældet konfig: %(msg)s" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "Ubehandlet undtagelse" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "Ugyldig parameter: Unicode er ikke understøttet af den aktuelle database." #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "modtog %s" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "ingen metode for beskeden: %s" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "Ingen metode for beskeden: %s" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "MSG_ID er %s" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "Undtagelse i streng-format handlingen" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "Udpakker svar" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "%(msg)s" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "Sender besked(er) til: %s" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/mr_IN/0000775000175300017540000000000012323717426021470 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/mr_IN/LC_MESSAGES/0000775000175300017540000000000012323717426023255 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/mr_IN/LC_MESSAGES/ceilometer.po0000664000175300017540000013525612323717130025751 0ustar jenkinsjenkins00000000000000# Marathi (India) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-10-18 09:52+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Marathi (India) " "(http://www.transifex.com/projects/p/openstack/language/mr_IN/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/pa_IN/0000775000175300017540000000000012323717426021452 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pa_IN/LC_MESSAGES/0000775000175300017540000000000012323717426023237 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pa_IN/LC_MESSAGES/ceilometer.po0000664000175300017540000013527112323717130025730 0ustar jenkinsjenkins00000000000000# Punjabi (Gurmukhi, India) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-12-15 04:38+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Panjabi (Punjabi) (India) " "(http://www.transifex.com/projects/p/openstack/language/pa_IN/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/id/0000775000175300017540000000000012323717426021060 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/id/LC_MESSAGES/0000775000175300017540000000000012323717426022645 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/id/LC_MESSAGES/ceilometer.po0000664000175300017540000013521312323717130025332 0ustar jenkinsjenkins00000000000000# Indonesian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Indonesian " "(http://www.transifex.com/projects/p/openstack/language/id/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/de/0000775000175300017540000000000012323717426021054 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/de/LC_MESSAGES/0000775000175300017540000000000012323717426022641 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/de/LC_MESSAGES/ceilometer.po0000664000175300017540000013522412323717130025330 0ustar jenkinsjenkins00000000000000# German translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-05-22 03:36+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: German " "(http://www.transifex.com/projects/p/openstack/language/de/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/eu/0000775000175300017540000000000012323717426021075 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/eu/LC_MESSAGES/0000775000175300017540000000000012323717426022662 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/eu/LC_MESSAGES/ceilometer.po0000664000175300017540000013523112323717130025347 0ustar jenkinsjenkins00000000000000# Basque translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-11-19 11:53+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Basque " "(http://www.transifex.com/projects/p/openstack/language/eu/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/sq/0000775000175300017540000000000012323717426021107 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sq/LC_MESSAGES/0000775000175300017540000000000012323717426022674 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sq/LC_MESSAGES/ceilometer.po0000664000175300017540000013523512323717130025365 0ustar jenkinsjenkins00000000000000# Albanian translations for ceilometer. # Copyright (C) 2014 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2014-03-28 18:51+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Albanian " "(http://www.transifex.com/projects/p/openstack/language/sq/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ne/0000775000175300017540000000000012323717426021066 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ne/LC_MESSAGES/0000775000175300017540000000000012323717426022653 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ne/LC_MESSAGES/ceilometer.po0000664000175300017540000013523112323717130025340 0ustar jenkinsjenkins00000000000000# Nepali translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-09-10 10:38+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Nepali " "(http://www.transifex.com/projects/p/openstack/language/ne/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ro/0000775000175300017540000000000012323717426021104 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ro/LC_MESSAGES/0000775000175300017540000000000012323717426022671 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ro/LC_MESSAGES/ceilometer.po0000664000175300017540000013530412323717130025357 0ustar jenkinsjenkins00000000000000# Romanian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-06-08 07:51+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: Romanian " "(http://www.transifex.com/projects/p/openstack/language/ro/)\n" "Plural-Forms: nplurals=3; " "plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/fr/0000775000175300017540000000000012323717426021073 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fr/LC_MESSAGES/0000775000175300017540000000000012323717426022660 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/fr/LC_MESSAGES/ceilometer.po0000664000175300017540000013564212323717130025353 0ustar jenkinsjenkins00000000000000# French translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # Nick Barcet , 2013. msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-03-05 15:41+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "La fonction syslog doit être l'une de: %s" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "Appel fatal a une configuration obsolète: %(msg)s" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 #, fuzzy msgid "in fixed duration looping call" msgstr "en appel de boucle" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 #, fuzzy msgid "in dynamic looping call" msgstr "en appel de boucle" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "Il n'y a pas de correspondance du type %s" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "CONF complète:" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "Exception %s, fermeture" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "Le process parent est inopinément décédé, fermeture" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/hr/0000775000175300017540000000000012323717426021075 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/hr/LC_MESSAGES/0000775000175300017540000000000012323717426022662 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/hr/LC_MESSAGES/ceilometer.po0000664000175300017540000013533112323717130025350 0ustar jenkinsjenkins00000000000000# Croatian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Croatian " "(http://www.transifex.com/projects/p/openstack/language/hr/)\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/pt/0000775000175300017540000000000012323717426021107 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pt/LC_MESSAGES/0000775000175300017540000000000012323717426022674 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/pt/LC_MESSAGES/ceilometer.po0000664000175300017540000013522212323717130025361 0ustar jenkinsjenkins00000000000000# Portuguese translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Portuguese " "(http://www.transifex.com/projects/p/openstack/language/pt/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/sk/0000775000175300017540000000000012323717426021101 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sk/LC_MESSAGES/0000775000175300017540000000000012323717426022666 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/sk/LC_MESSAGES/ceilometer.po0000664000175300017540000013525712323717130025363 0ustar jenkinsjenkins00000000000000# Slovak translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-08-27 04:58+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: Slovak " "(http://www.transifex.com/projects/p/openstack/language/sk/)\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/bn_IN/0000775000175300017540000000000012323717426021451 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/bn_IN/LC_MESSAGES/0000775000175300017540000000000012323717426023236 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/bn_IN/LC_MESSAGES/ceilometer.po0000664000175300017540000013524512323717130025730 0ustar jenkinsjenkins00000000000000# Bengali (India) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-10-20 01:34+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Bengali (India) " "(http://www.transifex.com/projects/p/openstack/language/bn_IN/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/it/0000775000175300017540000000000012323717426021100 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/it/LC_MESSAGES/0000775000175300017540000000000012323717426022665 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/it/LC_MESSAGES/ceilometer.po0000664000175300017540000013567012323717130025361 0ustar jenkinsjenkins00000000000000# Italian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: # Stefano Maffulli , 2013 msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-04-17 22:06+0000\n" "Last-Translator: Stefano Maffulli \n" "Language-Team: it \n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "syslog deve essere ad uno dei livelli: %s" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "Chiamata a configurazione deprecata: %(msg)s" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "Nessun metodo definito per %s" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "Insieme complet di CONF:" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "Ricevuto %s, in uscita" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "Il processo padre è morto inaspettatamente, esco" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "Separazioni troppo rapide, in pausa" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "Avviato il processo figlio %d" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "%d elaborazioni avviate " #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/tl_PH/0000775000175300017540000000000012323717426021472 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/tl_PH/LC_MESSAGES/0000775000175300017540000000000012323717426023257 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/tl_PH/LC_MESSAGES/ceilometer.po0000664000175300017540000013527212323717130025751 0ustar jenkinsjenkins00000000000000# Filipino (Philippines) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-10-01 03:40+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Tagalog (Philippines) " "(http://www.transifex.com/projects/p/openstack/language/tl_PH/)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/gl/0000775000175300017540000000000012323717426021066 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/gl/LC_MESSAGES/0000775000175300017540000000000012323717426022653 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/gl/LC_MESSAGES/ceilometer.po0000664000175300017540000013522412323717130025342 0ustar jenkinsjenkins00000000000000# Galician translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-10-28 23:23+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Galician " "(http://www.transifex.com/projects/p/openstack/language/gl/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/nb/0000775000175300017540000000000012323717426021063 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/nb/LC_MESSAGES/0000775000175300017540000000000012323717426022650 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/nb/LC_MESSAGES/ceilometer.po0000664000175300017540000013524012323717130025335 0ustar jenkinsjenkins00000000000000# Norwegian Bokmål translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Norwegian Bokmål " "(http://www.transifex.com/projects/p/openstack/language/nb/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/vi_VN/0000775000175300017540000000000012323717426021505 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/vi_VN/LC_MESSAGES/0000775000175300017540000000000012323717426023272 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/vi_VN/LC_MESSAGES/ceilometer.po0000664000175300017540000013524312323717130025762 0ustar jenkinsjenkins00000000000000# Vietnamese (Vietnam) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Vietnamese (Viet Nam) " "(http://www.transifex.com/projects/p/openstack/language/vi_VN/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ms/0000775000175300017540000000000012323717426021103 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ms/LC_MESSAGES/0000775000175300017540000000000012323717426022670 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ms/LC_MESSAGES/ceilometer.po0000664000175300017540000013520112323717130025352 0ustar jenkinsjenkins00000000000000# Malay translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Malay " "(http://www.transifex.com/projects/p/openstack/language/ms/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/eu_ES/0000775000175300017540000000000012323717426021464 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/eu_ES/LC_MESSAGES/0000775000175300017540000000000012323717426023251 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/eu_ES/LC_MESSAGES/ceilometer.po0000664000175300017540000013524712323717130025745 0ustar jenkinsjenkins00000000000000# Basque (Spain) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-11-19 11:53+0000\n" "Last-Translator: daisy.ycguo \n" "Language-Team: Basque (Spain) " "(http://www.transifex.com/projects/p/openstack/language/eu_ES/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/en_US/0000775000175300017540000000000012323717426021475 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/en_US/LC_MESSAGES/0000775000175300017540000000000012323717426023262 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/en_US/LC_MESSAGES/ceilometer.po0000664000175300017540000013525712323717130025757 0ustar jenkinsjenkins00000000000000# English (United States) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: English (United States) " "(http://www.transifex.com/projects/p/openstack/language/en_US/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ar/0000775000175300017540000000000012323717426021066 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ar/LC_MESSAGES/0000775000175300017540000000000012323717426022653 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ar/LC_MESSAGES/ceilometer.po0000664000175300017540000013534612323717130025347 0ustar jenkinsjenkins00000000000000# Arabic translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-09-12 07:56+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Arabic " "(http://www.transifex.com/projects/p/openstack/language/ar/)\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : " "n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/es_MX/0000775000175300017540000000000012323717426021477 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/es_MX/LC_MESSAGES/0000775000175300017540000000000012323717426023264 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/es_MX/LC_MESSAGES/ceilometer.po0000664000175300017540000013524712323717130025760 0ustar jenkinsjenkins00000000000000# Spanish (Mexico) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-08-29 05:16+0000\n" "Last-Translator: Tom Fifield \n" "Language-Team: Spanish (Mexico) " "(http://www.transifex.com/projects/p/openstack/language/es_MX/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/zh_TW/0000775000175300017540000000000012323717426021517 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/zh_TW/LC_MESSAGES/0000775000175300017540000000000012323717426023304 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/zh_TW/LC_MESSAGES/ceilometer.po0000664000175300017540000013525112323717130025773 0ustar jenkinsjenkins00000000000000# Chinese (Taiwan) translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-02-13 21:01+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Chinese (Taiwan) " "(http://www.transifex.com/projects/p/openstack/language/zh_TW/)\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/uk/0000775000175300017540000000000012323717426021103 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/uk/LC_MESSAGES/0000775000175300017540000000000012323717426022670 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/uk/LC_MESSAGES/ceilometer.po0000664000175300017540000013533512323717130025362 0ustar jenkinsjenkins00000000000000# Ukrainian translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Ukrainian " "(http://www.transifex.com/projects/p/openstack/language/uk/)\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/cs/0000775000175300017540000000000012323717426021071 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/cs/LC_MESSAGES/0000775000175300017540000000000012323717426022656 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/cs/LC_MESSAGES/ceilometer.po0000664000175300017540000013524312323717130025346 0ustar jenkinsjenkins00000000000000# Czech translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2012-12-11 06:53+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Czech " "(http://www.transifex.com/projects/p/openstack/language/cs/)\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/locale/ur/0000775000175300017540000000000012323717426021112 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ur/LC_MESSAGES/0000775000175300017540000000000012323717426022677 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/locale/ur/LC_MESSAGES/ceilometer.po0000664000175300017540000013522512323717130025367 0ustar jenkinsjenkins00000000000000# Urdu translations for ceilometer. # Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the ceilometer project. # # Translators: msgid "" msgstr "" "Project-Id-Version: Ceilometer\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2014-03-31 06:07+0000\n" "PO-Revision-Date: 2013-10-18 09:52+0000\n" "Last-Translator: openstackjenkins \n" "Language-Team: Urdu " "(http://www.transifex.com/projects/p/openstack/language/ur/)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" #: ceilometer/agent.py:84 #, python-format msgid "Polling pollster %s" msgstr "" #: ceilometer/agent.py:94 #, python-format msgid "Continue after error from %(name)s: %(error)s" msgstr "" #: ceilometer/agent.py:169 #, python-format msgid "Unable to discover resources: %s" msgstr "" #: ceilometer/agent.py:171 #, python-format msgid "Unknown discovery extension: %s" msgstr "" #: ceilometer/cli.py:119 msgid "Clearing expired metering data" msgstr "" #: ceilometer/cli.py:124 msgid "Nothing to clean, database time to live is disabled" msgstr "" #: ceilometer/collector.py:77 #, python-format msgid "UDP: Cannot decode data sent by %s" msgstr "" #: ceilometer/collector.py:80 #, python-format msgid "UDP: Storing %s" msgstr "" #: ceilometer/collector.py:84 msgid "UDP: Unable to store meter" msgstr "" #: ceilometer/notification.py:70 msgid "Loading event definitions" msgstr "" #: ceilometer/notification.py:82 ceilometer/notifier.py:47 #, python-format msgid "Failed to load any notification handlers for %s" msgstr "" #: ceilometer/notification.py:100 #, python-format msgid "Event types from %(name)s: %(type)s (ack_on_error=%(error)s)" msgstr "" #: ceilometer/notification.py:116 #, python-format msgid "Could not join consumer pool %(topic)s/%(exchange)s" msgstr "" #: ceilometer/notification.py:128 #, python-format msgid "notification %r" msgstr "" #: ceilometer/notification.py:145 #, python-format msgid "Saving event \"%s\"" msgstr "" #: ceilometer/notifier.py:40 #, python-format msgid "loading notification handlers from %s" msgstr "" #: ceilometer/pipeline.py:237 #, python-format msgid "Unable to load publisher %s" msgstr "" #: ceilometer/pipeline.py:256 #, python-format msgid "" "Pipeline %(pipeline)s: Setup transformer instance %(name)s with parameter" " %(param)s" msgstr "" #: ceilometer/pipeline.py:269 #, python-format msgid "Pipeline %(pipeline)s: Sample dropped by transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:276 #, python-format msgid "" "Pipeline %(pipeline)s: Exit after error from transformer %(trans)s for " "%(smp)s" msgstr "" #: ceilometer/pipeline.py:296 #, python-format msgid "Pipeline %(pipeline)s: Transform sample %(smp)s from %(trans)s transformer" msgstr "" #: ceilometer/pipeline.py:306 #, python-format msgid "Pipeline %s: Publishing samples" msgstr "" #: ceilometer/pipeline.py:311 #, python-format msgid "Pipeline %(pipeline)s: Continue after error from publisher %(pub)s" msgstr "" #: ceilometer/pipeline.py:315 #, python-format msgid "Pipeline %s: Published samples" msgstr "" #: ceilometer/pipeline.py:331 #, python-format msgid "Pipeline %(pipeline)s: Error flushing transformer %(trans)s" msgstr "" #: ceilometer/pipeline.py:492 msgid "detected decoupled pipeline config format" msgstr "" #: ceilometer/pipeline.py:502 msgid "detected deprecated pipeline config format" msgstr "" #: ceilometer/pipeline.py:522 #, python-format msgid "Pipeline config file: %s" msgstr "" #: ceilometer/pipeline.py:528 #, python-format msgid "Pipeline config: %s" msgstr "" #: ceilometer/service.py:111 #, python-format msgid "loading dispatchers from %s" msgstr "" #: ceilometer/service.py:119 #, python-format msgid "Failed to load any dispatchers for %s" msgstr "" #: ceilometer/service.py:127 #, python-format msgid "%(worker_name)s value of %(workers)s is invalid, must be greater than 0" msgstr "" #: ceilometer/alarm/rpc.py:52 #, python-format msgid "" "alarm %(alarm_id)s has no action configured for state transition from " "%(previous)s to state %(state)s, skipping the notification." msgstr "" #: ceilometer/alarm/service.py:92 #, python-format msgid "initiating evaluation cycle on %d alarms" msgstr "" #: ceilometer/alarm/service.py:97 msgid "alarm evaluation cycle failed" msgstr "" #: ceilometer/alarm/service.py:102 #, python-format msgid "skipping alarm %s: type unsupported" msgstr "" #: ceilometer/alarm/service.py:106 #, python-format msgid "evaluating alarm %s" msgstr "" #: ceilometer/alarm/service.py:153 ceilometer/alarm/service.py:211 msgid "initialize_service_hooks" msgstr "" #: ceilometer/alarm/service.py:224 #, python-format msgid "Unable to parse action %(action)s for alarm %(alarm_id)s" msgstr "" #: ceilometer/alarm/service.py:233 #, python-format msgid "Action %(scheme)s for alarm %(alarm_id)s is unknown, cannot notify" msgstr "" #: ceilometer/alarm/service.py:239 #, python-format msgid "Notifying alarm %(id)s with action %(act)s" msgstr "" #: ceilometer/alarm/service.py:244 #, python-format msgid "Unable to notify alarm %s" msgstr "" #: ceilometer/alarm/service.py:264 msgid "Unable to notify for an alarm with no action" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:71 #, python-format msgid "alarm %(id)s transitioning to %(state)s because %(reason)s" msgstr "" #: ceilometer/alarm/evaluator/__init__.py:83 msgid "alarm state update failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:37 msgid "alarm retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/combination.py:51 #, python-format msgid "Alarms %(alarm_ids)s are in unknown state" msgstr "" #: ceilometer/alarm/evaluator/combination.py:74 #, python-format msgid "Transition to %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:78 #, python-format msgid "Remaining as %(state)s due to alarms %(alarm_ids)s in state %(state)s" msgstr "" #: ceilometer/alarm/evaluator/combination.py:100 #: ceilometer/alarm/evaluator/threshold.py:177 #, python-format msgid "Attempted to evaluate alarm %s, but it is not within its time constraint." msgstr "" #: ceilometer/alarm/evaluator/threshold.py:63 #, python-format msgid "query stats from %(start)s to %(now)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:74 #, python-format msgid "sanitize stats %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:83 #, python-format msgid "excluded weak datapoints with sample counts %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:92 #, python-format msgid "pruned statistics to %d" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:97 #, python-format msgid "stats query %s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:103 msgid "alarm stats retrieval failed" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:112 #, python-format msgid "%d datapoints are unknown" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:136 #, python-format msgid "" "Transition to %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:140 #, python-format msgid "" "Remaining as %(state)s due to %(count)d samples %(disposition)s " "threshold, most recent: %(most_recent)s" msgstr "" #: ceilometer/alarm/evaluator/threshold.py:196 #, python-format msgid "comparing value %(value)s against threshold %(limit)s" msgstr "" #: ceilometer/alarm/notifier/log.py:32 ceilometer/alarm/notifier/rest.py:58 #, python-format msgid "" "Notifying alarm %(alarm_id)s from %(previous)s to %(current)s with action" " %(action)s because %(reason)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:132 #, python-format msgid "triggering %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:133 #, python-format msgid "known evaluators %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:136 #, python-format msgid "per evaluator allocation %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:146 #, python-format msgid "" "%(this)s bailing on distribution cycle as older partition detected: " "%(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:152 #, python-format msgid "%(verb)s-ing %(alloc)s to %(eval)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:156 #, python-format msgid "master taking %s for self" msgstr "" #: ceilometer/alarm/partition/coordination.py:174 #, python-format msgid "newly deleted alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:177 msgid "alarm deletion activity requires rebalance" msgstr "" #: ceilometer/alarm/partition/coordination.py:202 #, python-format msgid "%s still warming up" msgstr "" #: ceilometer/alarm/partition/coordination.py:207 #, python-format msgid "last heard from %(report)s %(delta)s seconds ago" msgstr "" #: ceilometer/alarm/partition/coordination.py:212 #, python-format msgid "%(this)s detects stale evaluator: %(stale)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:217 #, python-format msgid "%(this)s sees older potential master: %(older)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:219 #, python-format msgid "%(this)s is master?: %(is_master)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:232 #, python-format msgid "newly created alarms %s" msgstr "" #: ceilometer/alarm/partition/coordination.py:243 #, python-format msgid "%(this)s not overtaken as master? %(still_ahead)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:253 #, python-format msgid "%s checking mastership status" msgstr "" #: ceilometer/alarm/partition/coordination.py:260 msgid "mastership check failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:270 #, python-format msgid "%(this)s knows about %(reports)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:276 #, python-format msgid "%(this)s got assignment: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:283 #, python-format msgid "%(this)s got allocation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:289 #, python-format msgid "%s reporting presence" msgstr "" #: ceilometer/alarm/partition/coordination.py:293 msgid "presence reporting failed" msgstr "" #: ceilometer/alarm/partition/coordination.py:298 #, python-format msgid "%s has no assigned alarms to evaluate" msgstr "" #: ceilometer/alarm/partition/coordination.py:302 #, python-format msgid "%(this)s alarms for evaluation: %(alarms)s" msgstr "" #: ceilometer/alarm/partition/coordination.py:308 msgid "assignment retrieval failed" msgstr "" #: ceilometer/api/app.py:133 #, python-format msgid "Starting server in PID %s" msgstr "" #: ceilometer/api/app.py:134 msgid "Configuration:" msgstr "" #: ceilometer/api/app.py:138 #, python-format msgid "serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s" msgstr "" #: ceilometer/api/app.py:142 #, python-format msgid "serving on http://%(host)s:%(port)s" msgstr "" #: ceilometer/api/middleware.py:112 #, python-format msgid "Error parsing HTTP response: %s" msgstr "" #: ceilometer/api/controllers/v2.py:86 #, python-format msgid "%(entity)s %(id)s Not Found" msgstr "" #: ceilometer/api/controllers/v2.py:245 #, python-format msgid "Failed to convert the metadata value %s automatically" msgstr "" #: ceilometer/api/controllers/v2.py:257 #, python-format msgid "Failed to convert the value %(value)s to the expected data type %(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:262 #, python-format msgid "" "The data type %(type)s is not supported. The supported data type list is:" " %(supported)s" msgstr "" #: ceilometer/api/controllers/v2.py:267 #, python-format msgid "" "Unexpected exception converting %(value)s to the expected data type " "%(type)s." msgstr "" #: ceilometer/api/controllers/v2.py:278 #, python-format msgid "Not Authorized to access %(aspect)s %(id)s" msgstr "" #: ceilometer/api/controllers/v2.py:737 ceilometer/api/v1/blueprint.py:579 msgid "clamping min timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:742 ceilometer/api/v1/blueprint.py:582 msgid "clamping max timestamp to range" msgstr "" #: ceilometer/api/controllers/v2.py:818 ceilometer/api/controllers/v2.py:1074 msgid "Limit must be positive" msgstr "" #: ceilometer/api/controllers/v2.py:896 msgid "Period must be positive." msgstr "" #: ceilometer/api/controllers/v2.py:908 #, python-format msgid "computed value coming from %r" msgstr "" #: ceilometer/api/controllers/v2.py:1090 msgid "Sample" msgstr "" #: ceilometer/api/controllers/v2.py:1272 msgid "Limit should be positive" msgstr "" #: ceilometer/api/controllers/v2.py:1364 #, python-format msgid "String %s is not a valid isotime" msgstr "" #: ceilometer/api/controllers/v2.py:1365 #, python-format msgid "Failed to parse the timestamp value %s" msgstr "" #: ceilometer/api/controllers/v2.py:1451 msgid "Resource" msgstr "" #: ceilometer/api/controllers/v2.py:1525 #, python-format msgid "" "Alarm when %(meter_name)s is %(comparison_operator)s a %(statistic)s of " "%(threshold)s over %(period)s seconds" msgstr "" #: ceilometer/api/controllers/v2.py:1566 #, python-format msgid "Combined state of alarms %s" msgstr "" #: ceilometer/api/controllers/v2.py:1618 #, python-format msgid "Timezone %s is not valid" msgstr "" #: ceilometer/api/controllers/v2.py:1739 ceilometer/api/controllers/v2.py:1855 msgid "Alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1743 msgid "Time constraint names must be unique for a given alarm." msgstr "" #: ceilometer/api/controllers/v2.py:1753 #, python-format msgid "%(rule)s must be set for %(type)s type alarm" msgstr "" #: ceilometer/api/controllers/v2.py:1757 msgid "threshold_rule and combination_rule cannot be set at the same time" msgstr "" #: ceilometer/api/controllers/v2.py:1924 #, python-format msgid "Alarm with name=%s exists" msgstr "" #: ceilometer/api/controllers/v2.py:1932 #, python-format msgid "Error while putting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:1933 ceilometer/api/controllers/v2.py:2081 msgid "Alarm incorrect" msgstr "" #: ceilometer/api/controllers/v2.py:1983 msgid "state invalid" msgstr "" #: ceilometer/api/controllers/v2.py:2074 #, python-format msgid "Alarm with name='%s' exists" msgstr "" #: ceilometer/api/controllers/v2.py:2080 #, python-format msgid "Error while posting alarm: %s" msgstr "" #: ceilometer/api/controllers/v2.py:2231 #, python-format msgid "operator %s not supported" msgstr "" #: ceilometer/api/controllers/v2.py:2252 #, python-format msgid "Getting traits for %s" msgstr "" #: ceilometer/api/controllers/v2.py:2316 msgid "Event" msgstr "" #: ceilometer/api/controllers/v2.py:2319 #, python-format msgid "More than one event with id %s returned from storage driver" msgstr "" #: ceilometer/api/v1/blueprint.py:569 #, python-format msgid "" "start_timestamp %(start_timestamp)s, end_timestamp %(end_timestamp)s, " "min_ts %(min_ts)s, max_ts %(max_ts)s" msgstr "" #: ceilometer/central/manager.py:48 #, python-format msgid "Skip interval_task because Keystone error: %s" msgstr "" #: ceilometer/compute/nova_notifier.py:82 #, python-format msgid "using provided stats gatherer %r" msgstr "" #: ceilometer/compute/nova_notifier.py:85 msgid "making a new stats gatherer" msgstr "" #: ceilometer/compute/nova_notifier.py:114 #, python-format msgid "INFO %r" msgstr "" #: ceilometer/compute/nova_notifier.py:147 #, python-format msgid "ignoring %s" msgstr "" #: ceilometer/compute/nova_notifier.py:149 #, python-format msgid "processing %s" msgstr "" #: ceilometer/compute/nova_notifier.py:153 #, python-format msgid "polling final stats for %r" msgstr "" #: ceilometer/compute/notifications/cpu.py:55 #, python-format msgid "An error occurred while building %(m)s sample: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:35 #, python-format msgid "checking instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:39 #, python-format msgid "CPUTIME USAGE: %(instance)s %(time)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:53 #: ceilometer/compute/pollsters/cpu.py:85 #: ceilometer/compute/pollsters/disk.py:97 #: ceilometer/compute/pollsters/disk.py:205 #: ceilometer/compute/pollsters/memory.py:47 #: ceilometer/compute/pollsters/net.py:104 #, python-format msgid "Exception while getting samples %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:56 #, python-format msgid "Obtaining CPU time is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:59 #, python-format msgid "could not get CPU time for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:69 #, python-format msgid "Checking CPU util for instance %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:73 #, python-format msgid "CPU UTIL: %(instance)s %(util)d" msgstr "" #: ceilometer/compute/pollsters/cpu.py:88 #, python-format msgid "Obtaining CPU Util is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/cpu.py:91 #, python-format msgid "Could not get CPU Util for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:100 #: ceilometer/compute/pollsters/disk.py:208 #: ceilometer/compute/pollsters/net.py:107 #, python-format msgid "%(inspector)s does not provide data for %(pollster)s" msgstr "" #: ceilometer/compute/pollsters/disk.py:105 #: ceilometer/compute/pollsters/disk.py:214 #: ceilometer/compute/pollsters/net.py:112 #, python-format msgid "Ignoring instance %(name)s: %(error)s" msgstr "" #: ceilometer/compute/pollsters/memory.py:31 #, python-format msgid "Checking memory usage for instance %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:35 #, python-format msgid "MEMORY USAGE: %(instance)s %(usage)f" msgstr "" #: ceilometer/compute/pollsters/memory.py:50 #, python-format msgid "Obtaining Memory Usage is not implemented for %s" msgstr "" #: ceilometer/compute/pollsters/memory.py:53 #, python-format msgid "Could not get Memory Usage for %(id)s: %(e)s" msgstr "" #: ceilometer/compute/pollsters/net.py:90 #, python-format msgid "checking net info for instance %s" msgstr "" #: ceilometer/compute/virt/inspector.py:231 #, python-format msgid "Unable to load the hypervisor inspector: %s" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:182 #, python-format msgid "VM %s not found on Hyper-V" msgstr "" #: ceilometer/compute/virt/hyperv/utilsv2.py:184 #, python-format msgid "Duplicate VM name found: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:64 #, python-format msgid "Connecting to libvirt: %s" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:77 msgid "Connection to libvirt broke" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:117 #, python-format msgid "" "Failed to inspect vnics of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/libvirt/inspector.py:153 #, python-format msgid "" "Failed to inspect disks of %(instance_name)s, domain is in state of " "SHUTOFF" msgstr "" #: ceilometer/compute/virt/vmware/inspector.py:86 #: ceilometer/compute/virt/vmware/inspector.py:103 #: ceilometer/compute/virt/vmware/inspector.py:135 #: ceilometer/compute/virt/vmware/inspector.py:148 #, python-format msgid "VM %s not found in VMware Vsphere" msgstr "" #: ceilometer/dispatcher/database.py:50 #, python-format msgid "" "metering data %(counter_name)s for %(resource_id)s @ %(timestamp)s: " "%(counter_volume)s" msgstr "" #: ceilometer/dispatcher/database.py:69 #, python-format msgid "Failed to record metering data: %s" msgstr "" #: ceilometer/dispatcher/database.py:72 #, python-format msgid "message signature invalid, discarding message: %r" msgstr "" #: ceilometer/energy/kwapi.py:77 msgid "Kwapi endpoint not found" msgstr "" #: ceilometer/event/converter.py:77 #, python-format msgid "Plugin specified, but no plugin name supplied for trait %s" msgstr "" #: ceilometer/event/converter.py:86 #, python-format msgid "No plugin named %(plugin)s available for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:96 #, python-format msgid "Required field in trait definition not specified: '%s'" msgstr "" #: ceilometer/event/converter.py:111 #, python-format msgid "" "Parse error in JSONPath specification '%(jsonpath)s' for %(trait)s: " "%(err)s" msgstr "" #: ceilometer/event/converter.py:117 #, python-format msgid "Invalid trait type '%(type)s' for trait %(trait)s" msgstr "" #: ceilometer/event/converter.py:169 #, python-format msgid "Required field %s not specified" msgstr "" #: ceilometer/event/converter.py:342 #, python-format msgid "Dropping Notification %(type)s (uuid:%(msgid)s)" msgstr "" #: ceilometer/event/converter.py:366 #, python-format msgid "Event Definitions configuration file: %s" msgstr "" #: ceilometer/event/converter.py:376 #, python-format msgid "" "Invalid YAML syntax in Event Definitions file %(file)s at line: %(line)s," " column: %(column)s." msgstr "" #: ceilometer/event/converter.py:382 #, python-format msgid "YAML error reading Event Definitions file %(file)s" msgstr "" #: ceilometer/event/converter.py:389 msgid "No Event Definitions configuration file found! Using default config." msgstr "" #: ceilometer/event/converter.py:393 #, python-format msgid "Event Definitions: %s" msgstr "" #: ceilometer/hardware/plugin.py:71 #, python-format msgid "inspector call %(func)r failed for host %(host)s: %(err)s" msgstr "" #: ceilometer/hardware/plugin.py:103 #, python-format msgid "Can NOT load inspector %(name)s: %(err)s" msgstr "" #: ceilometer/network/floatingip.py:45 #, python-format msgid "FLOATING IP USAGE: %s" msgstr "" #: ceilometer/network/notifications.py:79 #, python-format msgid "network notification %r" msgstr "" #: ceilometer/network/statistics/opendaylight/client.py:232 #: ceilometer/tests/network/statistics/opendaylight/test_client.py:144 #, python-format msgid "OpenDaylitght API returned %(status)s %(reason)s" msgstr "" #: ceilometer/network/statistics/opendaylight/driver.py:166 msgid "Request failed to connect to OpenDaylight with NorthBound REST API" msgstr "" #: ceilometer/objectstore/swift.py:70 msgid "Swift endpoint not found" msgstr "" #: ceilometer/openstack/common/eventlet_backdoor.py:140 #, python-format msgid "Eventlet backdoor listening on %(port)s for process %(pid)d" msgstr "" #: ceilometer/openstack/common/excutils.py:62 #, python-format msgid "Original exception being dropped: %s" msgstr "" #: ceilometer/openstack/common/excutils.py:91 #, python-format msgid "Unexpected exception occurred %d time(s)... retrying." msgstr "" #: ceilometer/openstack/common/fileutils.py:62 #, python-format msgid "Reloading cached file %s" msgstr "" #: ceilometer/openstack/common/gettextutils.py:263 msgid "Message objects do not support addition." msgstr "" #: ceilometer/openstack/common/gettextutils.py:272 msgid "" "Message objects do not support str() because they may contain non-ascii " "characters. Please use unicode() or translate() instead." msgstr "" #: ceilometer/openstack/common/lockutils.py:82 #, python-format msgid "Created lock path: %s" msgstr "" #: ceilometer/openstack/common/lockutils.py:93 #, python-format msgid "Got file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:101 #, python-format msgid "Unable to acquire lock on `%(filename)s` due to %(exception)s" msgstr "" #: ceilometer/openstack/common/lockutils.py:117 #, python-format msgid "Released file lock \"%s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:119 #, python-format msgid "Could not release the acquired lock `%s`" msgstr "" #: ceilometer/openstack/common/lockutils.py:161 #, python-format msgid "Attempting to grab external lock \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:187 #, python-format msgid "Got semaphore \"%(lock)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:244 #, python-format msgid "Got semaphore / lock \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/lockutils.py:248 #, python-format msgid "Semaphore / lock released \"%(function)s\"" msgstr "" #: ceilometer/openstack/common/log.py:313 #, python-format msgid "Deprecated: %s" msgstr "" #: ceilometer/openstack/common/log.py:416 #, python-format msgid "Error loading logging config %(log_config)s: %(err_msg)s" msgstr "" #: ceilometer/openstack/common/log.py:467 #, python-format msgid "syslog facility must be one of: %s" msgstr "" #: ceilometer/openstack/common/log.py:688 #, python-format msgid "Fatal call to deprecated config: %(msg)s" msgstr "" #: ceilometer/openstack/common/loopingcall.py:82 #, python-format msgid "task run outlasted interval by %s sec" msgstr "" #: ceilometer/openstack/common/loopingcall.py:89 msgid "in fixed duration looping call" msgstr "" #: ceilometer/openstack/common/loopingcall.py:129 #, python-format msgid "Dynamic looping call sleeping for %.02f seconds" msgstr "" #: ceilometer/openstack/common/loopingcall.py:136 msgid "in dynamic looping call" msgstr "" #: ceilometer/openstack/common/policy.py:74 msgid "JSON file containing policy" msgstr "" #: ceilometer/openstack/common/policy.py:77 msgid "Rule enforced when requested rule is not found" msgstr "" #: ceilometer/openstack/common/policy.py:91 #, python-format msgid "Policy doesn't allow %s to be performed." msgstr "" #: ceilometer/openstack/common/policy.py:181 #, python-format msgid "Rules must be an instance of dict or Rules, got %s instead" msgstr "" #: ceilometer/openstack/common/policy.py:211 msgid "Rules successfully reloaded" msgstr "" #: ceilometer/openstack/common/policy.py:257 #, python-format msgid "Rule %s will be now enforced" msgstr "" #: ceilometer/openstack/common/policy.py:272 #, python-format msgid "Rule [%s] doesn't exist" msgstr "" #: ceilometer/openstack/common/policy.py:480 #, python-format msgid "Failed to understand rule %s" msgstr "" #: ceilometer/openstack/common/policy.py:490 #, python-format msgid "No handler for matches of kind %s" msgstr "" #: ceilometer/openstack/common/policy.py:760 #, python-format msgid "Failed to understand rule %r" msgstr "" #: ceilometer/openstack/common/service.py:166 #: ceilometer/openstack/common/service.py:384 msgid "Full set of CONF:" msgstr "" #: ceilometer/openstack/common/service.py:175 #: ceilometer/openstack/common/service.py:269 #, python-format msgid "Caught %s, exiting" msgstr "" #: ceilometer/openstack/common/service.py:187 msgid "Exception during rpc cleanup." msgstr "" #: ceilometer/openstack/common/service.py:238 msgid "Parent process has died unexpectedly, exiting" msgstr "" #: ceilometer/openstack/common/service.py:275 msgid "Unhandled exception" msgstr "" #: ceilometer/openstack/common/service.py:308 msgid "Forking too fast, sleeping" msgstr "" #: ceilometer/openstack/common/service.py:327 #, python-format msgid "Started child %d" msgstr "" #: ceilometer/openstack/common/service.py:337 #, python-format msgid "Starting %d workers" msgstr "" #: ceilometer/openstack/common/service.py:354 #, python-format msgid "Child %(pid)d killed by signal %(sig)d" msgstr "" #: ceilometer/openstack/common/service.py:358 #, python-format msgid "Child %(pid)s exited with status %(code)d" msgstr "" #: ceilometer/openstack/common/service.py:362 #, python-format msgid "pid %d not in child list" msgstr "" #: ceilometer/openstack/common/service.py:392 #, python-format msgid "Caught %s, stopping children" msgstr "" #: ceilometer/openstack/common/service.py:410 #, python-format msgid "Waiting on %d children to exit" msgstr "" #: ceilometer/openstack/common/sslutils.py:50 #, python-format msgid "Unable to find cert_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:53 #, python-format msgid "Unable to find ca_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:56 #, python-format msgid "Unable to find key_file : %s" msgstr "" #: ceilometer/openstack/common/sslutils.py:59 msgid "" "When running server in SSL mode, you must specify both a cert_file and " "key_file option value in your configuration file" msgstr "" #: ceilometer/openstack/common/sslutils.py:98 #, python-format msgid "Invalid SSL version : %s" msgstr "" #: ceilometer/openstack/common/strutils.py:86 #, python-format msgid "Unrecognized value '%(val)s', acceptable values are: %(acceptable)s" msgstr "" #: ceilometer/openstack/common/strutils.py:188 #, python-format msgid "Invalid string format: %s" msgstr "" #: ceilometer/openstack/common/strutils.py:195 #, python-format msgid "Unknown byte multiplier: %s" msgstr "" #: ceilometer/openstack/common/versionutils.py:69 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s in favor of %(in_favor_of)s and " "may be removed in %(remove_in)s." msgstr "" #: ceilometer/openstack/common/versionutils.py:73 #, python-format msgid "" "%(what)s is deprecated as of %(as_of)s and may be removed in " "%(remove_in)s. It will not be superseded." msgstr "" #: ceilometer/openstack/common/db/exception.py:42 msgid "Invalid Parameter: Unicode is not supported by the current database." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:191 msgid "version should be an integer" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:214 #, python-format msgid "" "Tables \"%s\" have non utf8 collation, please make sure all tables are " "CHARSET=utf8" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/migration.py:238 msgid "" "The database is not under version control, but has tables. Please stamp " "the current version of the schema manually." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:596 msgid "DB exception wrapped." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:665 #, python-format msgid "Database server has gone away: %s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:745 msgid "" "This application has not enabled MySQL traditional mode, which means " "silent data corruption may occur. Please encourage the application " "developers to enable this mode." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/session.py:770 #, python-format msgid "SQL connection failed. %s attempts left." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:63 #, python-format msgid "Got lock \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/test_migrations.py:66 #, python-format msgid "Lock released \"%s\"" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:57 msgid "Sort key supplied was not valid." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:96 msgid "Id not in sort_keys; is sort_keys unique?" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:118 msgid "Unknown sort direction, must be 'desc' or 'asc'" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:193 #, python-format msgid "" "Please specify column %s in col_name_col_instance param. It is required " "because column has unsupported type by sqlite)." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:199 #, python-format msgid "" "col_name_col_instance param has wrong type of column instance for column " "%s It should be instance of sqlalchemy.Column." msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:279 #, python-format msgid "Deleting duplicated row with id: %(id)s from table: %(table)s" msgstr "" #: ceilometer/openstack/common/db/sqlalchemy/utils.py:300 msgid "Unsupported id columns type" msgstr "" #: ceilometer/openstack/common/middleware/catch_errors.py:40 #, python-format msgid "An error occurred during processing the request: %s" msgstr "" #: ceilometer/openstack/common/middleware/notifier.py:40 #, python-format msgid "An exception occurred processing the API call: %s " msgstr "" #: ceilometer/openstack/common/middleware/sizelimit.py:55 #: ceilometer/openstack/common/middleware/sizelimit.py:64 #: ceilometer/openstack/common/middleware/sizelimit.py:75 msgid "Request is too large." msgstr "" #: ceilometer/openstack/common/notifier/api.py:129 #, python-format msgid "%s not in valid priorities" msgstr "" #: ceilometer/openstack/common/notifier/api.py:145 #, python-format msgid "" "Problem '%(e)s' attempting to send to notification system. " "Payload=%(payload)s" msgstr "" #: ceilometer/openstack/common/notifier/api.py:164 #, python-format msgid "Failed to load notifier %s. These notifications will not be sent." msgstr "" #: ceilometer/openstack/common/notifier/rpc_notifier.py:45 #: ceilometer/openstack/common/notifier/rpc_notifier2.py:51 #, python-format msgid "Could not send notification to %(topic)s. Payload=%(message)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:75 msgid "Pool creating new connection" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:202 #, python-format msgid "No calling threads waiting for msg_id : %(msg_id)s, message : %(data)s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:205 #, python-format msgid "_call_waiters: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:212 #, python-format msgid "" "Number of call waiters is greater than warning threshold: %d. There could" " be a MulticallProxyWaiter leak." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:290 #, python-format msgid "unpacked context: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:342 #, python-format msgid "UNIQUE_ID is %s." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:435 #, python-format msgid "received %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:443 #, python-format msgid "no method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:444 #, python-format msgid "No method for message: %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:472 #: ceilometer/openstack/common/rpc/impl_zmq.py:280 #, python-format msgid "Expected exception during message handling (%s)" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:480 #: ceilometer/openstack/common/rpc/impl_zmq.py:286 msgid "Exception during message handling" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:554 #, python-format msgid "Making synchronous call on %s ..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:557 #, python-format msgid "MSG_ID is %s" msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:583 #, python-format msgid "Making asynchronous cast on %s..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:592 msgid "Making asynchronous fanout cast..." msgstr "" #: ceilometer/openstack/common/rpc/amqp.py:620 #, python-format msgid "Sending %(event_type)s on %(topic)s" msgstr "" #: ceilometer/openstack/common/rpc/common.py:76 msgid "An unknown RPC related exception occurred." msgstr "" #: ceilometer/openstack/common/rpc/common.py:88 msgid "Exception in string format operation" msgstr "" #: ceilometer/openstack/common/rpc/common.py:106 #, python-format msgid "" "Remote error: %(exc_type)s %(value)s\n" "%(traceback)s." msgstr "" #: ceilometer/openstack/common/rpc/common.py:123 #, python-format msgid "" "Timeout while waiting on RPC response - topic: \"%(topic)s\", RPC method:" " \"%(method)s\" info: \"%(info)s\"" msgstr "" #: ceilometer/openstack/common/rpc/common.py:140 #: ceilometer/openstack/common/rpc/common.py:141 #: ceilometer/openstack/common/rpc/common.py:142 msgid "" msgstr "" #: ceilometer/openstack/common/rpc/common.py:146 #, python-format msgid "Found duplicate message(%(msg_id)s). Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/common.py:150 msgid "Invalid reuse of an RPC connection." msgstr "" #: ceilometer/openstack/common/rpc/common.py:154 #, python-format msgid "Specified RPC version, %(version)s, not supported by this endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:159 #, python-format msgid "" "Specified RPC envelope version, %(version)s, not supported by this " "endpoint." msgstr "" #: ceilometer/openstack/common/rpc/common.py:164 #, python-format msgid "Specified RPC version cap, %(version_cap)s, is too low" msgstr "" #: ceilometer/openstack/common/rpc/common.py:292 #, python-format msgid "Returning exception %s to caller" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:156 msgid "Failed to process message ... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:160 msgid "Failed to process message ... will requeue." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:495 #, python-format msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:517 #, python-format msgid "Connected to AMQP server on %(hostname)s:%(port)d" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:554 #, python-format msgid "" "Unable to connect to AMQP server on %(hostname)s:%(port)d after " "%(max_retries)d tries: %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:568 #, python-format msgid "" "AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying " "again in %(sleep_time)d seconds." msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:622 #: ceilometer/openstack/common/rpc/impl_qpid.py:573 #, python-format msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:640 #: ceilometer/openstack/common/rpc/impl_qpid.py:588 #, python-format msgid "Timed out waiting for RPC response: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:644 #: ceilometer/openstack/common/rpc/impl_qpid.py:592 #, python-format msgid "Failed to consume message from queue: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_kombu.py:683 #: ceilometer/openstack/common/rpc/impl_qpid.py:627 #, python-format msgid "Failed to publish message to topic '%(topic)s': %(err_str)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:87 #, python-format msgid "Invalid value for qpid_topology_version: %d" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:191 msgid "Failed to process message... skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:515 #, python-format msgid "Unable to connect to AMQP server: %(e)s. Sleeping %(delay)s seconds" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:521 #, python-format msgid "Connected to AMQP server on %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:534 msgid "Re-established AMQP queues" msgstr "" #: ceilometer/openstack/common/rpc/impl_qpid.py:600 msgid "Error processing message. Skipping it." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:96 msgid "JSON serialization failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:101 #, python-format msgid "Deserializing: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:136 #, python-format msgid "Connecting to %(addr)s with %(type)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:137 #, python-format msgid "-> Subscribed to %(subscribe)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:138 #, python-format msgid "-> bind: %(bind)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:146 msgid "Could not open socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:158 #, python-format msgid "Subscribing to %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:195 msgid "ZeroMQ socket could not be closed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:200 msgid "You cannot recv on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:205 msgid "You cannot send on this socket." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:267 #, python-format msgid "Running func with context: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:305 msgid "Sending reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:339 msgid "RPC message did not include method." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:371 msgid "Registering reactor" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:383 msgid "In reactor registered" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:388 msgid "Consuming socket" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:438 #, python-format msgid "Creating proxy for topic: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:444 msgid "Topic contained dangerous characters." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:476 msgid "Topic socket file creation failed." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:482 #, python-format msgid "Local per-topic backlog buffer full for topic %(topic)s. Dropping message." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:498 #, python-format msgid "Required IPC directory does not exist at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:507 #, python-format msgid "Permission denied to IPC directory at %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:510 msgid "Could not create ZeroMQ receiver daemon. Socket may already be in use." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:544 #, python-format msgid "CONSUMER RECEIVED DATA: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:563 msgid "ZMQ Envelope version unsupported or unknown." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:591 msgid "Skipping topic registration. Already registered." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:598 #, python-format msgid "Consumer is a zmq.%s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:650 msgid "Creating payload" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:663 msgid "Creating queue socket for reply waiter" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:676 msgid "Sending cast" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:679 msgid "Cast sent; Waiting reply" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:682 #, python-format msgid "Received message: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:683 msgid "Unpacking response" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:692 msgid "Unsupported or unknown ZMQ envelope returned." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:699 msgid "RPC Message Invalid." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:722 #, python-format msgid "%(msg)s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:725 #, python-format msgid "Sending message(s) to: %s" msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:729 msgid "No matchmaker results. Not casting." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:732 msgid "No match from matchmaker." msgstr "" #: ceilometer/openstack/common/rpc/impl_zmq.py:814 #, python-format msgid "rpc_zmq_matchmaker = %(orig)s is deprecated; use %(new)s instead" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:46 msgid "Match not found by MatchMaker." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:80 msgid "Matchmaker does not implement registration or heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:216 #, python-format msgid "Matchmaker unregistered: %(key)s, %(host)s" msgstr "" #: ceilometer/openstack/common/rpc/matchmaker.py:228 msgid "Register before starting heartbeat." msgstr "" #: ceilometer/openstack/common/rpc/matchmaker_ring.py:76 #: ceilometer/openstack/common/rpc/matchmaker_ring.py:94 #, python-format msgid "No key defining hosts for topic '%s', see ringfile" msgstr "" #: ceilometer/openstack/common/rpc/service.py:47 #, python-format msgid "Creating Consumer connection for Service %s" msgstr "" #: ceilometer/publisher/file.py:62 msgid "The path for the file publisher is required" msgstr "" #: ceilometer/publisher/file.py:76 msgid "max_bytes and backup_count should be numbers." msgstr "" #: ceilometer/publisher/rpc.py:106 #, python-format msgid "Publishing policy set to %s, override backend retry config to 1" msgstr "" #: ceilometer/publisher/rpc.py:111 #, python-format msgid "Publishing policy set to %s" msgstr "" #: ceilometer/publisher/rpc.py:113 #, python-format msgid "Publishing policy is unknown (%s) force to default" msgstr "" #: ceilometer/publisher/rpc.py:138 #, python-format msgid "Publishing %(m)d samples on %(t)s" msgstr "" #: ceilometer/publisher/rpc.py:152 #, python-format msgid "Publishing %(m)d samples on %(n)s" msgstr "" #: ceilometer/publisher/rpc.py:177 #, python-format msgid "Publisher max local_queue length is exceeded, dropping %d oldest samples" msgstr "" #: ceilometer/publisher/rpc.py:203 #, python-format msgid "Failed to publish %d samples, queue them" msgstr "" #: ceilometer/publisher/rpc.py:207 #, python-format msgid "Failed to publish %d samples, dropping them" msgstr "" #: ceilometer/publisher/udp.py:60 #, python-format msgid "Publishing sample %(msg)s over UDP to %(host)s:%(port)d" msgstr "" #: ceilometer/publisher/udp.py:67 msgid "Unable to send sample over UDP" msgstr "" #: ceilometer/storage/__init__.py:76 #, python-format msgid "looking for %(name)r driver in %(namespace)r" msgstr "" #: ceilometer/storage/impl_hbase.py:136 msgid "Creating a new in-memory HBase Connection object" msgstr "" #: ceilometer/storage/impl_hbase.py:156 msgid "Dropping HBase schema..." msgstr "" #: ceilometer/storage/impl_hbase.py:168 msgid "Cannot disable table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:172 msgid "Cannot delete table but ignoring error" msgstr "" #: ceilometer/storage/impl_hbase.py:183 #, python-format msgid "connecting to HBase on %(host)s:%(port)s" msgstr "" #: ceilometer/storage/impl_hbase.py:348 ceilometer/storage/impl_hbase.py:361 #, python-format msgid "source: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:397 #, python-format msgid "Query Meter table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:440 msgid "Pagination not implemented" msgstr "" #: ceilometer/storage/impl_hbase.py:446 #, python-format msgid "Query Resource table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:478 #, python-format msgid "Query Meter Table: %s" msgstr "" #: ceilometer/storage/impl_hbase.py:715 msgid "Opening in-memory HBase connection" msgstr "" #: ceilometer/storage/impl_log.py:57 #, python-format msgid "metering data %(counter_name)s for %(resource_id)s: %(counter_volume)s" msgstr "" #: ceilometer/storage/impl_log.py:70 #, python-format msgid "Dropping data with TTL %d" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:357 #, python-format msgid "Unknown metadata type. Key (%s) will not be queryable." msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1055 #, python-format msgid "Failed to record event: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1070 #, python-format msgid "Getting events that match filter: %s" msgstr "" #: ceilometer/storage/impl_sqlalchemy.py:1187 #, python-format msgid "Get traits for %s" msgstr "" #: ceilometer/storage/pymongo_base.py:121 #, python-format msgid "Connecting to %(db)s on %(nodelist)s" msgstr "" #: ceilometer/transformer/conversions.py:69 #, python-format msgid "scaling conversion transformer with source: %(source)s target: %(target)s:" msgstr "" #: ceilometer/transformer/conversions.py:116 #: ceilometer/transformer/conversions.py:139 #, python-format msgid "handling sample %s" msgstr "" #: ceilometer/transformer/conversions.py:119 #: ceilometer/transformer/conversions.py:160 #, python-format msgid "converted to: %s" msgstr "" #: ceilometer/transformer/conversions.py:162 #, python-format msgid "dropping sample with no predecessor: %s" msgstr "" ceilometer-2014.1/ceilometer/middleware.py0000664000175300017540000000520212323717132021705 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. from oslo.config import cfg from ceilometer import plugin from ceilometer import sample cfg.CONF.import_opt('nova_control_exchange', 'ceilometer.compute.notifications') cfg.CONF.import_opt('glance_control_exchange', 'ceilometer.image.notifications') cfg.CONF.import_opt('neutron_control_exchange', 'ceilometer.network.notifications') cfg.CONF.import_opt('cinder_control_exchange', 'ceilometer.volume.notifications') OPTS = [ cfg.MultiStrOpt('http_control_exchanges', default=[cfg.CONF.nova_control_exchange, cfg.CONF.glance_control_exchange, cfg.CONF.neutron_control_exchange, cfg.CONF.cinder_control_exchange], help="Exchanges name to listen for notifications."), ] cfg.CONF.register_opts(OPTS) class HTTPRequest(plugin.NotificationBase): event_types = ['http.request'] @staticmethod def get_exchange_topics(conf): """Return a sequence of ExchangeTopics defining the exchange and topics to be connected for this plugin. """ return [ plugin.ExchangeTopics( exchange=exchange, topics=set(topic + ".info" for topic in conf.notification_topics)) for exchange in conf.http_control_exchanges ] def process_notification(self, message): yield sample.Sample.from_notification( name=message['event_type'], type=sample.TYPE_DELTA, volume=1, unit=message['event_type'].split('.')[1], user_id=message['payload']['request'].get('HTTP_X_USER_ID'), project_id=message['payload']['request'].get('HTTP_X_PROJECT_ID'), resource_id=message['payload']['request'].get( 'HTTP_X_SERVICE_NAME'), message=message) class HTTPResponse(HTTPRequest): event_types = ['http.response'] ceilometer-2014.1/ceilometer/notifier.py0000664000175300017540000000436612323717130021417 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. from ceilometer.openstack.common import context as req_context from ceilometer.openstack.common import log as logging from ceilometer import pipeline from ceilometer import transformer from ceilometer.openstack.common.gettextutils import _ # noqa from stevedore import extension LOG = logging.getLogger(__name__) _notification_manager = None _pipeline_manager = None def _load_notification_manager(): global _notification_manager namespace = 'ceilometer.notification' LOG.debug(_('loading notification handlers from %s'), namespace) _notification_manager = extension.ExtensionManager( namespace=namespace, invoke_on_load=True) if not list(_notification_manager): LOG.warning(_('Failed to load any notification handlers for %s'), namespace) def _load_pipeline_manager(): global _pipeline_manager _pipeline_manager = pipeline.setup_pipeline( transformer.TransformerExtensionManager( 'ceilometer.transformer', ), ) def _process_notification_for_ext(ext, context, notification): with _pipeline_manager.publisher(context) as p: # FIXME(dhellmann): Spawn green thread? p(list(ext.obj.to_samples(notification))) def notify(context, message): """Sends a notification as a meter using Ceilometer pipelines.""" if not _notification_manager: _load_notification_manager() if not _pipeline_manager: _load_pipeline_manager() _notification_manager.map( _process_notification_for_ext, context=context or req_context.get_admin_context(), notification=message) ceilometer-2014.1/ceilometer/publisher/0000775000175300017540000000000012323717426021222 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/publisher/test.py0000664000175300017540000000231312323717130022542 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou # # 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. """Publish a sample in memory, useful for testing """ from ceilometer import publisher class TestPublisher(publisher.PublisherBase): """Publisher used in unit testing.""" def __init__(self, parsed_url): self.samples = [] self.calls = 0 def publish_samples(self, context, samples): """Send a metering message for publishing :param context: Execution context from the service or RPC call :param samples: Samples from pipeline after transformation """ self.samples.extend(samples) self.calls += 1 ceilometer-2014.1/ceilometer/publisher/udp.py0000664000175300017540000000460312323717130022357 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 eNovance # # Author: Julien Danjou , # Tyaptin Ilya # # 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. """Publish a sample using an UDP mechanism """ import socket import msgpack from oslo.config import cfg from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import network_utils from ceilometer import publisher from ceilometer.publisher import utils cfg.CONF.import_opt('udp_port', 'ceilometer.collector', group='collector') LOG = log.getLogger(__name__) class UDPPublisher(publisher.PublisherBase): def __init__(self, parsed_url): self.host, self.port = network_utils.parse_host_port( parsed_url.netloc, default_port=cfg.CONF.collector.udp_port) self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) def publish_samples(self, context, samples): """Send a metering message for publishing :param context: Execution context from the service or RPC call :param samples: Samples from pipeline after transformation """ for sample in samples: msg = utils.meter_message_from_counter( sample, cfg.CONF.publisher.metering_secret) host = self.host port = self.port LOG.debug(_("Publishing sample %(msg)s over UDP to " "%(host)s:%(port)d") % {'msg': msg, 'host': host, 'port': port}) try: self.socket.sendto(msgpack.dumps(msg), (self.host, self.port)) except Exception as e: LOG.warn(_("Unable to send sample over UDP")) LOG.exception(e) ceilometer-2014.1/ceilometer/publisher/utils.py0000664000175300017540000000606212323717130022730 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # Tyaptin Ilya # # 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. """Utils for publishers """ import hashlib import hmac from oslo.config import cfg from ceilometer import utils METER_PUBLISH_OPTS = [ cfg.StrOpt('metering_secret', secret=True, default='change this or be hacked', help='Secret value for signing metering messages.', deprecated_opts=[cfg.DeprecatedOpt("metering_secret", "DEFAULT"), cfg.DeprecatedOpt("metering_secret", "publisher_rpc")] ), ] def register_opts(config): """Register the options for publishing metering messages. """ config.register_opts(METER_PUBLISH_OPTS, group="publisher") register_opts(cfg.CONF) def compute_signature(message, secret): """Return the signature for a message dictionary. """ digest_maker = hmac.new(secret, '', hashlib.sha256) for name, value in utils.recursive_keypairs(message): if name == 'message_signature': # Skip any existing signature value, which would not have # been part of the original message. continue digest_maker.update(name) digest_maker.update(unicode(value).encode('utf-8')) return digest_maker.hexdigest() def verify_signature(message, secret): """Check the signature in the message against the value computed from the rest of the contents. """ old_sig = message.get('message_signature') new_sig = compute_signature(message, secret) return new_sig == old_sig def meter_message_from_counter(sample, secret): """Make a metering message ready to be published or stored. Returns a dictionary containing a metering message for a notification message and a Sample instance. """ msg = {'source': sample.source, 'counter_name': sample.name, 'counter_type': sample.type, 'counter_unit': sample.unit, 'counter_volume': sample.volume, 'user_id': sample.user_id, 'project_id': sample.project_id, 'resource_id': sample.resource_id, 'timestamp': sample.timestamp, 'resource_metadata': sample.resource_metadata, 'message_id': sample.id, } msg['message_signature'] = compute_signature(msg, secret) return msg ceilometer-2014.1/ceilometer/publisher/__init__.py0000664000175300017540000000274312323717130023331 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp. # Copyright © 2013 eNovance # # Author: Yunhong Jiang # Julien Danjou # # 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 abc import six from stevedore import driver from ceilometer.openstack.common import network_utils def get_publisher(url, namespace='ceilometer.publisher'): """Get publisher driver and load it. :param URL: URL for the publisher :param namespace: Namespace to use to look for drivers. """ parse_result = network_utils.urlsplit(url) loaded_driver = driver.DriverManager(namespace, parse_result.scheme) return loaded_driver.driver(parse_result) @six.add_metaclass(abc.ABCMeta) class PublisherBase(object): """Base class for plugins that publish the sampler.""" def __init__(self, parsed_url): pass @abc.abstractmethod def publish_samples(self, context, samples): "Publish samples into final conduit." ceilometer-2014.1/ceilometer/publisher/file.py0000664000175300017540000000713212323717130022506 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright 2013 IBM Corp # # Author: Tong Li # # 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 logging import logging.handlers import six.moves.urllib.parse as urlparse from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer import publisher LOG = log.getLogger(__name__) class FilePublisher(publisher.PublisherBase): """Publisher metering data to file. The publisher which records metering data into a file. The file name and location should be configured in ceilometer pipeline configuration file. If a file name and location is not specified, this File Publisher will not log any meters other than log a warning in Ceilometer log file. To enable this publisher, add the following section to file /etc/ceilometer/publisher.yaml or simply add it to an existing pipeline. - name: meter_file interval: 600 counters: - "*" transformers: publishers: - file:///var/test?max_bytes=10000000&backup_count=5 File path is required for this publisher to work properly. If max_bytes or backup_count is missing, FileHandler will be used to save the metering data. If max_bytes and backup_count are present, RotatingFileHandler will be used to save the metering data. """ def __init__(self, parsed_url): super(FilePublisher, self).__init__(parsed_url) self.publisher_logger = None path = parsed_url.path if not path or path.lower() == 'file': LOG.error(_('The path for the file publisher is required')) return rfh = None max_bytes = 0 backup_count = 0 # Handling other configuration options in the query string if parsed_url.query: params = urlparse.parse_qs(parsed_url.query) if params.get('max_bytes') and params.get('backup_count'): try: max_bytes = int(params.get('max_bytes')[0]) backup_count = int(params.get('backup_count')[0]) except ValueError: LOG.error(_('max_bytes and backup_count should be ' 'numbers.')) return # create rotating file handler rfh = logging.handlers.RotatingFileHandler( path, encoding='utf8', maxBytes=max_bytes, backupCount=backup_count) self.publisher_logger = logging.Logger('publisher.file') self.publisher_logger.propagate = False self.publisher_logger.setLevel(logging.INFO) rfh.setLevel(logging.INFO) self.publisher_logger.addHandler(rfh) def publish_samples(self, context, samples): """Send a metering message for publishing :param context: Execution context from the service or RPC call :param samples: Samples from pipeline after transformation """ if self.publisher_logger: for sample in samples: self.publisher_logger.info(sample.as_dict()) ceilometer-2014.1/ceilometer/publisher/rpc.py0000664000175300017540000001721512323717132022360 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Publish a sample using the preferred RPC mechanism. """ import itertools import operator import six.moves.urllib.parse as urlparse from oslo.config import cfg from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import rpc from ceilometer import publisher from ceilometer.publisher import utils LOG = log.getLogger(__name__) METER_PUBLISH_OPTS = [ cfg.StrOpt('metering_topic', default='metering', help='The topic that ceilometer uses for metering messages.', deprecated_group="DEFAULT", ), ] def register_opts(config): """Register the options for publishing metering messages. """ config.register_opts(METER_PUBLISH_OPTS, group="publisher_rpc") register_opts(cfg.CONF) def import_backend_retry_config(): """Import the retry config option native to the configured rpc backend (if such a native config option exists). """ cfg.CONF.import_opt('rpc_backend', 'ceilometer.openstack.common.rpc') kombu = 'ceilometer.openstack.common.rpc.impl_kombu' if cfg.CONF.rpc_backend == kombu: try: cfg.CONF.import_opt('rabbit_max_retries', kombu) except ImportError: pass import_backend_retry_config() def override_backend_retry_config(value): """Override the retry config option native to the configured rpc backend (if such a native config option exists). :param value: the value to override """ # TODO(eglynn): ultimately we should add to olso a more generic concept # of retry config (i.e. not specific to an individual AMQP provider) # see: https://bugs.launchpad.net/ceilometer/+bug/1244698 kombu = 'ceilometer.openstack.common.rpc.impl_kombu' if cfg.CONF.rpc_backend == kombu: if 'rabbit_max_retries' in cfg.CONF: cfg.CONF.set_override('rabbit_max_retries', value) class RPCPublisher(publisher.PublisherBase): def __init__(self, parsed_url): options = urlparse.parse_qs(parsed_url.query) # the values of the option is a list of url params values # only take care of the latest one if the option # is provided more than once self.per_meter_topic = bool(int( options.get('per_meter_topic', [0])[-1])) self.target = options.get('target', ['record_metering_data'])[0] self.policy = options.get('policy', ['default'])[-1] self.max_queue_length = int(options.get( 'max_queue_length', [1024])[-1]) self.local_queue = [] if self.policy in ['queue', 'drop']: LOG.info(_('Publishing policy set to %s, ' 'override backend retry config to 1') % self.policy) override_backend_retry_config(1) elif self.policy == 'default': LOG.info(_('Publishing policy set to %s') % self.policy) else: LOG.warn(_('Publishing policy is unknown (%s) force to default') % self.policy) self.policy = 'default' def publish_samples(self, context, samples): """Publish samples on RPC. :param context: Execution context from the service or RPC call. :param samples: Samples from pipeline after transformation. """ meters = [ utils.meter_message_from_counter( sample, cfg.CONF.publisher.metering_secret) for sample in samples ] topic = cfg.CONF.publisher_rpc.metering_topic msg = { 'method': self.target, 'version': '1.0', 'args': {'data': meters}, } LOG.audit(_('Publishing %(m)d samples on %(t)s') % ( {'m': len(msg['args']['data']), 't': topic})) self.local_queue.append((context, topic, msg)) if self.per_meter_topic: for meter_name, meter_list in itertools.groupby( sorted(meters, key=operator.itemgetter('counter_name')), operator.itemgetter('counter_name')): msg = { 'method': self.target, 'version': '1.0', 'args': {'data': list(meter_list)}, } topic_name = topic + '.' + meter_name LOG.audit(_('Publishing %(m)d samples on %(n)s') % ( {'m': len(msg['args']['data']), 'n': topic_name})) self.local_queue.append((context, topic_name, msg)) self.flush() def flush(self): #note(sileht): # IO of the rpc stuff in handled by eventlet, # this is why the self.local_queue, is emptied before processing the # queue and the remaining messages in the queue are added to # self.local_queue after in case of a other call have already added # something in the self.local_queue queue = self.local_queue self.local_queue = [] self.local_queue = self._process_queue(queue, self.policy) + \ self.local_queue if self.policy == 'queue': self._check_queue_length() def _check_queue_length(self): queue_length = len(self.local_queue) if queue_length > self.max_queue_length > 0: count = queue_length - self.max_queue_length self.local_queue = self.local_queue[count:] LOG.warn(_("Publisher max local_queue length is exceeded, " "dropping %d oldest samples") % count) @staticmethod def _process_queue(queue, policy): #note(sileht): # the behavior of rpc.cast call depends of rabbit_max_retries # if rabbit_max_retries <= 0: # it returns only if the msg has been sent on the amqp queue # if rabbit_max_retries > 0: # it raises a exception if rabbitmq is unreachable # # Ugly, but actually the oslo.rpc do a sys.exit(1) instead of a # RPCException, so we catch both until a correct behavior is # implemented in oslo # # the default policy just respect the rabbitmq configuration # nothing special is done if rabbit_max_retries <= 0 # and exception is reraised if rabbit_max_retries > 0 while queue: context, topic, msg = queue[0] try: rpc.cast(context, topic, msg) except (SystemExit, rpc.common.RPCException): samples = sum([len(m['args']['data']) for n, n, m in queue]) if policy == 'queue': LOG.warn(_("Failed to publish %d samples, queue them"), samples) return queue elif policy == 'drop': LOG.warn(_("Failed to publish %d samples, dropping them"), samples) return [] # default, occur only if rabbit_max_retries > 0 raise else: queue.pop(0) return [] ceilometer-2014.1/ceilometer/agent.py0000664000175300017540000001432212323717130020667 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Julien Danjou # Copyright © 2014 Red Hat, Inc # # Authors: Julien Danjou # Eoghan Glynn # # 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 collections import itertools import urlparse from stevedore import extension from ceilometer.openstack.common import context from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import service as os_service from ceilometer import pipeline LOG = log.getLogger(__name__) class Resources(object): def __init__(self, agent_manager): self.agent_manager = agent_manager self._resources = [] self._discovery = [] def extend(self, pipeline): self._resources.extend(pipeline.resources) self._discovery.extend(pipeline.discovery) @property def resources(self): source_discovery = (self.agent_manager.discover(self._discovery) if self._discovery else []) return self._resources + source_discovery class PollingTask(object): """Polling task for polling samples and inject into pipeline. A polling task can be invoked periodically or only once. """ def __init__(self, agent_manager): self.manager = agent_manager self.pollsters = set() # we extend the amalgamation of all static resources for this # set of pollsters with a common interval, so as to also # include any dynamically discovered resources specific to # the matching pipelines (if either is present, the per-agent # default discovery is overridden) resource_factory = lambda: Resources(agent_manager) self.resources = collections.defaultdict(resource_factory) self.publish_context = pipeline.PublishContext( agent_manager.context) def add(self, pollster, pipelines): self.publish_context.add_pipelines(pipelines) for pipeline in pipelines: self.resources[pollster.name].extend(pipeline) self.pollsters.update([pollster]) def poll_and_publish(self): """Polling sample and publish into pipeline.""" agent_resources = self.manager.discover() with self.publish_context as publisher: cache = {} for pollster in self.pollsters: key = pollster.name LOG.info(_("Polling pollster %s"), key) source_resources = list(self.resources[key].resources) try: samples = list(pollster.obj.get_samples( self.manager, cache, resources=source_resources or agent_resources, )) publisher(samples) except Exception as err: LOG.warning(_( 'Continue after error from %(name)s: %(error)s') % ({'name': pollster.name, 'error': err}), exc_info=True) class AgentManager(os_service.Service): def __init__(self, namespace, default_discovery=[]): super(AgentManager, self).__init__() self.default_discovery = default_discovery self.pollster_manager = self._extensions('poll', namespace) self.discovery_manager = self._extensions('discover') self.context = context.RequestContext('admin', 'admin', is_admin=True) @staticmethod def _extensions(category, agent_ns=None): namespace = ('ceilometer.%s.%s' % (category, agent_ns) if agent_ns else 'ceilometer.%s' % category) return extension.ExtensionManager( namespace=namespace, invoke_on_load=True, ) def create_polling_task(self): """Create an initially empty polling task.""" return PollingTask(self) def setup_polling_tasks(self): polling_tasks = {} for pipeline, pollster in itertools.product( self.pipeline_manager.pipelines, self.pollster_manager.extensions): if pipeline.support_meter(pollster.name): polling_task = polling_tasks.get(pipeline.get_interval()) if not polling_task: polling_task = self.create_polling_task() polling_tasks[pipeline.get_interval()] = polling_task polling_task.add(pollster, [pipeline]) return polling_tasks def start(self): self.pipeline_manager = pipeline.setup_pipeline() for interval, task in self.setup_polling_tasks().iteritems(): self.tg.add_timer(interval, self.interval_task, task=task) @staticmethod def interval_task(task): task.poll_and_publish() @staticmethod def _parse_discoverer(url): s = urlparse.urlparse(url) return (s.scheme or s.path), (s.netloc + s.path if s.scheme else None) def _discoverer(self, name): for d in self.discovery_manager: if d.name == name: return d.obj return None def discover(self, discovery=[]): resources = [] for url in (discovery or self.default_discovery): name, param = self._parse_discoverer(url) discoverer = self._discoverer(name) if discoverer: try: discovered = discoverer.discover(param) resources.extend(discovered) except Exception as err: LOG.exception(_('Unable to discover resources: %s') % err) else: LOG.warning(_('Unknown discovery extension: %s') % name) return resources ceilometer-2014.1/ceilometer/network/0000775000175300017540000000000012323717426020716 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/network/floatingip.py0000664000175300017540000000440612323717130023420 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # # Copyright 2013 IBM Corp # All Rights Reserved. # # Author: Julien Danjou # # 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. from ceilometer.central import plugin from ceilometer import nova_client from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils from ceilometer import sample class FloatingIPPollster(plugin.CentralPollster): LOG = log.getLogger(__name__ + '.floatingip') def _get_floating_ips(self): nv = nova_client.Client() return nv.floating_ip_get_all() def _iter_floating_ips(self, cache): if 'floating_ips' not in cache: cache['floating_ips'] = list(self._get_floating_ips()) return iter(cache['floating_ips']) def get_samples(self, manager, cache, resources=[]): for ip in self._iter_floating_ips(cache): self.LOG.info(_("FLOATING IP USAGE: %s") % ip.ip) # FIXME (flwang) Now Nova API /os-floating-ips can't provide those # attributes were used by Ceilometer, such as project id, host. # In this fix, those attributes usage will be removed temporarily. # And they will be back after fix the Nova bug 1174802. yield sample.Sample( name='ip.floating', type=sample.TYPE_GAUGE, unit='ip', volume=1, user_id=None, project_id=None, resource_id=ip.id, timestamp=timeutils.utcnow().isoformat(), resource_metadata={ 'address': ip.ip, 'pool': ip.pool }) ceilometer-2014.1/ceilometer/network/statistics/0000775000175300017540000000000012323717426023110 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/network/statistics/port.py0000664000175300017540000000541412323717130024442 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network import statistics from ceilometer import sample class PortPollster(statistics._Base): meter_name = 'switch.port' meter_type = sample.TYPE_GAUGE meter_unit = 'port' class PortPollsterReceivePackets(statistics._Base): meter_name = 'switch.port.receive.packets' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterTransmitPackets(statistics._Base): meter_name = 'switch.port.transmit.packets' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterReceiveBytes(statistics._Base): meter_name = 'switch.port.receive.bytes' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'B' class PortPollsterTransmitBytes(statistics._Base): meter_name = 'switch.port.transmit.bytes' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'B' class PortPollsterReceiveDrops(statistics._Base): meter_name = 'switch.port.receive.drops' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterTransmitDrops(statistics._Base): meter_name = 'switch.port.transmit.drops' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterReceiveErrors(statistics._Base): meter_name = 'switch.port.receive.errors' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterTransmitErrors(statistics._Base): meter_name = 'switch.port.transmit.errors' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterReceiveFrameErrors(statistics._Base): meter_name = 'switch.port.receive.frame_error' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterReceiveOverrunErrors(statistics._Base): meter_name = 'switch.port.receive.overrun_error' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterReceiveCRCErrors(statistics._Base): meter_name = 'switch.port.receive.crc_error' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class PortPollsterCollisionCount(statistics._Base): meter_name = 'switch.port.collision.count' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' ceilometer-2014.1/ceilometer/network/statistics/opendaylight/0000775000175300017540000000000012323717426025577 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/network/statistics/opendaylight/client.py0000664000175300017540000001441212323717130027421 0ustar jenkinsjenkins00000000000000# # Copyright 2013 NEC Corporation. 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 abc from oslo.config import cfg import requests from requests import auth import six from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log CONF = cfg.CONF LOG = log.getLogger(__name__) @six.add_metaclass(abc.ABCMeta) class _Base(): """Base class of OpenDaylight REST APIs Clients.""" @abc.abstractproperty def base_url(self): """Returns base url for each REST API.""" def __init__(self, client): self.client = client def request(self, path, container_name): return self.client.request(self.base_url + path, container_name) class OpenDaylightRESTAPIFailed(Exception): pass class StatisticsAPIClient(_Base): """OpenDaylight Statistics REST API Client Base URL: {endpoint}/statistics/{containerName} """ base_url = '/statistics/%(container_name)s' def get_port_statistics(self, container_name): """Get port statistics URL: {Base URL}/port """ return self.request('/port', container_name) def get_flow_statistics(self, container_name): """Get flow statistics URL: {Base URL}/flow """ return self.request('/flow', container_name) def get_table_statistics(self, container_name): """Get table statistics URL: {Base URL}/table """ return self.request('/table', container_name) class TopologyAPIClient(_Base): """OpenDaylight Topology REST API Client Base URL: {endpoint}/topology/{containerName} """ base_url = '/topology/%(container_name)s' def get_topology(self, container_name): """Get topology URL: {Base URL} """ return self.request('', container_name) def get_user_links(self, container_name): """Get user links URL: {Base URL}/userLinks """ return self.request('/userLinks', container_name) class SwitchManagerAPIClient(_Base): """OpenDaylight Switch Manager REST API Client Base URL: {endpoint}/switchmanager/{containerName} """ base_url = '/switchmanager/%(container_name)s' def get_nodes(self, container_name): """Get node informations URL: {Base URL}/nodes """ return self.request('/nodes', container_name) class HostTrackerAPIClient(_Base): """OpenDaylight Host Tracker REST API Client Base URL: {endpoint}/hosttracker/{containerName} """ base_url = '/hosttracker/%(container_name)s' def get_active_hosts(self, container_name): """Get active hosts informatinos URL: {Base URL}/hosts/active """ return self.request('/hosts/active', container_name) def get_inactive_hosts(self, container_name): """Get inactive hosts informations URL: {Base URL}/hosts/inactive """ return self.request('/hosts/inactive', container_name) class Client(): def __init__(self, endpoint, params): self.statistics = StatisticsAPIClient(self) self.topology = TopologyAPIClient(self) self.switch_manager = SwitchManagerAPIClient(self) self.host_tracker = HostTrackerAPIClient(self) self._endpoint = endpoint self._req_params = self._get_req_params(params) @staticmethod def _get_req_params(params): req_params = { 'headers': { 'Accept': 'application/json' } } auth_way = params.get('auth') if auth_way in ['basic', 'digest']: user = params.get('user') password = params.get('password') if auth_way == 'basic': auth_class = auth.HTTPBasicAuth else: auth_class = auth.HTTPDigestAuth req_params['auth'] = auth_class(user, password) return req_params def _log_req(self, url): curl_command = ['REQ: curl -i -X GET '] curl_command.append('"%s" ' % (url)) if 'auth' in self._req_params: auth_class = self._req_params['auth'] if isinstance(auth_class, auth.HTTPBasicAuth): curl_command.append('--basic ') else: curl_command.append('--digest ') curl_command.append('--user "%s":"%s" ' % (auth_class.username, auth_class.password)) for name, value in six.iteritems(self._req_params['headers']): curl_command.append('-H "%s: %s" ' % (name, value)) LOG.debug(''.join(curl_command)) @staticmethod def _log_res(resp): dump = ['RES: \n'] dump.append('HTTP %.1f %s %s\n' % (resp.raw.version, resp.status_code, resp.reason)) dump.extend(['%s: %s\n' % (k, v) for k, v in six.iteritems(resp.headers)]) dump.append('\n') if resp.content: dump.extend([resp.content, '\n']) LOG.debug(''.join(dump)) def _http_request(self, url): if CONF.debug: self._log_req(url) resp = requests.get(url, **self._req_params) if CONF.debug: self._log_res(resp) if resp.status_code / 100 != 2: raise OpenDaylightRESTAPIFailed( _('OpenDaylitght API returned %(status)s %(reason)s') % {'status': resp.status_code, 'reason': resp.reason}) return resp.json() def request(self, path, container_name): url = self._endpoint + path % {'container_name': container_name} return self._http_request(url) ceilometer-2014.1/ceilometer/network/statistics/opendaylight/__init__.py0000664000175300017540000000000012323717130027666 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/network/statistics/opendaylight/driver.py0000664000175300017540000004266012323717130027444 0ustar jenkinsjenkins00000000000000# # Copyright 2013 NEC Corporation. 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 six from six import moves from six.moves.urllib import parse as url_parse from ceilometer.network.statistics import driver from ceilometer.network.statistics.opendaylight import client from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils from ceilometer import utils LOG = log.getLogger(__name__) def _get_properties(properties, prefix='properties'): resource_meta = {} if properties is not None: for k, v in six.iteritems(properties): value = v['value'] key = prefix + '_' + k if 'name' in v: key += '_' + v['name'] resource_meta[key] = value return resource_meta def _get_int_sample(key, statistic, resource_id, resource_meta): if key not in statistic: return None return (int(statistic[key]), resource_id, resource_meta) class OpenDayLightDriver(driver.Driver): """Driver of network info collector from OpenDaylight. This driver uses resources in "pipeline.yaml". Resource requires below conditions: * resource is url * scheme is "opendaylight" This driver can be configured via query parameters. Supported parameters: * scheme: The scheme of request url to OpenDaylight REST API endpoint. (default http) * auth: Auth strategy of http. This parameter can be set basic and digest.(default None) * user: This is username that is used by auth.(default None) * password: This is password that is used by auth.(default None) * container_name: Name of container of OpenDaylight.(default "default") This parameter allows multi vaues. e.g. opendaylight://127.0.0.1:8080/controller/nb/v2?container_name=default& container_name=egg&auth=basic&user=admin&password=admin&scheme=http In this case, the driver send request to below URL: http://127.0.0.1:8080/controller/nb/v2/statistics/default/flow and http://127.0.0.1:8080/controller/nb/v2/statistics/egg/flow """ @staticmethod def _prepare_cache(endpoint, params, cache): if 'network.statistics.opendaylight' in cache: return cache['network.statistics.opendaylight'] data = {} container_names = params.get('container_name', ['default']) odl_params = {} if 'auth' in params: odl_params['auth'] = params['auth'][0] if 'user' in params: odl_params['user'] = params['user'][0] if 'password' in params: odl_params['password'] = params['password'][0] cs = client.Client(endpoint, odl_params) for container_name in container_names: try: container_data = {} # get flow statistics container_data['flow'] = cs.statistics.get_flow_statistics( container_name) # get port statistics container_data['port'] = cs.statistics.get_port_statistics( container_name) # get table statistics container_data['table'] = cs.statistics.get_table_statistics( container_name) # get topology container_data['topology'] = cs.topology.get_topology( container_name) # get switch informations container_data['switch'] = cs.switch_manager.get_nodes( container_name) # get and optimize user links # e.g. # before: # "OF|2@OF|00:00:00:00:00:00:00:02" # after: # { # 'port': { # 'type': 'OF', # 'id': '2'}, # 'node': { # 'type': 'OF', # 'id': '00:00:00:00:00:00:00:02' # } # } user_links_raw = cs.topology.get_user_links(container_name) user_links = [] container_data['user_links'] = user_links for user_link_row in user_links_raw['userLinks']: user_link = {} for k, v in six.iteritems(user_link_row): if (k == "dstNodeConnector" or k == "srcNodeConnector"): port_raw, node_raw = v.split('@') port = {} port['type'], port['id'] = port_raw.split('|') node = {} node['type'], node['id'] = node_raw.split('|') v = {'port': port, 'node': node} user_link[k] = v user_links.append(user_link) # get link status to hosts container_data['active_hosts'] = cs.host_tracker.\ get_active_hosts(container_name) container_data['inactive_hosts'] = cs.host_tracker.\ get_inactive_hosts(container_name) container_data['timestamp'] = timeutils.isotime() data[container_name] = container_data except Exception: LOG.exception(_('Request failed to connect to OpenDaylight' ' with NorthBound REST API')) cache['network.statistics.opendaylight'] = data return data def get_sample_data(self, meter_name, parse_url, params, cache): extractor = self._get_extractor(meter_name) if extractor is None: # The way to getting meter is not implemented in this driver or # OpenDaylight REST API has not api to getting meter. return None iter = self._get_iter(meter_name) if iter is None: # The way to getting meter is not implemented in this driver or # OpenDaylight REST API has not api to getting meter. return None parts = url_parse.ParseResult(params.get('scheme', ['http'])[0], parse_url.netloc, parse_url.path, None, None, None) endpoint = url_parse.urlunparse(parts) data = self._prepare_cache(endpoint, params, cache) samples = [] for name, value in six.iteritems(data): timestamp = value['timestamp'] for sample in iter(extractor, value): if sample is not None: # set controller name and container name # to resource_metadata sample[2]['controller'] = 'OpenDaylight' sample[2]['container'] = name samples.append(sample + (timestamp, )) return samples def _get_iter(self, meter_name): if meter_name == 'switch': return self._iter_switch elif meter_name.startswith('switch.flow'): return self._iter_flow elif meter_name.startswith('switch.table'): return self._iter_table elif meter_name.startswith('switch.port'): return self._iter_port def _get_extractor(self, meter_name): method_name = '_' + meter_name.replace('.', '_') return getattr(self, method_name, None) @staticmethod def _iter_switch(extractor, data): for switch in data['switch']['nodeProperties']: yield extractor(switch, switch['node']['id'], {}) @staticmethod def _switch(statistic, resource_id, resource_meta): resource_meta.update(_get_properties(statistic.get('properties'))) return (1, resource_id, resource_meta) @staticmethod def _iter_port(extractor, data): for port_statistic in data['port']['portStatistics']: for statistic in port_statistic['portStatistic']: resource_meta = {'port': statistic['nodeConnector']['id']} yield extractor(statistic, port_statistic['node']['id'], resource_meta, data) @staticmethod def _switch_port(statistic, resource_id, resource_meta, data): my_node_id = resource_id my_port_id = statistic['nodeConnector']['id'] # link status from topology edge_properties = data['topology']['edgeProperties'] for edge_property in edge_properties: edge = edge_property['edge'] if (edge['headNodeConnector']['node']['id'] == my_node_id and edge['headNodeConnector']['id'] == my_port_id): target_node = edge['tailNodeConnector'] elif (edge['tailNodeConnector']['node']['id'] == my_node_id and edge['tailNodeConnector']['id'] == my_port_id): target_node = edge['headNodeConnector'] else: continue resource_meta['topology_node_id'] = target_node['node']['id'] resource_meta['topology_node_port'] = target_node['id'] resource_meta.update(_get_properties( edge_property.get('properties'), prefix='topology')) break # link status from user links for user_link in data['user_links']: if (user_link['dstNodeConnector']['node']['id'] == my_node_id and user_link['dstNodeConnector']['port']['id'] == my_port_id): target_node = user_link['srcNodeConnector'] elif (user_link['srcNodeConnector']['node']['id'] == my_node_id and user_link['srcNodeConnector']['port']['id'] == my_port_id): target_node = user_link['dstNodeConnector'] else: continue resource_meta['user_link_node_id'] = target_node['node']['id'] resource_meta['user_link_node_port'] = target_node['port']['id'] resource_meta['user_link_status'] = user_link['status'] resource_meta['user_link_name'] = user_link['name'] break # link status to hosts for hosts, status in moves.zip( [data['active_hosts'], data['inactive_hosts']], ['active', 'inactive']): for host_config in hosts['hostConfig']: if (host_config['nodeId'] != my_node_id or host_config['nodeConnectorId'] != my_port_id): continue resource_meta['host_status'] = status for key in ['dataLayerAddress', 'vlan', 'staticHost', 'networkAddress']: if key in host_config: resource_meta['host_' + key] = host_config[key] break return (1, resource_id, resource_meta) @staticmethod def _switch_port_receive_packets(statistic, resource_id, resource_meta, data): return _get_int_sample('receivePackets', statistic, resource_id, resource_meta) @staticmethod def _switch_port_transmit_packets(statistic, resource_id, resource_meta, data): return _get_int_sample('transmitPackets', statistic, resource_id, resource_meta) @staticmethod def _switch_port_receive_bytes(statistic, resource_id, resource_meta, data): return _get_int_sample('receiveBytes', statistic, resource_id, resource_meta) @staticmethod def _switch_port_transmit_bytes(statistic, resource_id, resource_meta, data): return _get_int_sample('transmitBytes', statistic, resource_id, resource_meta) @staticmethod def _switch_port_receive_drops(statistic, resource_id, resource_meta, data): return _get_int_sample('receiveDrops', statistic, resource_id, resource_meta) @staticmethod def _switch_port_transmit_drops(statistic, resource_id, resource_meta, data): return _get_int_sample('transmitDrops', statistic, resource_id, resource_meta) @staticmethod def _switch_port_receive_errors(statistic, resource_id, resource_meta, data): return _get_int_sample('receiveErrors', statistic, resource_id, resource_meta) @staticmethod def _switch_port_transmit_errors(statistic, resource_id, resource_meta, data): return _get_int_sample('transmitErrors', statistic, resource_id, resource_meta) @staticmethod def _switch_port_receive_frame_error(statistic, resource_id, resource_meta, data): return _get_int_sample('receiveFrameError', statistic, resource_id, resource_meta) @staticmethod def _switch_port_receive_overrun_error(statistic, resource_id, resource_meta, data): return _get_int_sample('receiveOverRunError', statistic, resource_id, resource_meta) @staticmethod def _switch_port_receive_crc_error(statistic, resource_id, resource_meta, data): return _get_int_sample('receiveCrcError', statistic, resource_id, resource_meta) @staticmethod def _switch_port_collision_count(statistic, resource_id, resource_meta, data): return _get_int_sample('collisionCount', statistic, resource_id, resource_meta) @staticmethod def _iter_table(extractor, data): for table_statistic in data['table']['tableStatistics']: for statistic in table_statistic['tableStatistic']: resource_meta = {'table_id': statistic['nodeTable']['id']} yield extractor(statistic, table_statistic['node']['id'], resource_meta) @staticmethod def _switch_table(statistic, resource_id, resource_meta): return (1, resource_id, resource_meta) @staticmethod def _switch_table_active_entries(statistic, resource_id, resource_meta): return _get_int_sample('activeCount', statistic, resource_id, resource_meta) @staticmethod def _switch_table_lookup_packets(statistic, resource_id, resource_meta): return _get_int_sample('lookupCount', statistic, resource_id, resource_meta) @staticmethod def _switch_table_matched_packets(statistic, resource_id, resource_meta): return _get_int_sample('matchedCount', statistic, resource_id, resource_meta) @staticmethod def _iter_flow(extractor, data): for flow_statistic in data['flow']['flowStatistics']: for statistic in flow_statistic['flowStatistic']: resource_meta = {'flow_id': statistic['flow']['id'], 'table_id': statistic['tableId']} for key, value in utils.dict_to_keyval(statistic['flow'], 'flow'): resource_meta[key.replace('.', '_')] = value yield extractor(statistic, flow_statistic['node']['id'], resource_meta) @staticmethod def _switch_flow(statistic, resource_id, resource_meta): return (1, resource_id, resource_meta) @staticmethod def _switch_flow_duration_seconds(statistic, resource_id, resource_meta): return _get_int_sample('durationSeconds', statistic, resource_id, resource_meta) @staticmethod def _switch_flow_duration_nanoseconds(statistic, resource_id, resource_meta): return _get_int_sample('durationNanoseconds', statistic, resource_id, resource_meta) @staticmethod def _switch_flow_packets(statistic, resource_id, resource_meta): return _get_int_sample('packetCount', statistic, resource_id, resource_meta) @staticmethod def _switch_flow_bytes(statistic, resource_id, resource_meta): return _get_int_sample('byteCount', statistic, resource_id, resource_meta) ceilometer-2014.1/ceilometer/network/statistics/__init__.py0000664000175300017540000000617612323717130025223 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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 abc import six from six.moves.urllib import parse as url_parse from stevedore import driver as _driver from ceilometer.central import plugin from ceilometer.openstack.common import network_utils from ceilometer import sample @six.add_metaclass(abc.ABCMeta) class _Base(plugin.CentralPollster): NAMESPACE = 'network.statistics.drivers' drivers = {} @abc.abstractproperty def meter_name(self): '''Return a Meter Name.''' @abc.abstractproperty def meter_type(self): '''Return a Meter Type.''' @abc.abstractproperty def meter_unit(self): '''Return a Meter Unit.''' @staticmethod def _parse_my_resource(resource): parse_url = network_utils.urlsplit(resource) params = url_parse.parse_qs(parse_url.query) parts = url_parse.ParseResult(parse_url.scheme, parse_url.netloc, parse_url.path, None, None, None) return parts, params @staticmethod def get_driver(scheme): if scheme not in _Base.drivers: _Base.drivers[scheme] = _driver.DriverManager(_Base.NAMESPACE, scheme).driver() return _Base.drivers[scheme] def get_samples(self, manager, cache, resources=[]): for resource in resources: parse_url, params = self._parse_my_resource(resource) ext = self.get_driver(parse_url.scheme) sample_data = ext.get_sample_data(self.meter_name, parse_url, params, cache) for data in sample_data: if data is None: continue if not isinstance(data, list): data = [data] for (volume, resource_id, resource_metadata, timestamp) in data: yield sample.Sample( name=self.meter_name, type=self.meter_type, unit=self.meter_unit, volume=volume, user_id=None, project_id=None, resource_id=resource_id, timestamp=timestamp, resource_metadata=resource_metadata ) ceilometer-2014.1/ceilometer/network/statistics/driver.py0000664000175300017540000000163012323717130024745 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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 abc import six @six.add_metaclass(abc.ABCMeta) class Driver(): @abc.abstractmethod def get_sample_data(self, meter_name, parse_url, params, cache): '''Return volume, resource_id, resource_metadata, timestamp in tuple. If not implemented for meter_name, returns None ''' ceilometer-2014.1/ceilometer/network/statistics/flow.py0000664000175300017540000000263412323717130024426 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network import statistics from ceilometer import sample class FlowPollster(statistics._Base): meter_name = 'switch.flow' meter_type = sample.TYPE_GAUGE meter_unit = 'flow' class FlowPollsterDurationSeconds(statistics._Base): meter_name = 'switch.flow.duration_seconds' meter_type = sample.TYPE_GAUGE meter_unit = 's' class FlowPollsterDurationNanoseconds(statistics._Base): meter_name = 'switch.flow.duration_nanoseconds' meter_type = sample.TYPE_GAUGE meter_unit = 'ns' class FlowPollsterPackets(statistics._Base): meter_name = 'switch.flow.packets' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'packet' class FlowPollsterBytes(statistics._Base): meter_name = 'switch.flow.bytes' meter_type = sample.TYPE_CUMULATIVE meter_unit = 'B' ceilometer-2014.1/ceilometer/network/statistics/table.py0000664000175300017540000000242712323717130024546 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network import statistics from ceilometer import sample class TablePollster(statistics._Base): meter_name = 'switch.table' meter_type = sample.TYPE_GAUGE meter_unit = 'table' class TablePollsterActiveEntries(statistics._Base): meter_name = 'switch.table.active.entries' meter_type = sample.TYPE_GAUGE meter_unit = 'entry' class TablePollsterLookupPackets(statistics._Base): meter_name = 'switch.table.lookup.packets' meter_type = sample.TYPE_GAUGE meter_unit = 'packet' class TablePollsterMatchedPackets(statistics._Base): meter_name = 'switch.table.matched.packets' meter_type = sample.TYPE_GAUGE meter_unit = 'packet' ceilometer-2014.1/ceilometer/network/statistics/switch.py0000664000175300017540000000144512323717130024757 0ustar jenkinsjenkins00000000000000# # Copyright 2014 NEC Corporation. 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. from ceilometer.network import statistics from ceilometer import sample class SWPollster(statistics._Base): meter_name = 'switch' meter_type = sample.TYPE_GAUGE meter_unit = 'switch' ceilometer-2014.1/ceilometer/network/__init__.py0000664000175300017540000000000012323717130023005 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/network/notifications.py0000664000175300017540000001237212323717132024140 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Julien Danjou # # 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. """Handler for producing network counter messages from Neutron notification events. """ from oslo.config import cfg from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer import plugin from ceilometer import sample OPTS = [ cfg.StrOpt('neutron_control_exchange', default='neutron', help="Exchange name for Neutron notifications.", deprecated_name='quantum_control_exchange'), ] cfg.CONF.register_opts(OPTS) LOG = log.getLogger(__name__) class NetworkNotificationBase(plugin.NotificationBase): resource_name = None @property def event_types(self): return [ # NOTE(flwang): When the *.create.start notification sending, # there is no resource id assigned by Neutron yet. So we ignore # the *.create.start notification for now and only listen the # *.create.end to make sure the resource id is existed. '%s.create.end' % (self.resource_name), '%s.update.*' % (self.resource_name), '%s.exists' % (self.resource_name), # FIXME(dhellmann): Neutron delete notifications do # not include the same metadata as the other messages, # so we ignore them for now. This isn't ideal, since # it may mean we miss charging for some amount of time, # but it is better than throwing away the existing # metadata for a resource when it is deleted. ##'%s.delete.start' % (self.resource_name), ] @staticmethod def get_exchange_topics(conf): """Return a sequence of ExchangeTopics defining the exchange and topics to be connected for this plugin. """ return [ plugin.ExchangeTopics( exchange=conf.neutron_control_exchange, topics=set(topic + ".info" for topic in conf.notification_topics)), ] def process_notification(self, message): LOG.info(_('network notification %r') % message) message['payload'] = message['payload'][self.resource_name] counter_name = getattr(self, 'counter_name', self.resource_name) unit_value = getattr(self, 'unit', self.resource_name) yield sample.Sample.from_notification( name=counter_name, type=sample.TYPE_GAUGE, unit=unit_value, volume=1, user_id=message['_context_user_id'], project_id=message['_context_tenant_id'], resource_id=message['payload']['id'], message=message) event_type_split = message['event_type'].split('.') if len(event_type_split) > 2: yield sample.Sample.from_notification( name=counter_name + "." + event_type_split[1], type=sample.TYPE_DELTA, unit=unit_value, volume=1, user_id=message['_context_user_id'], project_id=message['_context_tenant_id'], resource_id=message['payload']['id'], message=message) class Network(NetworkNotificationBase): """Listen for Neutron network notifications in order to mediate with the metering framework. """ resource_name = 'network' class Subnet(NetworkNotificationBase): """Listen for Neutron notifications in order to mediate with the metering framework. """ resource_name = 'subnet' class Port(NetworkNotificationBase): """Listen for Neutron notifications in order to mediate with the metering framework. """ resource_name = 'port' class Router(NetworkNotificationBase): """Listen for Neutron notifications in order to mediate with the metering framework. """ resource_name = 'router' class FloatingIP(NetworkNotificationBase): """Listen for Neutron notifications in order to mediate with the metering framework. """ resource_name = 'floatingip' counter_name = 'ip.floating' unit = 'ip' class Bandwidth(NetworkNotificationBase): """Listen for Neutron notifications in order to mediate with the metering framework. """ event_types = ['l3.meter'] def process_notification(self, message): yield sample.Sample.from_notification( name='bandwidth', type=sample.TYPE_DELTA, unit='B', volume=message['payload']['bytes'], user_id=None, project_id=message['payload']['tenant_id'], resource_id=message['payload']['label_id'], message=message) ceilometer-2014.1/ceilometer/notification.py0000664000175300017540000001425512323717132022266 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012-2013 eNovance # # Author: Julien Danjou # # 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. from oslo.config import cfg from stevedore import extension from ceilometer.event import converter as event_converter from ceilometer.openstack.common import context from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common.rpc import service as rpc_service from ceilometer import pipeline from ceilometer import service from ceilometer.storage import models LOG = log.getLogger(__name__) OPTS = [ cfg.BoolOpt('ack_on_event_error', default=True, deprecated_group='collector', help='Acknowledge message when event persistence fails.'), cfg.BoolOpt('store_events', deprecated_group='collector', default=False, help='Save event details.'), ] cfg.CONF.register_opts(OPTS, group="notification") class UnableToSaveEventException(Exception): """Thrown when we want to requeue an event. Any exception is fine, but this one should make debugging a little easier. """ class NotificationService(service.DispatchedService, rpc_service.Service): NOTIFICATION_NAMESPACE = 'ceilometer.notification' def start(self): super(NotificationService, self).start() # Add a dummy thread to have wait() working self.tg.add_timer(604800, lambda: None) def initialize_service_hook(self, service): '''Consumers must be declared before consume_thread start.''' self.pipeline_manager = pipeline.setup_pipeline() LOG.debug(_('Loading event definitions')) self.event_converter = event_converter.setup_events( extension.ExtensionManager( namespace='ceilometer.event.trait_plugin')) self.notification_manager = \ extension.ExtensionManager( namespace=self.NOTIFICATION_NAMESPACE, invoke_on_load=True, ) if not list(self.notification_manager): LOG.warning(_('Failed to load any notification handlers for %s'), self.NOTIFICATION_NAMESPACE) self.notification_manager.map(self._setup_subscription) def _setup_subscription(self, ext, *args, **kwds): """Connect to message bus to get notifications Configure the RPC connection to listen for messages on the right exchanges and topics so we receive all of the notifications. Use a connection pool so that multiple notification agent instances can run in parallel to share load and without competing with each other for incoming messages. """ handler = ext.obj ack_on_error = cfg.CONF.notification.ack_on_event_error LOG.debug(_('Event types from %(name)s: %(type)s' ' (ack_on_error=%(error)s)') % {'name': ext.name, 'type': ', '.join(handler.event_types), 'error': ack_on_error}) for exchange_topic in handler.get_exchange_topics(cfg.CONF): for topic in exchange_topic.topics: try: self.conn.join_consumer_pool( callback=self.process_notification, pool_name=topic, topic=topic, exchange_name=exchange_topic.exchange, ack_on_error=ack_on_error) except Exception: LOG.exception(_('Could not join consumer pool' ' %(topic)s/%(exchange)s') % {'topic': topic, 'exchange': exchange_topic.exchange}) def process_notification(self, notification): """RPC endpoint for notification messages When another service sends a notification over the message bus, this method receives it. See _setup_subscription(). """ LOG.debug(_('notification %r'), notification.get('event_type')) self.notification_manager.map(self._process_notification_for_ext, notification=notification) if cfg.CONF.notification.store_events: self._message_to_event(notification) def _message_to_event(self, body): """Convert message to Ceilometer Event. NOTE: the rpc layer currently rips out the notification delivery_info, which is critical to determining the source of the notification. This will have to get added back later. """ event = self.event_converter.to_event(body) if event is not None: LOG.debug(_('Saving event "%s"'), event.event_type) problem_events = [] for dispatcher in self.dispatcher_manager: problem_events.extend(dispatcher.obj.record_events(event)) if models.Event.UNKNOWN_PROBLEM in [x[0] for x in problem_events]: # Don't ack the message, raise to requeue it # if ack_on_error = False raise UnableToSaveEventException() def _process_notification_for_ext(self, ext, notification): """Wrapper for calling pipelines when a notification arrives When a message is received by process_notification(), it calls this method with each notification plugin to allow all the plugins process the notification. """ with self.pipeline_manager.publisher(context.get_admin_context()) as p: # FIXME(dhellmann): Spawn green thread? p(list(ext.obj.to_samples(notification))) ceilometer-2014.1/ceilometer/nova_client.py0000664000175300017540000000734012323717130022074 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Author: John Tran # # 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 functools import novaclient from novaclient.v1_1 import client as nova_client from oslo.config import cfg from ceilometer.openstack.common import log cfg.CONF.import_group('service_credentials', 'ceilometer.service') LOG = log.getLogger(__name__) def logged(func): @functools.wraps(func) def with_logging(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: LOG.exception(e) raise return with_logging class Client(object): """A client which gets information via python-novaclient.""" def __init__(self): """Initialize a nova client object.""" conf = cfg.CONF.service_credentials tenant = conf.os_tenant_id or conf.os_tenant_name self.nova_client = nova_client.Client( username=conf.os_username, api_key=conf.os_password, project_id=tenant, auth_url=conf.os_auth_url, region_name=conf.os_region_name, endpoint_type=conf.os_endpoint_type, cacert=conf.os_cacert, insecure=conf.insecure, no_cache=True) def _with_flavor_and_image(self, instances): for instance in instances: self._with_flavor(instance) self._with_image(instance) return instances def _with_flavor(self, instance): fid = instance.flavor['id'] try: flavor = self.nova_client.flavors.get(fid) except novaclient.exceptions.NotFound: flavor = None attr_defaults = [('name', 'unknown-id-%s' % fid), ('vcpus', 0), ('ram', 0), ('disk', 0), ('ephemeral', 0)] for attr, default in attr_defaults: if not flavor: instance.flavor[attr] = default continue instance.flavor[attr] = getattr(flavor, attr, default) def _with_image(self, instance): try: iid = instance.image['id'] except TypeError: instance.image = None instance.kernel_id = None instance.ramdisk_id = None return try: image = self.nova_client.images.get(iid) except novaclient.exceptions.NotFound: instance.image['name'] = 'unknown-id-%s' % iid instance.kernel_id = None instance.ramdisk_id = None return instance.image['name'] = getattr(image, 'name') image_metadata = getattr(image, 'metadata', None) for attr in ['kernel_id', 'ramdisk_id']: ameta = image_metadata.get(attr) if image_metadata else None setattr(instance, attr, ameta) @logged def instance_get_all_by_host(self, hostname): """Returns list of instances on particular host.""" search_opts = {'host': hostname, 'all_tenants': True} return self._with_flavor_and_image(self.nova_client.servers.list( detailed=True, search_opts=search_opts)) @logged def floating_ip_get_all(self): """Returns all floating ips.""" return self.nova_client.floating_ips.list() ceilometer-2014.1/ceilometer/transformer/0000775000175300017540000000000012323717426021567 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/transformer/accumulator.py0000664000175300017540000000253612323717130024456 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Julien Danjou # # Author: Julien Danjou # # 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. from ceilometer import transformer class TransformerAccumulator(transformer.TransformerBase): """Transformer that accumulates sample until a threshold, and then flush them out in the wild. """ def __init__(self, size=1, **kwargs): if size >= 1: self.samples = [] self.size = size super(TransformerAccumulator, self).__init__(**kwargs) def handle_sample(self, context, sample): if self.size >= 1: self.samples.append(sample) else: return sample def flush(self, context): if len(self.samples) >= self.size: x = self.samples self.samples = [] return x return [] ceilometer-2014.1/ceilometer/transformer/conversions.py0000664000175300017540000001361712323717130024511 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Red Hat, Inc # # Author: Eoghan Glynn # # 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 collections import re from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils from ceilometer import sample from ceilometer import transformer LOG = log.getLogger(__name__) class Namespace(object): """Encapsulates the namespace wrapping the evaluation of the configured scale factor. This allows nested dicts to be accessed in the attribute style, and missing attributes to yield false when used in a boolean expression. """ def __init__(self, seed): self.__dict__ = collections.defaultdict(lambda: Namespace({})) self.__dict__.update(seed) for k, v in self.__dict__.iteritems(): if isinstance(v, dict): self.__dict__[k] = Namespace(v) def __getattr__(self, attr): return self.__dict__[attr] def __getitem__(self, key): return self.__dict__[key] def __nonzero__(self): return len(self.__dict__) > 0 class ScalingTransformer(transformer.TransformerBase): """Transformer to apply a scaling conversion. """ def __init__(self, source={}, target={}, **kwargs): """Initialize transformer with configured parameters. :param source: dict containing source sample unit :param target: dict containing target sample name, type, unit and scaling factor (a missing value connotes no change) """ self.source = source self.target = target self.scale = target.get('scale') LOG.debug(_('scaling conversion transformer with source:' ' %(source)s target: %(target)s:') % {'source': source, 'target': target}) super(ScalingTransformer, self).__init__(**kwargs) def _scale(self, s): """Apply the scaling factor (either a straight multiplicative factor or else a string to be eval'd). """ ns = Namespace(s.as_dict()) scale = self.scale return ((eval(scale, {}, ns) if isinstance(scale, basestring) else s.volume * scale) if scale else s.volume) def _map(self, s, attr): """Apply the name or unit mapping if configured. """ mapped = None from_ = self.source.get('map_from') to_ = self.target.get('map_to') if from_ and to_: if from_.get(attr) and to_.get(attr): try: mapped = re.sub(from_[attr], to_[attr], getattr(s, attr)) except Exception: pass return mapped or self.target.get(attr, getattr(s, attr)) def _convert(self, s, growth=1): """Transform the appropriate sample fields. """ return sample.Sample( name=self._map(s, 'name'), unit=self._map(s, 'unit'), type=self.target.get('type', s.type), volume=self._scale(s) * growth, user_id=s.user_id, project_id=s.project_id, resource_id=s.resource_id, timestamp=s.timestamp, resource_metadata=s.resource_metadata ) def handle_sample(self, context, s): """Handle a sample, converting if necessary.""" LOG.debug(_('handling sample %s'), (s,)) if (self.source.get('unit', s.unit) == s.unit): s = self._convert(s) LOG.debug(_('converted to: %s'), (s,)) return s class RateOfChangeTransformer(ScalingTransformer): """Transformer based on the rate of change of a sample volume, for example taking the current and previous volumes of a cumulative sample and producing a gauge value based on the proportion of some maximum used. """ def __init__(self, **kwargs): """Initialize transformer with configured parameters. """ super(RateOfChangeTransformer, self).__init__(**kwargs) self.cache = {} self.scale = self.scale or '1' def handle_sample(self, context, s): """Handle a sample, converting if necessary.""" LOG.debug(_('handling sample %s'), (s,)) key = s.name + s.resource_id prev = self.cache.get(key) timestamp = timeutils.parse_isotime(s.timestamp) self.cache[key] = (s.volume, timestamp) if prev: prev_volume = prev[0] prev_timestamp = prev[1] time_delta = timeutils.delta_seconds(prev_timestamp, timestamp) # we only allow negative deltas for noncumulative samples, whereas # for cumulative we assume that a reset has occurred in the interim # so that the current volume gives a lower bound on growth volume_delta = (s.volume - prev_volume if (prev_volume <= s.volume or s.type != sample.TYPE_CUMULATIVE) else s.volume) rate_of_change = ((1.0 * volume_delta / time_delta) if time_delta else 0.0) s = self._convert(s, rate_of_change) LOG.debug(_('converted to: %s'), (s,)) else: LOG.warn(_('dropping sample with no predecessor: %s'), (s,)) s = None return s ceilometer-2014.1/ceilometer/transformer/__init__.py0000664000175300017540000000407312323717130023674 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel Corp. # # Author: Yunhong Jiang # # 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 abc import six from stevedore import extension class TransformerExtensionManager(extension.ExtensionManager): def __init__(self, namespace): super(TransformerExtensionManager, self).__init__( namespace=namespace, invoke_on_load=False, invoke_args=(), invoke_kwds={} ) self.by_name = dict((e.name, e) for e in self.extensions) def get_ext(self, name): return self.by_name[name] @six.add_metaclass(abc.ABCMeta) class TransformerBase(object): """Base class for plugins that transform the sample.""" def __init__(self, **kwargs): """Setup transformer. Each time a transformed is involved in a pipeline, a new transformer instance is created and chained into the pipeline. i.e. transformer instance is per pipeline. This helps if transformer need keep some cache and per-pipeline information. :param kwargs: The parameters that are defined in pipeline config file. """ super(TransformerBase, self).__init__() @abc.abstractmethod def handle_sample(self, context, sample): """Transform a sample. :param context: Passed from the data collector. :param sample: A sample. """ def flush(self, context): """Flush samples cached previously. :param context: Passed from the data collector. """ return [] ceilometer-2014.1/ceilometer/utils.py0000664000175300017540000001373112323717130020734 0ustar jenkinsjenkins00000000000000# Copyright 2010 United States Government as represented by the # Administrator of the National Aeronautics and Space Administration. # Copyright 2011 Justin Santa Barbara # 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. """Utilities and helper functions.""" import calendar import copy import datetime import decimal import multiprocessing from ceilometer.openstack.common import timeutils from ceilometer.openstack.common import units def recursive_keypairs(d, separator=':'): """Generator that produces sequence of keypairs for nested dictionaries. """ for name, value in sorted(d.iteritems()): if isinstance(value, dict): for subname, subvalue in recursive_keypairs(value, separator): yield ('%s%s%s' % (name, separator, subname), subvalue) elif isinstance(value, (tuple, list)): # When doing a pair of JSON encode/decode operations to the tuple, # the tuple would become list. So we have to generate the value as # list here. # in the special case of the list item itself being a dict, # create an equivalent dict with a predictable insertion order # to avoid inconsistencies in the message signature computation # for equivalent payloads modulo ordering first = lambda i: i[0] m = map(lambda x: unicode(dict(sorted(x.items(), key=first)) if isinstance(x, dict) else x).encode('utf-8'), value) yield name, list(m) else: yield name, value def restore_nesting(d, separator=':'): """Unwinds a flattened dict to restore nesting. """ d = copy.copy(d) if any([separator in k for k in d.keys()]) else d for k, v in d.items(): if separator in k: top, rem = k.split(separator, 1) nest = d[top] if isinstance(d.get(top), dict) else {} nest[rem] = v d[top] = restore_nesting(nest, separator) del d[k] return d def dt_to_decimal(utc): """Datetime to Decimal. Some databases don't store microseconds in datetime so we always store as Decimal unixtime. """ if utc is None: return None decimal.getcontext().prec = 30 return decimal.Decimal(str(calendar.timegm(utc.utctimetuple()))) + \ (decimal.Decimal(str(utc.microsecond)) / decimal.Decimal("1000000.0")) def decimal_to_dt(dec): """Return a datetime from Decimal unixtime format. """ if dec is None: return None integer = int(dec) micro = (dec - decimal.Decimal(integer)) * decimal.Decimal(units.M) daittyme = datetime.datetime.utcfromtimestamp(integer) return daittyme.replace(microsecond=int(round(micro))) def sanitize_timestamp(timestamp): """Return a naive utc datetime object.""" if not timestamp: return timestamp if not isinstance(timestamp, datetime.datetime): timestamp = timeutils.parse_isotime(timestamp) return timeutils.normalize_time(timestamp) def stringify_timestamps(data): """Stringify any datetimes in given dict.""" isa_timestamp = lambda v: isinstance(v, datetime.datetime) return dict((k, v.isoformat() if isa_timestamp(v) else v) for (k, v) in data.iteritems()) def dict_to_keyval(value, key_base=None): """Expand a given dict to its corresponding key-value pairs. Generated keys are fully qualified, delimited using dot notation. ie. key = 'key.child_key.grandchild_key[0]' """ val_iter, key_func = None, None if isinstance(value, dict): val_iter = value.iteritems() key_func = lambda k: key_base + '.' + k if key_base else k elif isinstance(value, (tuple, list)): val_iter = enumerate(value) key_func = lambda k: key_base + '[%d]' % k if val_iter: for k, v in val_iter: key_gen = key_func(k) if isinstance(v, dict) or isinstance(v, (tuple, list)): for key_gen, v in dict_to_keyval(v, key_gen): yield key_gen, v else: yield key_gen, v def lowercase_keys(mapping): """Converts the values of the keys in mapping to lowercase.""" items = mapping.items() for key, value in items: del mapping[key] mapping[key.lower()] = value def lowercase_values(mapping): """Converts the values in the mapping dict to lowercase.""" items = mapping.items() for key, value in items: mapping[key] = value.lower() def update_nested(original_dict, updates): """Updates the leaf nodes in a nest dict, without replacing entire sub-dicts. """ dict_to_update = copy.deepcopy(original_dict) for key, value in updates.iteritems(): if isinstance(value, dict): sub_dict = update_nested(dict_to_update.get(key, {}), value) dict_to_update[key] = sub_dict else: dict_to_update[key] = updates[key] return dict_to_update def cpu_count(): try: return multiprocessing.cpu_count() or 1 except NotImplementedError: return 1 def uniq(dupes, attrs): """Exclude elements of dupes with a duplicated set of attribute values.""" key = lambda d: '/'.join([getattr(d, a) or '' for a in attrs]) keys = [] deduped = [] for d in dupes: if key(d) not in keys: deduped.append(d) keys.append(key(d)) return deduped ceilometer-2014.1/ceilometer/compute/0000775000175300017540000000000012323717426020701 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/manager.py0000664000175300017540000000215312323717130022656 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012-2013 eNovance # # Author: Julien Danjou # # 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. from ceilometer import agent from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common import log LOG = log.getLogger(__name__) class AgentManager(agent.AgentManager): def __init__(self): super(AgentManager, self).__init__('compute', ['local_instances']) self._inspector = virt_inspector.get_hypervisor_inspector() @property def inspector(self): return self._inspector ceilometer-2014.1/ceilometer/compute/notifications/0000775000175300017540000000000012323717426023552 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/notifications/cpu.py0000664000175300017540000001066612323717130024714 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel # # Author: Shuangtai Tian # # 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. """Converters for producing compute CPU sample messages from notification events. """ from ceilometer.compute import notifications from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils from ceilometer import sample LOG = log.getLogger(__name__) class ComputeMetricsNotificationBase(notifications.ComputeNotificationBase): """Convert compute.metrics.update notifications into Samples """ event_types = ['compute.metrics.update'] metric = None sample_type = None unit = None @staticmethod def _get_sample(message, name): try: for metric in message['payload']['metrics']: if name == metric['name']: info = {} info['payload'] = metric info['event_type'] = message['event_type'] info['publisher_id'] = message['publisher_id'] info['resource_id'] = '%s_%s' % ( message['payload']['host'], message['payload']['nodename']) info['timestamp'] = str(timeutils.parse_strtime( metric['timestamp'])) return info except Exception as err: LOG.warning(_('An error occurred while building %(m)s ' 'sample: %(e)s') % {'m': name, 'e': err}) def process_notification(self, message): info = self._get_sample(message, self.metric) if info: yield sample.Sample.from_notification( name='compute.node.%s' % self.metric, type=self.sample_type, unit=self.unit, volume=(info['payload']['value'] * 100 if self.unit == '%' else info['payload']['value']), user_id=None, project_id=None, resource_id=info['resource_id'], message=info) class CpuFrequency(ComputeMetricsNotificationBase): """Handle CPU current frequency message.""" metric = 'cpu.frequency' sample_type = sample.TYPE_GAUGE unit = 'MHz' class CpuUserTime(ComputeMetricsNotificationBase): """Handle CPU user mode time message.""" metric = 'cpu.user.time' sample_type = sample.TYPE_CUMULATIVE unit = 'ns' class CpuKernelTime(ComputeMetricsNotificationBase): """Handle CPU kernel time message.""" metric = 'cpu.kernel.time' unit = 'ns' sample_type = sample.TYPE_CUMULATIVE class CpuIdleTime(ComputeMetricsNotificationBase): """Handle CPU idle time message.""" metric = 'cpu.idle.time' unit = 'ns' sample_type = sample.TYPE_CUMULATIVE class CpuIowaitTime(ComputeMetricsNotificationBase): """Handle CPU I/O wait time message.""" metric = 'cpu.iowait.time' unit = 'ns' sample_type = sample.TYPE_CUMULATIVE class CpuKernelPercent(ComputeMetricsNotificationBase): """Handle CPU kernel percentage message.""" metric = 'cpu.kernel.percent' unit = '%' sample_type = sample.TYPE_GAUGE class CpuIdlePercent(ComputeMetricsNotificationBase): """Handle CPU idle percentage message.""" metric = 'cpu.idle.percent' unit = '%' sample_type = sample.TYPE_GAUGE class CpuUserPercent(ComputeMetricsNotificationBase): """Handle CPU user mode percentage message.""" metric = 'cpu.user.percent' unit = '%' sample_type = sample.TYPE_GAUGE class CpuIowaitPercent(ComputeMetricsNotificationBase): """Handle CPU I/O wait percentage message.""" metric = 'cpu.iowait.percent' unit = '%' sample_type = sample.TYPE_GAUGE class CpuPercent(ComputeMetricsNotificationBase): """Handle generic CPU utilization message.""" metric = 'cpu.percent' unit = '%' sample_type = sample.TYPE_GAUGE ceilometer-2014.1/ceilometer/compute/notifications/__init__.py0000664000175300017540000000252212323717132025656 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 Intel # # Author: Shuangtai Tian # # 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. from oslo.config import cfg from ceilometer import plugin OPTS = [ cfg.StrOpt('nova_control_exchange', default='nova', help="Exchange name for Nova notifications."), ] cfg.CONF.register_opts(OPTS) class ComputeNotificationBase(plugin.NotificationBase): @staticmethod def get_exchange_topics(conf): """Return a sequence of ExchangeTopics defining the exchange and topics to be connected for this plugin. """ return [ plugin.ExchangeTopics( exchange=conf.nova_control_exchange, topics=set(topic + ".info" for topic in conf.notification_topics)), ] ceilometer-2014.1/ceilometer/compute/notifications/instance.py0000664000175300017540000001445312323717132025731 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # Copyright © 2013 eNovance # # Author: Doug Hellmann # Julien Danjou # # 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. """Converters for producing compute sample messages from notification events. """ import abc import six from ceilometer.compute import notifications from ceilometer.compute import util from ceilometer import sample @six.add_metaclass(abc.ABCMeta) class UserMetadataAwareInstanceNotificationBase( notifications.ComputeNotificationBase): """Consumes notifications containing instance user metadata. """ def process_notification(self, message): instance_properties = self.get_instance_properties(message) if 'metadata' in instance_properties: src_metadata = instance_properties['metadata'] del instance_properties['metadata'] util.add_reserved_user_metadata(src_metadata, instance_properties) return self.get_sample(message) def get_instance_properties(self, message): """Retrieve instance properties from notification payload.""" return message['payload'] @abc.abstractmethod def get_sample(self, message): """Derive sample from notification payload.""" class InstanceScheduled(UserMetadataAwareInstanceNotificationBase): event_types = ['scheduler.run_instance.scheduled'] def get_instance_properties(self, message): """Retrieve instance properties from notification payload.""" return message['payload']['request_spec']['instance_properties'] def get_sample(self, message): yield sample.Sample.from_notification( name='instance.scheduled', type=sample.TYPE_DELTA, volume=1, unit='instance', user_id=None, project_id= message['payload']['request_spec'] ['instance_properties']['project_id'], resource_id=message['payload']['instance_id'], message=message) class ComputeInstanceNotificationBase( UserMetadataAwareInstanceNotificationBase): """Convert compute.instance.* notifications into Samples """ event_types = ['compute.instance.*'] class Instance(ComputeInstanceNotificationBase): def get_sample(self, message): yield sample.Sample.from_notification( name='instance', type=sample.TYPE_GAUGE, unit='instance', volume=1, user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) class Memory(ComputeInstanceNotificationBase): def get_sample(self, message): yield sample.Sample.from_notification( name='memory', type=sample.TYPE_GAUGE, unit='MB', volume=message['payload']['memory_mb'], user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) class VCpus(ComputeInstanceNotificationBase): def get_sample(self, message): yield sample.Sample.from_notification( name='vcpus', type=sample.TYPE_GAUGE, unit='vcpu', volume=message['payload']['vcpus'], user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) class RootDiskSize(ComputeInstanceNotificationBase): def get_sample(self, message): yield sample.Sample.from_notification( name='disk.root.size', type=sample.TYPE_GAUGE, unit='GB', volume=message['payload']['root_gb'], user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) class EphemeralDiskSize(ComputeInstanceNotificationBase): def get_sample(self, message): yield sample.Sample.from_notification( name='disk.ephemeral.size', type=sample.TYPE_GAUGE, unit='GB', volume=message['payload']['ephemeral_gb'], user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) class InstanceFlavor(ComputeInstanceNotificationBase): def get_sample(self, message): instance_type = message.get('payload', {}).get('instance_type') if instance_type: yield sample.Sample.from_notification( name='instance:%s' % instance_type, type=sample.TYPE_GAUGE, unit='instance', volume=1, user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) class InstanceDelete(ComputeInstanceNotificationBase): """Handle the messages sent by the nova notifier plugin when an instance is being deleted. """ event_types = ['compute.instance.delete.samples'] def get_sample(self, message): for s in message['payload'].get('samples', []): yield sample.Sample.from_notification( name=s['name'], type=s['type'], unit=s['unit'], volume=s['volume'], user_id=message['payload']['user_id'], project_id=message['payload']['tenant_id'], resource_id=message['payload']['instance_id'], message=message) ceilometer-2014.1/ceilometer/compute/discovery.py0000664000175300017540000000224512323717130023255 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2014 Red Hat, Inc # # Author: Eoghan Glynn # # 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. from oslo.config import cfg from ceilometer import nova_client from ceilometer import plugin class InstanceDiscovery(plugin.DiscoveryBase): def __init__(self): super(InstanceDiscovery, self).__init__() self.nova_cli = nova_client.Client() def discover(self, param=None): """Discover resources to monitor. """ instances = self.nova_cli.instance_get_all_by_host(cfg.CONF.host) return [i for i in instances if getattr(i, 'OS-EXT-STS:vm_state', None) != 'error'] ceilometer-2014.1/ceilometer/compute/nova_notifier.py0000664000175300017540000001416712323717130024116 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2013 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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 sys from nova import notifications from nova.openstack.common import log as logging from nova.openstack.common.notifier import api as notifier_api # HACK(dhellmann): Insert the nova version of openstack.common into # sys.modules as though it was the copy from ceilometer, so that when # we use modules from ceilometer below they do not re-define options. # use the real ceilometer base package import ceilometer # noqa for name in ['openstack', 'openstack.common', 'openstack.common.log']: sys.modules['ceilometer.' + name] = sys.modules['nova.' + name] from nova.compute import flavors from nova import conductor from nova import utils from stevedore import extension from ceilometer.compute.virt import inspector from ceilometer.openstack.common.gettextutils import _ # noqa # This module runs inside the nova compute # agent, which only configures the "nova" logger. # We use a fake logger name in that namespace # so that messages from this module appear # in the log file. LOG = logging.getLogger('nova.ceilometer.notifier') _gatherer = None conductor_api = conductor.API() class DeletedInstanceStatsGatherer(object): def __init__(self, extensions): self.mgr = extensions self.inspector = inspector.get_hypervisor_inspector() def __call__(self, instance): cache = {} samples = self.mgr.map_method('get_samples', self, cache, instance) # samples is a list of lists, so flatten it before returning # the results results = [] for slist in samples: results.extend(slist) return results def initialize_gatherer(gatherer=None): """Set the callable used to gather stats for the instance. gatherer should be a callable accepting one argument (the instance ref), or None to have a default gatherer used """ global _gatherer if gatherer is not None: LOG.debug(_('using provided stats gatherer %r'), gatherer) _gatherer = gatherer if _gatherer is None: LOG.debug(_('making a new stats gatherer')) mgr = extension.ExtensionManager( namespace='ceilometer.poll.compute', invoke_on_load=True, ) _gatherer = DeletedInstanceStatsGatherer(mgr) return _gatherer class Instance(object): """Model class for instances The pollsters all expect an instance that looks like what the novaclient gives them, but the conductor API gives us a dictionary. This class makes an object from the dictionary so we can pass it to the pollsters. """ def __init__(self, context, info): for k, v in info.iteritems(): if k == 'name': setattr(self, 'OS-EXT-SRV-ATTR:instance_name', v) elif k == 'metadata': setattr(self, k, utils.metadata_to_dict(v)) else: setattr(self, k, v) instance_type = flavors.extract_flavor(info) self.flavor_name = instance_type.get('name', 'UNKNOWN') self.instance_flavor_id = instance_type.get('flavorid', '') LOG.debug(_('INFO %r'), info) @property def tenant_id(self): return self.project_id @property def flavor(self): return { 'id': self.instance_type_id, 'flavor_id': self.instance_flavor_id, 'name': self.flavor_name, 'vcpus': self.vcpus, 'ram': self.memory_mb, 'disk': self.root_gb + self.ephemeral_gb, 'ephemeral': self.ephemeral_gb } @property def hostId(self): return self.host @property def image(self): return {'id': self.image_ref} @property def name(self): return self.display_name def notify(context, message): if message['event_type'] != 'compute.instance.delete.start': LOG.debug(_('ignoring %s'), message['event_type']) return LOG.info(_('processing %s'), message['event_type']) gatherer = initialize_gatherer() instance_id = message['payload']['instance_id'] LOG.debug(_('polling final stats for %r'), instance_id) # Ask for the instance details instance_ref = conductor_api.instance_get_by_uuid( context, instance_id, ) # Get the default notification payload payload = notifications.info_from_instance( context, instance_ref, None, None) # Extend the payload with samples from our plugins. We only need # to send some of the data from the sample objects, since a lot # of the fields are the same. instance = Instance(context, instance_ref) samples = gatherer(instance) payload['samples'] = [{'name': s.name, 'type': s.type, 'unit': s.unit, 'volume': s.volume} for s in samples] publisher_id = notifier_api.publisher_id('compute', None) # We could simply modify the incoming message payload, but we # can't be sure that this notifier will be called before the RPC # notifier. Modifying the content may also break the message # signature. So, we start a new message publishing. We will be # called again recursively as a result, but we ignore the event we # generate so it doesn't matter. notifier_api.notify(context, publisher_id, 'compute.instance.delete.samples', notifier_api.INFO, payload) ceilometer-2014.1/ceilometer/compute/__init__.py0000664000175300017540000000000012323717130022770 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/0000775000175300017540000000000012323717426021665 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/inspector.py0000664000175300017540000001634512323717130024246 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 Red Hat, Inc # # Author: Eoghan Glynn # Doug Hellmann # # 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. """Inspector abstraction for read-only access to hypervisors.""" import collections from oslo.config import cfg from stevedore import driver from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log OPTS = [ cfg.StrOpt('hypervisor_inspector', default='libvirt', help='Inspector to use for inspecting the hypervisor layer.'), ] cfg.CONF.register_opts(OPTS) LOG = log.getLogger(__name__) # Named tuple representing instances. # # name: the name of the instance # uuid: the UUID associated with the instance # Instance = collections.namedtuple('Instance', ['name', 'UUID']) # Named tuple representing CPU statistics. # # number: number of CPUs # time: cumulative CPU time # CPUStats = collections.namedtuple('CPUStats', ['number', 'time']) # Named tuple representing CPU Utilization statistics. # # util: CPU utilization in percentage # CPUUtilStats = collections.namedtuple('CPUUtilStats', ['util']) # Named tuple representing Memory usage statistics. # # usage: Amount of memory used # MemoryUsageStats = collections.namedtuple('MemoryUsageStats', ['usage']) # Named tuple representing vNICs. # # name: the name of the vNIC # mac: the MAC address # fref: the filter ref # parameters: miscellaneous parameters # Interface = collections.namedtuple('Interface', ['name', 'mac', 'fref', 'parameters']) # Named tuple representing vNIC statistics. # # rx_bytes: number of received bytes # rx_packets: number of received packets # tx_bytes: number of transmitted bytes # tx_packets: number of transmitted packets # InterfaceStats = collections.namedtuple('InterfaceStats', ['rx_bytes', 'rx_packets', 'tx_bytes', 'tx_packets']) # Named tuple representing vNIC rate statistics. # # rx_bytes_rate: rate of received bytes # tx_bytes_rate: rate of transmitted bytes # InterfaceRateStats = collections.namedtuple('InterfaceRateStats', ['rx_bytes_rate', 'tx_bytes_rate']) # Named tuple representing disks. # # device: the device name for the disk # Disk = collections.namedtuple('Disk', ['device']) # Named tuple representing disk statistics. # # read_bytes: number of bytes read # read_requests: number of read operations # write_bytes: number of bytes written # write_requests: number of write operations # errors: number of errors # DiskStats = collections.namedtuple('DiskStats', ['read_bytes', 'read_requests', 'write_bytes', 'write_requests', 'errors']) # Named tuple representing disk rate statistics. # # read_bytes_rate: number of bytes read per second # read_requests_rate: number of read operations per second # write_bytes_rate: number of bytes written per second # write_requests_rate: number of write operations per second # DiskRateStats = collections.namedtuple('DiskRateStats', ['read_bytes_rate', 'read_requests_rate', 'write_bytes_rate', 'write_requests_rate']) # Exception types # class InspectorException(Exception): def __init__(self, message=None): super(InspectorException, self).__init__(message) class InstanceNotFoundException(InspectorException): pass # Main virt inspector abstraction layering over the hypervisor API. # class Inspector(object): def inspect_instances(self): """List the instances on the current host.""" raise NotImplementedError() def inspect_cpus(self, instance_name): """Inspect the CPU statistics for an instance. :param instance_name: the name of the target instance :return: the number of CPUs and cumulative CPU time """ raise NotImplementedError() def inspect_cpu_util(self, instance, duration=None): """Inspect the CPU Utilization (%) for an instance. :param instance: the target instance :param duration: the last 'n' seconds, over which the value should be inspected :return: the percentage of CPU utilization """ raise NotImplementedError() def inspect_vnics(self, instance_name): """Inspect the vNIC statistics for an instance. :param instance_name: the name of the target instance :return: for each vNIC, the number of bytes & packets received and transmitted """ raise NotImplementedError() def inspect_vnic_rates(self, instance, duration=None): """Inspect the vNIC rate statistics for an instance. :param instance: the target instance :param duration: the last 'n' seconds, over which the value should be inspected :return: for each vNIC, the rate of bytes & packets received and transmitted """ raise NotImplementedError() def inspect_disks(self, instance_name): """Inspect the disk statistics for an instance. :param instance_name: the name of the target instance :return: for each disk, the number of bytes & operations read and written, and the error count """ raise NotImplementedError() def inspect_memory_usage(self, instance, duration=None): """Inspect the memory usage statistics for an instance. :param instance: the target instance :param duration: the last 'n' seconds, over which the value should be inspected :return: the amount of memory used """ raise NotImplementedError() def inspect_disk_rates(self, instance, duration=None): """Inspect the disk statistics as rates for an instance. :param instance: the target instance :param duration: the last 'n' seconds, over which the value should be inspected :return: for each disk, the number of bytes & operations read and written per second, with the error count """ raise NotImplementedError() def get_hypervisor_inspector(): try: namespace = 'ceilometer.compute.virt' mgr = driver.DriverManager(namespace, cfg.CONF.hypervisor_inspector, invoke_on_load=True) return mgr.driver except ImportError as e: LOG.error(_("Unable to load the hypervisor inspector: %s") % (e)) return Inspector() ceilometer-2014.1/ceilometer/compute/virt/__init__.py0000664000175300017540000000000012323717130023754 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/libvirt/0000775000175300017540000000000012323717426023340 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/libvirt/inspector.py0000664000175300017540000001553512323717132025723 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 Red Hat, Inc # # Author: Eoghan Glynn # # 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. """Implementation of Inspector abstraction for libvirt.""" from lxml import etree from oslo.config import cfg from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log as logging libvirt = None LOG = logging.getLogger(__name__) libvirt_opts = [ cfg.StrOpt('libvirt_type', default='kvm', help='Libvirt domain type (valid options are: ' 'kvm, lxc, qemu, uml, xen).'), cfg.StrOpt('libvirt_uri', default='', help='Override the default libvirt URI ' '(which is dependent on libvirt_type).'), ] CONF = cfg.CONF CONF.register_opts(libvirt_opts) class LibvirtInspector(virt_inspector.Inspector): per_type_uris = dict(uml='uml:///system', xen='xen:///', lxc='lxc:///') def __init__(self): self.uri = self._get_uri() self.connection = None def _get_uri(self): return CONF.libvirt_uri or self.per_type_uris.get(CONF.libvirt_type, 'qemu:///system') def _get_connection(self): if not self.connection or not self._test_connection(): global libvirt if libvirt is None: libvirt = __import__('libvirt') LOG.debug(_('Connecting to libvirt: %s'), self.uri) self.connection = libvirt.openReadOnly(self.uri) return self.connection def _test_connection(self): try: self.connection.getCapabilities() return True except libvirt.libvirtError as e: if (e.get_error_code() == libvirt.VIR_ERR_SYSTEM_ERROR and e.get_error_domain() in (libvirt.VIR_FROM_REMOTE, libvirt.VIR_FROM_RPC)): LOG.debug(_('Connection to libvirt broke')) return False raise def _lookup_by_name(self, instance_name): try: return self._get_connection().lookupByName(instance_name) except Exception as ex: if not libvirt or not isinstance(ex, libvirt.libvirtError): raise virt_inspector.InspectorException(unicode(ex)) error_code = ex.get_error_code() msg = ("Error from libvirt while looking up %(instance_name)s: " "[Error Code %(error_code)s] " "%(ex)s" % {'instance_name': instance_name, 'error_code': error_code, 'ex': ex}) raise virt_inspector.InstanceNotFoundException(msg) def inspect_instances(self): if self._get_connection().numOfDomains() > 0: for domain_id in self._get_connection().listDomainsID(): try: # We skip domains with ID 0 (hypervisors). if domain_id != 0: domain = self._get_connection().lookupByID(domain_id) yield virt_inspector.Instance(name=domain.name(), UUID=domain.UUIDString()) except libvirt.libvirtError: # Instance was deleted while listing... ignore it pass def inspect_cpus(self, instance_name): domain = self._lookup_by_name(instance_name) (__, __, __, num_cpu, cpu_time) = domain.info() return virt_inspector.CPUStats(number=num_cpu, time=cpu_time) def inspect_vnics(self, instance_name): domain = self._lookup_by_name(instance_name) (state, __, __, __, __) = domain.info() if state == libvirt.VIR_DOMAIN_SHUTOFF: LOG.warn(_('Failed to inspect vnics of %(instance_name)s, ' 'domain is in state of SHUTOFF'), {'instance_name': instance_name}) return tree = etree.fromstring(domain.XMLDesc(0)) for iface in tree.findall('devices/interface'): target = iface.find('target') if target is not None: name = target.get('dev') else: continue mac = iface.find('mac') if mac is not None: mac_address = mac.get('address') else: continue fref = iface.find('filterref') if fref is not None: fref = fref.get('filter') params = dict((p.get('name').lower(), p.get('value')) for p in iface.findall('filterref/parameter')) interface = virt_inspector.Interface(name=name, mac=mac_address, fref=fref, parameters=params) rx_bytes, rx_packets, __, __, \ tx_bytes, tx_packets, __, __ = domain.interfaceStats(name) stats = virt_inspector.InterfaceStats(rx_bytes=rx_bytes, rx_packets=rx_packets, tx_bytes=tx_bytes, tx_packets=tx_packets) yield (interface, stats) def inspect_disks(self, instance_name): domain = self._lookup_by_name(instance_name) (state, __, __, __, __) = domain.info() if state == libvirt.VIR_DOMAIN_SHUTOFF: LOG.warn(_('Failed to inspect disks of %(instance_name)s, ' 'domain is in state of SHUTOFF'), {'instance_name': instance_name}) return tree = etree.fromstring(domain.XMLDesc(0)) for device in filter( bool, [target.get("dev") for target in tree.findall('devices/disk/target')]): disk = virt_inspector.Disk(device=device) block_stats = domain.blockStats(device) stats = virt_inspector.DiskStats(read_requests=block_stats[0], read_bytes=block_stats[1], write_requests=block_stats[2], write_bytes=block_stats[3], errors=block_stats[4]) yield (disk, stats) ceilometer-2014.1/ceilometer/compute/virt/libvirt/__init__.py0000664000175300017540000000000012323717130025427 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/hyperv/0000775000175300017540000000000012323717426023202 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/hyperv/inspector.py0000664000175300017540000000612212323717130025553 0ustar jenkinsjenkins00000000000000# Copyright 2013 Cloudbase Solutions Srl # # Author: Claudiu Belu # Alessandro Pilotti # # 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. """Implementation of Inspector abstraction for Hyper-V""" from oslo.config import cfg from ceilometer.compute.virt.hyperv import utilsv2 from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common import log from ceilometer.openstack.common import units CONF = cfg.CONF LOG = log.getLogger(__name__) class HyperVInspector(virt_inspector.Inspector): def __init__(self): super(HyperVInspector, self).__init__() self._utils = utilsv2.UtilsV2() def inspect_instances(self): for element_name, name in self._utils.get_all_vms(): yield virt_inspector.Instance( name=element_name, UUID=name) def inspect_cpus(self, instance_name): (cpu_clock_used, cpu_count, uptime) = self._utils.get_cpu_metrics(instance_name) host_cpu_clock, host_cpu_count = self._utils.get_host_cpu_info() cpu_percent_used = (cpu_clock_used / float(host_cpu_clock * cpu_count)) # Nanoseconds cpu_time = (long(uptime * cpu_percent_used) * units.k) return virt_inspector.CPUStats(number=cpu_count, time=cpu_time) def inspect_vnics(self, instance_name): for vnic_metrics in self._utils.get_vnic_metrics(instance_name): interface = virt_inspector.Interface( name=vnic_metrics["element_name"], mac=vnic_metrics["address"], fref=None, parameters=None) stats = virt_inspector.InterfaceStats( rx_bytes=vnic_metrics['rx_mb'] * units.Mi, rx_packets=0, tx_bytes=vnic_metrics['tx_mb'] * units.Mi, tx_packets=0) yield (interface, stats) def inspect_disks(self, instance_name): for disk_metrics in self._utils.get_disk_metrics(instance_name): device = dict([(i, disk_metrics[i]) for i in ['instance_id', 'host_resource'] if i in disk_metrics]) disk = virt_inspector.Disk(device=device) stats = virt_inspector.DiskStats( read_requests=0, # Return bytes read_bytes=disk_metrics['read_mb'] * units.Mi, write_requests=0, write_bytes=disk_metrics['write_mb'] * units.Mi, errors=0) yield (disk, stats) ceilometer-2014.1/ceilometer/compute/virt/hyperv/__init__.py0000664000175300017540000000000012323717130025271 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/hyperv/utilsv2.py0000664000175300017540000001727012323717130025163 0ustar jenkinsjenkins00000000000000# Copyright 2013 Cloudbase Solutions Srl # # Author: Claudiu Belu # Alessandro Pilotti # # 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. """ Utility class for VM related operations. Based on the "root/virtualization/v2" namespace available starting with Hyper-V Server / Windows Server 2012. """ import sys if sys.platform == 'win32': import wmi from oslo.config import cfg from ceilometer.compute.virt import inspector from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log as logging CONF = cfg.CONF LOG = logging.getLogger(__name__) class HyperVException(inspector.InspectorException): pass class UtilsV2(object): _VIRTUAL_SYSTEM_TYPE_REALIZED = 'Microsoft:Hyper-V:System:Realized' _PROC_SETTING = 'Msvm_ProcessorSettingData' _SYNTH_ETH_PORT = 'Msvm_SyntheticEthernetPortSettingData' _ETH_PORT_ALLOC = 'Msvm_EthernetPortAllocationSettingData' _PORT_ACL_SET_DATA = 'Msvm_EthernetSwitchPortAclSettingData' _STORAGE_ALLOC = 'Msvm_StorageAllocationSettingData' _VS_SETTING_DATA = 'Msvm_VirtualSystemSettingData' _METRICS_ME = 'Msvm_MetricForME' _BASE_METRICS_VALUE = 'Msvm_BaseMetricValue' _CPU_METRIC_NAME = 'Aggregated Average CPU Utilization' _NET_IN_METRIC_NAME = 'Filtered Incoming Network Traffic' _NET_OUT_METRIC_NAME = 'Filtered Outgoing Network Traffic' # Disk metrics are supported from Hyper-V 2012 R2 _DISK_RD_METRIC_NAME = 'Disk Data Read' _DISK_WR_METRIC_NAME = 'Disk Data Written' def __init__(self, host='.'): if sys.platform == 'win32': self._init_hyperv_wmi_conn(host) self._init_cimv2_wmi_conn(host) self._host_cpu_info = None def _init_hyperv_wmi_conn(self, host): self._conn = wmi.WMI(moniker='//%s/root/virtualization/v2' % host) def _init_cimv2_wmi_conn(self, host): self._conn_cimv2 = wmi.WMI(moniker='//%s/root/cimv2' % host) def get_host_cpu_info(self): if not self._host_cpu_info: host_cpus = self._conn_cimv2.Win32_Processor() self._host_cpu_info = (host_cpus[0].MaxClockSpeed, len(host_cpus)) return self._host_cpu_info def get_all_vms(self): vms = [(v.ElementName, v.Name) for v in self._conn.Msvm_ComputerSystem(['ElementName', 'Name'], Caption="Virtual Machine")] return vms def get_cpu_metrics(self, vm_name): vm = self._lookup_vm(vm_name) cpu_sd = self._get_vm_resources(vm, self._PROC_SETTING)[0] cpu_metrics_def = self._get_metric_def(self._CPU_METRIC_NAME) cpu_metric_aggr = self._get_metrics(vm, cpu_metrics_def) cpu_used = 0 if cpu_metric_aggr: cpu_used = long(cpu_metric_aggr[0].MetricValue) return (cpu_used, int(cpu_sd.VirtualQuantity), long(vm.OnTimeInMilliseconds)) def get_vnic_metrics(self, vm_name): vm = self._lookup_vm(vm_name) ports = self._get_vm_resources(vm, self._ETH_PORT_ALLOC) vnics = self._get_vm_resources(vm, self._SYNTH_ETH_PORT) metric_def_in = self._get_metric_def(self._NET_IN_METRIC_NAME) metric_def_out = self._get_metric_def(self._NET_OUT_METRIC_NAME) for port in ports: vnic = [v for v in vnics if port.Parent == v.path_()][0] metric_value_instances = self._get_metric_value_instances( port.associators(wmi_result_class=self._PORT_ACL_SET_DATA), self._BASE_METRICS_VALUE) metric_values = self._sum_metric_values_by_defs( metric_value_instances, [metric_def_in, metric_def_out]) yield { 'rx_mb': metric_values[0], 'tx_mb': metric_values[1], 'element_name': vnic.ElementName, 'address': vnic.Address } def get_disk_metrics(self, vm_name): vm = self._lookup_vm(vm_name) metric_def_r = self._get_metric_def(self._DISK_RD_METRIC_NAME) metric_def_w = self._get_metric_def(self._DISK_WR_METRIC_NAME) disks = self._get_vm_resources(vm, self._STORAGE_ALLOC) for disk in disks: metric_values = self._get_metric_values( disk, [metric_def_r, metric_def_w]) # Thi sis e.g. the VHD file location if disk.HostResource: host_resource = disk.HostResource[0] yield { # Values are in megabytes 'read_mb': metric_values[0], 'write_mb': metric_values[1], 'instance_id': disk.InstanceID, 'host_resource': host_resource } def _sum_metric_values(self, metrics): tot_metric_val = 0 for metric in metrics: tot_metric_val += long(metric.MetricValue) return tot_metric_val def _sum_metric_values_by_defs(self, element_metrics, metric_defs): metric_values = [] for metric_def in metric_defs: if metric_def: metrics = self._filter_metrics(element_metrics, metric_def) metric_values.append(self._sum_metric_values(metrics)) else: # In case the metric is not defined on this host metric_values.append(0) return metric_values def _get_metric_value_instances(self, elements, result_class): instances = [] for el in elements: associators = el.associators(wmi_result_class=result_class) if associators: instances.append(associators[0]) return instances def _get_metric_values(self, element, metric_defs): element_metrics = element.associators( wmi_association_class=self._METRICS_ME) return self._sum_metric_values_by_defs(element_metrics, metric_defs) def _lookup_vm(self, vm_name): vms = self._conn.Msvm_ComputerSystem(ElementName=vm_name) n = len(vms) if n == 0: raise inspector.InstanceNotFoundException( _('VM %s not found on Hyper-V') % vm_name) elif n > 1: raise HyperVException(_('Duplicate VM name found: %s') % vm_name) else: return vms[0] def _get_metrics(self, element, metric_def): return self._filter_metrics( element.associators( wmi_association_class=self._METRICS_ME), metric_def) def _filter_metrics(self, all_metrics, metric_def): return [v for v in all_metrics if v.MetricDefinitionId == metric_def.Id] def _get_metric_def(self, metric_def): metric = self._conn.CIM_BaseMetricDefinition(ElementName=metric_def) if metric: return metric[0] def _get_vm_setting_data(self, vm): vm_settings = vm.associators( wmi_result_class=self._VS_SETTING_DATA) # Avoid snapshots return [s for s in vm_settings if s.VirtualSystemType == self._VIRTUAL_SYSTEM_TYPE_REALIZED][0] def _get_vm_resources(self, vm, resource_class): setting_data = self._get_vm_setting_data(vm) return setting_data.associators(wmi_result_class=resource_class) ceilometer-2014.1/ceilometer/compute/virt/vmware/0000775000175300017540000000000012323717426023166 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/vmware/inspector.py0000664000175300017540000001613412323717130025543 0ustar jenkinsjenkins00000000000000# Copyright (c) 2014 VMware, 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. """Implementation of Inspector abstraction for VMware vSphere""" from oslo.config import cfg from oslo.vmware import api from oslo.vmware import vim from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.compute.virt.vmware import vsphere_operations from ceilometer.openstack.common import units opt_group = cfg.OptGroup(name='vmware', title='Options for VMware') OPTS = [ cfg.StrOpt('host_ip', default='', help='IP address of the VMware Vsphere host'), cfg.StrOpt('host_username', default='', help='Username of VMware Vsphere'), cfg.StrOpt('host_password', default='', help='Password of VMware Vsphere'), cfg.IntOpt('api_retry_count', default=10, help='Number of times a VMware Vsphere API must be retried'), cfg.FloatOpt('task_poll_interval', default=0.5, help='Sleep time in seconds for polling an ongoing async ' 'task') ] cfg.CONF.register_group(opt_group) cfg.CONF.register_opts(OPTS, group=opt_group) VC_AVERAGE_MEMORY_CONSUMED_CNTR = 'mem:consumed:average' VC_AVERAGE_CPU_CONSUMED_CNTR = 'cpu:usage:average' VC_NETWORK_RX_COUNTER = 'net:received:average' VC_NETWORK_TX_COUNTER = 'net:transmitted:average' VC_DISK_READ_RATE_CNTR = "disk:read:average" VC_DISK_READ_REQUESTS_RATE_CNTR = "disk:numberReadAveraged:average" VC_DISK_WRITE_RATE_CNTR = "disk:write:average" VC_DISK_WRITE_REQUESTS_RATE_CNTR = "disk:numberWriteAveraged:average" def get_api_session(): hostIp = cfg.CONF.vmware.host_ip wsdl_loc = vim.Vim._get_wsdl_loc("https", hostIp) api_session = api.VMwareAPISession( hostIp, cfg.CONF.vmware.host_username, cfg.CONF.vmware.host_password, cfg.CONF.vmware.api_retry_count, cfg.CONF.vmware.task_poll_interval, wsdl_loc=wsdl_loc) return api_session class VsphereInspector(virt_inspector.Inspector): def __init__(self): super(VsphereInspector, self).__init__() self._ops = vsphere_operations.VsphereOperations( get_api_session(), 1000) def inspect_cpu_util(self, instance, duration=None): vm_moid = self._ops.get_vm_moid(instance.id) if vm_moid is None: raise virt_inspector.InstanceNotFoundException( _('VM %s not found in VMware Vsphere') % instance.id) cpu_util_counter_id = self._ops.get_perf_counter_id( VC_AVERAGE_CPU_CONSUMED_CNTR) cpu_util = self._ops.query_vm_aggregate_stats( vm_moid, cpu_util_counter_id, duration) # For this counter vSphere returns values scaled-up by 100, since the # corresponding API can't return decimals, but only longs. # For e.g. if the utilization is 12.34%, the value returned is 1234. # Hence, dividing by 100. cpu_util = cpu_util / 100 return virt_inspector.CPUUtilStats(util=cpu_util) def inspect_vnic_rates(self, instance, duration=None): vm_moid = self._ops.get_vm_moid(instance.id) if not vm_moid: raise virt_inspector.InstanceNotFoundException( _('VM %s not found in VMware Vsphere') % instance.id) vnic_stats = {} vnic_ids = set() for net_counter in (VC_NETWORK_RX_COUNTER, VC_NETWORK_TX_COUNTER): net_counter_id = self._ops.get_perf_counter_id(net_counter) vnic_id_to_stats_map = self._ops.query_vm_device_stats( vm_moid, net_counter_id, duration) vnic_stats[net_counter] = vnic_id_to_stats_map vnic_ids.update(vnic_id_to_stats_map.iterkeys()) # Stats provided from vSphere are in KB/s, converting it to B/s. for vnic_id in vnic_ids: rx_bytes_rate = (vnic_stats[VC_NETWORK_RX_COUNTER] .get(vnic_id, 0) * units.Ki) tx_bytes_rate = (vnic_stats[VC_NETWORK_TX_COUNTER] .get(vnic_id, 0) * units.Ki) stats = virt_inspector.InterfaceRateStats(rx_bytes_rate, tx_bytes_rate) interface = virt_inspector.Interface( name=vnic_id, mac=None, fref=None, parameters=None) yield (interface, stats) def inspect_memory_usage(self, instance, duration=None): vm_moid = self._ops.get_vm_moid(instance.id) if vm_moid is None: raise virt_inspector.InstanceNotFoundException( _('VM %s not found in VMware Vsphere') % instance.id) mem_counter_id = self._ops.get_perf_counter_id( VC_AVERAGE_MEMORY_CONSUMED_CNTR) memory = self._ops.query_vm_aggregate_stats( vm_moid, mem_counter_id, duration) # Stat provided from vSphere is in KB, converting it to MB. memory = memory / units.Ki return virt_inspector.MemoryUsageStats(usage=memory) def inspect_disk_rates(self, instance, duration=None): vm_moid = self._ops.get_vm_moid(instance.id) if not vm_moid: raise virt_inspector.InstanceNotFoundException( _('VM %s not found in VMware Vsphere') % instance.id) disk_stats = {} disk_ids = set() disk_counters = [ VC_DISK_READ_RATE_CNTR, VC_DISK_READ_REQUESTS_RATE_CNTR, VC_DISK_WRITE_RATE_CNTR, VC_DISK_WRITE_REQUESTS_RATE_CNTR ] for disk_counter in disk_counters: disk_counter_id = self._ops.get_perf_counter_id(disk_counter) disk_id_to_stat_map = self._ops.query_vm_device_stats( vm_moid, disk_counter_id, duration) disk_stats[disk_counter] = disk_id_to_stat_map disk_ids.update(disk_id_to_stat_map.iterkeys()) for disk_id in disk_ids: def stat_val(counter_name): return disk_stats[counter_name].get(disk_id, 0) disk = virt_inspector.Disk(device=disk_id) # Stats provided from vSphere are in KB/s, converting it to B/s. disk_rate_info = virt_inspector.DiskRateStats( read_bytes_rate=stat_val(VC_DISK_READ_RATE_CNTR) * units.Ki, read_requests_rate=stat_val(VC_DISK_READ_REQUESTS_RATE_CNTR), write_bytes_rate=stat_val(VC_DISK_WRITE_RATE_CNTR) * units.Ki, write_requests_rate=stat_val(VC_DISK_WRITE_REQUESTS_RATE_CNTR) ) yield(disk, disk_rate_info) ceilometer-2014.1/ceilometer/compute/virt/vmware/__init__.py0000664000175300017540000000000012323717130025255 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/virt/vmware/vsphere_operations.py0000664000175300017540000002356312323717130027460 0ustar jenkinsjenkins00000000000000# Copyright (c) 2014 VMware, 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. from oslo.vmware import vim_util PERF_MANAGER_TYPE = "PerformanceManager" PERF_COUNTER_PROPERTY = "perfCounter" VM_INSTANCE_ID_PROPERTY = 'config.extraConfig["nvp.vm-uuid"].value' # ESXi Servers sample performance data every 20 seconds. 20-second interval # data is called instance data or real-time data. To retrieve instance data, # we need to specify a value of 20 seconds for the "PerfQuerySpec.intervalId" # property. In that case the "QueryPerf" method operates as a raw data feed # that bypasses the vCenter database and instead retrieves performance data # from an ESXi host. # The following value is time interval for real-time performance stats # in seconds and it is not configurable. VC_REAL_TIME_SAMPLING_INTERVAL = 20 class VsphereOperations(object): """Class to invoke vSphere APIs calls required by various pollsters, collecting data from VMware infrastructure. """ def __init__(self, api_session, max_objects): self._api_session = api_session self._max_objects = max_objects # Mapping between "VM's Nova instance Id" -> "VM's MOID" # In case a VM is deployed by Nova, then its name is instance ID. # So this map essentially has VM names as keys. self._vm_moid_lookup_map = {} # Mapping from full name -> ID, for VC Performance counters self._perf_counter_id_lookup_map = None def _init_vm_moid_lookup_map(self): session = self._api_session result = session.invoke_api(vim_util, "get_objects", session.vim, "VirtualMachine", self._max_objects, [VM_INSTANCE_ID_PROPERTY], False) while result: for vm_object in result.objects: vm_moid = vm_object.obj.value # propSet will be set only if the server provides value if hasattr(vm_object, 'propSet') and vm_object.propSet: vm_instance_id = vm_object.propSet[0].val if vm_instance_id: self._vm_moid_lookup_map[vm_instance_id] = vm_moid result = session.invoke_api(vim_util, "continue_retrieval", session.vim, result) def get_vm_moid(self, vm_instance_id): """Method returns VC MOID of the VM by its NOVA instance ID. """ if vm_instance_id not in self._vm_moid_lookup_map: self._init_vm_moid_lookup_map() return self._vm_moid_lookup_map.get(vm_instance_id, None) def _init_perf_counter_id_lookup_map(self): # Query details of all the performance counters from VC session = self._api_session client_factory = session.vim.client.factory perf_manager = session.vim.service_content.perfManager prop_spec = vim_util.build_property_spec( client_factory, PERF_MANAGER_TYPE, [PERF_COUNTER_PROPERTY]) obj_spec = vim_util.build_object_spec( client_factory, perf_manager, None) filter_spec = vim_util.build_property_filter_spec( client_factory, [prop_spec], [obj_spec]) options = client_factory.create('ns0:RetrieveOptions') options.maxObjects = 1 prop_collector = session.vim.service_content.propertyCollector result = session.invoke_api(session.vim, "RetrievePropertiesEx", prop_collector, specSet=[filter_spec], options=options) perf_counter_infos = result.objects[0].propSet[0].val.PerfCounterInfo # Extract the counter Id for each counter and populate the map self._perf_counter_id_lookup_map = {} for perf_counter_info in perf_counter_infos: counter_group = perf_counter_info.groupInfo.key counter_name = perf_counter_info.nameInfo.key counter_rollup_type = perf_counter_info.rollupType counter_id = perf_counter_info.key counter_full_name = (counter_group + ":" + counter_name + ":" + counter_rollup_type) self._perf_counter_id_lookup_map[counter_full_name] = counter_id def get_perf_counter_id(self, counter_full_name): """Method returns the ID of VC performance counter by its full name. A VC performance counter is uniquely identified by the tuple {'Group Name', 'Counter Name', 'Rollup Type'}. It will have an id - counter ID (changes from one VC to another), which is required to query performance stats from that VC. This method returns the ID for a counter, assuming 'CounterFullName' => 'Group Name:CounterName:RollupType'. """ if not self._perf_counter_id_lookup_map: self._init_perf_counter_id_lookup_map() return self._perf_counter_id_lookup_map[counter_full_name] # TODO(akhils@vmware.com) Move this method to common library # when it gets checked-in def query_vm_property(self, vm_moid, property_name): """Method returns the value of specified property for a VM. :param vm_moid: moid of the VM whose property is to be queried :param property_name: path of the property """ vm_mobj = vim_util.get_moref(vm_moid, "VirtualMachine") session = self._api_session return session.invoke_api(vim_util, "get_object_property", session.vim, vm_mobj, property_name) def query_vm_aggregate_stats(self, vm_moid, counter_id, duration): """Method queries the aggregated real-time stat value for a VM. This method should be used for aggregate counters. :param vm_moid: moid of the VM :param counter_id: id of the perf counter in VC :param duration: in seconds from current time, over which the stat value was applicable :return: the aggregated stats value for the counter """ # For aggregate counters, device_name should be "" stats = self._query_vm_perf_stats(vm_moid, counter_id, "", duration) # Performance manager provides the aggregated stats value # with device name -> None return stats.get(None, 0) def query_vm_device_stats(self, vm_moid, counter_id, duration): """Method queries the real-time stat values for a VM, for all devices. This method should be used for device(non-aggregate) counters. :param vm_moid: moid of the VM :param counter_id: id of the perf counter in VC :param duration: in seconds from current time, over which the stat value was applicable :return: a map containing the stat values keyed by the device ID/name """ # For device counters, device_name should be "*" to get stat values # for all devices. stats = self._query_vm_perf_stats(vm_moid, counter_id, "*", duration) # For some device counters, in addition to the per device value # the Performance manager also returns the aggregated value. # Just to be consistent, deleting the aggregated value if present. stats.pop(None, None) return stats def _query_vm_perf_stats(self, vm_moid, counter_id, device_name, duration): """Method queries the real-time stat values for a VM. :param vm_moid: moid of the VM for which stats are needed :param counter_id: id of the perf counter in VC :param device_name: name of the device for which stats are to be queried. For aggregate counters pass empty string (""). For device counters pass "*", if stats are required over all devices. :param duration: in seconds from current time, over which the stat value was applicable :return: a map containing the stat values keyed by the device ID/name """ session = self._api_session client_factory = session.vim.client.factory # Construct the QuerySpec metric_id = client_factory.create('ns0:PerfMetricId') metric_id.counterId = counter_id metric_id.instance = device_name query_spec = client_factory.create('ns0:PerfQuerySpec') query_spec.entity = vim_util.get_moref(vm_moid, "VirtualMachine") query_spec.metricId = [metric_id] query_spec.intervalId = VC_REAL_TIME_SAMPLING_INTERVAL # We query all samples which are applicable over the specified duration samples_cnt = (duration / VC_REAL_TIME_SAMPLING_INTERVAL if duration else 1) query_spec.maxSample = samples_cnt perf_manager = session.vim.service_content.perfManager perf_stats = session.invoke_api(session.vim, 'QueryPerf', perf_manager, querySpec=[query_spec]) stat_values = {} if perf_stats: entity_metric = perf_stats[0] sample_infos = entity_metric.sampleInfo if len(sample_infos) > 0: for metric_series in entity_metric.value: # Take the average of all samples to improve the accuracy # of the stat value stat_value = float(sum(metric_series.value)) / samples_cnt device_id = metric_series.id.instance stat_values[device_id] = stat_value return stat_values ceilometer-2014.1/ceilometer/compute/plugin.py0000664000175300017540000000352512323717130022546 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Base class for plugins used by the compute agent. """ import abc import six from ceilometer.openstack.common import timeutils from ceilometer import plugin @six.add_metaclass(abc.ABCMeta) class ComputePollster(plugin.PollsterBase): """Base class for plugins that support the polling API on the compute node. """ @abc.abstractmethod def get_samples(self, manager, cache, resources): """Return a sequence of Counter instances from polling the resources. :param manager: The service manager invoking the plugin :param cache: A dictionary for passing data between plugins :param resources: The resources to examine (expected to be instances) """ def _record_poll_time(self): """Method records current time as the poll time. :return: time in seconds since the last poll time was recorded """ current_time = timeutils.utcnow() duration = None if hasattr(self, '_last_poll_time'): duration = timeutils.delta_seconds(self._last_poll_time, current_time) self._last_poll_time = current_time return duration ceilometer-2014.1/ceilometer/compute/util.py0000664000175300017540000000316012323717130022220 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2014 Red Hat, Inc # # Author: Eoghan Glynn # # 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. from oslo.config import cfg OPTS = [ cfg.ListOpt('reserved_metadata_namespace', default=['metering.'], help='List of metadata prefixes reserved for metering use.'), cfg.IntOpt('reserved_metadata_length', default=256, help='Limit on length of reserved metadata values.'), ] cfg.CONF.register_opts(OPTS) def add_reserved_user_metadata(src_metadata, dest_metadata): limit = cfg.CONF.reserved_metadata_length user_metadata = {} for prefix in cfg.CONF.reserved_metadata_namespace: md = dict( (k[len(prefix):].replace('.', '_'), v[:limit] if isinstance(v, basestring) else v) for k, v in src_metadata.items() if (k.startswith(prefix) and k[len(prefix):].replace('.', '_') not in dest_metadata) ) user_metadata.update(md) if user_metadata: dest_metadata['user_metadata'] = user_metadata return dest_metadata ceilometer-2014.1/ceilometer/compute/pollsters/0000775000175300017540000000000012323717426022730 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/pollsters/cpu.py0000664000175300017540000001001112323717130024052 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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. from ceilometer.compute import plugin from ceilometer.compute.pollsters import util from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer import sample LOG = log.getLogger(__name__) class CPUPollster(plugin.ComputePollster): def get_samples(self, manager, cache, resources): for instance in resources: LOG.info(_('checking instance %s'), instance.id) instance_name = util.instance_name(instance) try: cpu_info = manager.inspector.inspect_cpus(instance_name) LOG.info(_("CPUTIME USAGE: %(instance)s %(time)d"), {'instance': instance.__dict__, 'time': cpu_info.time}) cpu_num = {'cpu_number': cpu_info.number} yield util.make_sample_from_instance( instance, name='cpu', type=sample.TYPE_CUMULATIVE, unit='ns', volume=cpu_info.time, additional_metadata=cpu_num, ) except virt_inspector.InstanceNotFoundException as err: # Instance was deleted while getting samples. Ignore it. LOG.debug(_('Exception while getting samples %s'), err) except NotImplementedError: # Selected inspector does not implement this pollster. LOG.debug(_('Obtaining CPU time is not implemented for %s' ), manager.inspector.__class__.__name__) except Exception as err: LOG.error(_('could not get CPU time for %(id)s: %(e)s') % ( {'id': instance.id, 'e': err})) LOG.exception(err) class CPUUtilPollster(plugin.ComputePollster): def get_samples(self, manager, cache, resources): self._inspection_duration = self._record_poll_time() for instance in resources: LOG.debug(_('Checking CPU util for instance %s'), instance.id) try: cpu_info = manager.inspector.inspect_cpu_util( instance, self._inspection_duration) LOG.debug(_("CPU UTIL: %(instance)s %(util)d"), ({'instance': instance.__dict__, 'util': cpu_info.util})) yield util.make_sample_from_instance( instance, name='cpu_util', type=sample.TYPE_GAUGE, unit='%', volume=cpu_info.util, ) except virt_inspector.InstanceNotFoundException as err: # Instance was deleted while getting samples. Ignore it. LOG.debug(_('Exception while getting samples %s'), err) except NotImplementedError: # Selected inspector does not implement this pollster. LOG.debug(_('Obtaining CPU Util is not implemented for %s' ), manager.inspector.__class__.__name__) except Exception as err: LOG.error(_('Could not get CPU Util for %(id)s: %(e)s'), ( {'id': instance.id, 'e': err})) ceilometer-2014.1/ceilometer/compute/pollsters/net.py0000664000175300017540000001557712323717130024077 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 copy from ceilometer.compute import plugin from ceilometer.compute.pollsters import util from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common import timeutils from ceilometer import sample LOG = log.getLogger(__name__) class _Base(plugin.ComputePollster): NET_USAGE_MESSAGE = ' '.join(["NETWORK USAGE:", "%s %s:", "read-bytes=%d", "write-bytes=%d"]) @staticmethod def make_vnic_sample(instance, name, type, unit, volume, vnic_data): metadata = copy.copy(vnic_data) resource_metadata = dict(zip(metadata._fields, metadata)) resource_metadata['instance_id'] = instance.id resource_metadata['instance_type'] = \ instance.flavor['id'] if instance.flavor else None if vnic_data.fref is not None: rid = vnic_data.fref else: instance_name = util.instance_name(instance) rid = "%s-%s-%s" % (instance_name, instance.id, vnic_data.name) return sample.Sample( name=name, type=type, unit=unit, volume=volume, user_id=instance.user_id, project_id=instance.tenant_id, resource_id=rid, timestamp=timeutils.isotime(), resource_metadata=resource_metadata ) CACHE_KEY_VNIC = 'vnics' def _get_vnic_info(self, inspector, instance): instance_name = util.instance_name(instance) return inspector.inspect_vnics(instance_name) def _get_rx_info(self, info): return info.rx_bytes def _get_tx_info(self, info): return info.tx_bytes def _get_vnics_for_instance(self, cache, inspector, instance): instance_name = util.instance_name(instance) i_cache = cache.setdefault(self.CACHE_KEY_VNIC, {}) if instance_name not in i_cache: i_cache[instance_name] = list( self._get_vnic_info(inspector, instance) ) return i_cache[instance_name] def get_samples(self, manager, cache, resources): self._inspection_duration = self._record_poll_time() for instance in resources: instance_name = util.instance_name(instance) LOG.debug(_('checking net info for instance %s'), instance.id) try: vnics = self._get_vnics_for_instance( cache, manager.inspector, instance, ) for vnic, info in vnics: LOG.debug(self.NET_USAGE_MESSAGE, instance_name, vnic.name, self._get_rx_info(info), self._get_tx_info(info)) yield self._get_sample(instance, vnic, info) except virt_inspector.InstanceNotFoundException as err: # Instance was deleted while getting samples. Ignore it. LOG.debug(_('Exception while getting samples %s'), err) except NotImplementedError: # Selected inspector does not implement this pollster. LOG.debug(_('%(inspector)s does not provide data for ' ' %(pollster)s'), ({ 'inspector': manager.inspector.__class__.__name__, 'pollster': self.__class__.__name__})) except Exception as err: LOG.warning(_('Ignoring instance %(name)s: %(error)s') % ( {'name': instance_name, 'error': err})) LOG.exception(err) class _RateBase(_Base): NET_USAGE_MESSAGE = ' '.join(["NETWORK RATE:", "%s %s:", "read-bytes-rate=%d", "write-bytes-rate=%d"]) CACHE_KEY_VNIC = 'vnic-rates' def _get_vnic_info(self, inspector, instance): return inspector.inspect_vnic_rates(instance, self._inspection_duration) def _get_rx_info(self, info): return info.rx_bytes_rate def _get_tx_info(self, info): return info.tx_bytes_rate class IncomingBytesPollster(_Base): def _get_sample(self, instance, vnic, info): return self.make_vnic_sample( instance, name='network.incoming.bytes', type=sample.TYPE_CUMULATIVE, unit='B', volume=info.rx_bytes, vnic_data=vnic, ) class IncomingPacketsPollster(_Base): def _get_sample(self, instance, vnic, info): return self.make_vnic_sample( instance, name='network.incoming.packets', type=sample.TYPE_CUMULATIVE, unit='packet', volume=info.rx_packets, vnic_data=vnic, ) class OutgoingBytesPollster(_Base): def _get_sample(self, instance, vnic, info): return self.make_vnic_sample( instance, name='network.outgoing.bytes', type=sample.TYPE_CUMULATIVE, unit='B', volume=info.tx_bytes, vnic_data=vnic, ) class OutgoingPacketsPollster(_Base): def _get_sample(self, instance, vnic, info): return self.make_vnic_sample( instance, name='network.outgoing.packets', type=sample.TYPE_CUMULATIVE, unit='packet', volume=info.tx_packets, vnic_data=vnic, ) class IncomingBytesRatePollster(_RateBase): def _get_sample(self, instance, vnic, info): return self.make_vnic_sample( instance, name='network.incoming.bytes.rate', type=sample.TYPE_GAUGE, unit='B/s', volume=info.rx_bytes_rate, vnic_data=vnic, ) class OutgoingBytesRatePollster(_RateBase): def _get_sample(self, instance, vnic, info): return self.make_vnic_sample( instance, name='network.outgoing.bytes.rate', type=sample.TYPE_GAUGE, unit='B/s', volume=info.tx_bytes_rate, vnic_data=vnic, ) ceilometer-2014.1/ceilometer/compute/pollsters/__init__.py0000664000175300017540000000000012323717130025017 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/compute/pollsters/util.py0000664000175300017540000000600512323717132024252 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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. from ceilometer.compute import util as compute_util from ceilometer.openstack.common import timeutils from ceilometer import sample INSTANCE_PROPERTIES = [ # Identity properties 'reservation_id', # Type properties 'architecture', 'OS-EXT-AZ:availability_zone', 'kernel_id', 'os_type', 'ramdisk_id', ] def _get_metadata_from_object(instance): """Return a metadata dictionary for the instance. """ metadata = { 'display_name': instance.name, 'name': getattr(instance, 'OS-EXT-SRV-ATTR:instance_name', u''), 'instance_type': (instance.flavor['id'] if instance.flavor else None), 'host': instance.hostId, 'flavor': instance.flavor, # Image properties 'image': instance.image, 'image_ref': (instance.image['id'] if instance.image else None), } # Images that come through the conductor API in the nova notifier # plugin will not have links. if instance.image and instance.image.get('links'): metadata['image_ref_url'] = instance.image['links'][0]['href'] else: metadata['image_ref_url'] = None for name in INSTANCE_PROPERTIES: if hasattr(instance, name): metadata[name] = getattr(instance, name) metadata['vcpus'] = instance.flavor['vcpus'] metadata['memory_mb'] = instance.flavor['ram'] metadata['disk_gb'] = instance.flavor['disk'] metadata['ephemeral_gb'] = instance.flavor['ephemeral'] metadata['root_gb'] = int(metadata['disk_gb']) - \ int(metadata['ephemeral_gb']) return compute_util.add_reserved_user_metadata(instance.metadata, metadata) def make_sample_from_instance(instance, name, type, unit, volume, additional_metadata={}): resource_metadata = _get_metadata_from_object(instance) resource_metadata.update(additional_metadata) return sample.Sample( name=name, type=type, unit=unit, volume=volume, user_id=instance.user_id, project_id=instance.tenant_id, resource_id=instance.id, timestamp=timeutils.isotime(), resource_metadata=resource_metadata, ) def instance_name(instance): """Shortcut to get instance name.""" return getattr(instance, 'OS-EXT-SRV-ATTR:instance_name', None) ceilometer-2014.1/ceilometer/compute/pollsters/disk.py0000664000175300017540000002160312323717130024226 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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 abc import collections import six from ceilometer.compute import plugin from ceilometer.compute.pollsters import util from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer import sample LOG = log.getLogger(__name__) DiskIOData = collections.namedtuple( 'DiskIOData', 'r_bytes r_requests w_bytes w_requests', ) @six.add_metaclass(abc.ABCMeta) class _Base(plugin.ComputePollster): DISKIO_USAGE_MESSAGE = ' '.join(["DISKIO USAGE:", "%s %s:", "read-requests=%d", "read-bytes=%d", "write-requests=%d", "write-bytes=%d", "errors=%d", ]) CACHE_KEY_DISK = 'diskio' def _populate_cache(self, inspector, cache, instance, instance_name): i_cache = cache.setdefault(self.CACHE_KEY_DISK, {}) if instance_name not in i_cache: r_bytes = 0 r_requests = 0 w_bytes = 0 w_requests = 0 for disk, info in inspector.inspect_disks(instance_name): LOG.info(self.DISKIO_USAGE_MESSAGE, instance, disk.device, info.read_requests, info.read_bytes, info.write_requests, info.write_bytes, info.errors) r_bytes += info.read_bytes r_requests += info.read_requests w_bytes += info.write_bytes w_requests += info.write_requests i_cache[instance_name] = DiskIOData( r_bytes=r_bytes, r_requests=r_requests, w_bytes=w_bytes, w_requests=w_requests, ) return i_cache[instance_name] @abc.abstractmethod def _get_sample(instance, c_data): """Return one Sample.""" def get_samples(self, manager, cache, resources): for instance in resources: instance_name = util.instance_name(instance) try: c_data = self._populate_cache( manager.inspector, cache, instance, instance_name, ) yield self._get_sample(instance, c_data) except virt_inspector.InstanceNotFoundException as err: # Instance was deleted while getting samples. Ignore it. LOG.debug(_('Exception while getting samples %s'), err) except NotImplementedError: # Selected inspector does not implement this pollster. LOG.debug(_('%(inspector)s does not provide data for ' ' %(pollster)s'), ({ 'inspector': manager.inspector.__class__.__name__, 'pollster': self.__class__.__name__})) except Exception as err: LOG.warning(_('Ignoring instance %(name)s: %(error)s') % ( {'name': instance_name, 'error': err})) LOG.exception(err) class ReadRequestsPollster(_Base): @staticmethod def _get_sample(instance, c_data): return util.make_sample_from_instance( instance, name='disk.read.requests', type=sample.TYPE_CUMULATIVE, unit='request', volume=c_data.r_requests, ) class ReadBytesPollster(_Base): @staticmethod def _get_sample(instance, c_data): return util.make_sample_from_instance( instance, name='disk.read.bytes', type=sample.TYPE_CUMULATIVE, unit='B', volume=c_data.r_bytes, ) class WriteRequestsPollster(_Base): @staticmethod def _get_sample(instance, c_data): return util.make_sample_from_instance( instance, name='disk.write.requests', type=sample.TYPE_CUMULATIVE, unit='request', volume=c_data.w_requests, ) class WriteBytesPollster(_Base): @staticmethod def _get_sample(instance, c_data): return util.make_sample_from_instance( instance, name='disk.write.bytes', type=sample.TYPE_CUMULATIVE, unit='B', volume=c_data.w_bytes, ) @six.add_metaclass(abc.ABCMeta) class _DiskRatesPollsterBase(plugin.ComputePollster): CACHE_KEY_DISK_RATE = 'diskio-rate' def _populate_cache(self, inspector, cache, instance): i_cache = cache.setdefault(self.CACHE_KEY_DISK_RATE, {}) if instance.id not in i_cache: r_bytes_rate = 0 r_requests_rate = 0 w_bytes_rate = 0 w_requests_rate = 0 disk_rates = inspector.inspect_disk_rates( instance, self._inspection_duration) for disk, info in disk_rates: r_bytes_rate += info.read_bytes_rate r_requests_rate += info.read_requests_rate w_bytes_rate += info.write_bytes_rate w_requests_rate += info.write_requests_rate i_cache[instance.id] = virt_inspector.DiskRateStats( r_bytes_rate, r_requests_rate, w_bytes_rate, w_requests_rate ) return i_cache[instance.id] @abc.abstractmethod def _get_sample(self, instance, disk_rates_info): """Return one Sample.""" def get_samples(self, manager, cache, resources): self._inspection_duration = self._record_poll_time() for instance in resources: try: disk_rates_info = self._populate_cache( manager.inspector, cache, instance, ) yield self._get_sample(instance, disk_rates_info) except virt_inspector.InstanceNotFoundException as err: # Instance was deleted while getting samples. Ignore it. LOG.debug(_('Exception while getting samples %s'), err) except NotImplementedError: # Selected inspector does not implement this pollster. LOG.debug(_('%(inspector)s does not provide data for ' ' %(pollster)s'), ({ 'inspector': manager.inspector.__class__.__name__, 'pollster': self.__class__.__name__})) except Exception as err: instance_name = util.instance_name(instance) LOG.error(_('Ignoring instance %(name)s: %(error)s') % ( {'name': instance_name, 'error': err})) class ReadBytesRatePollster(_DiskRatesPollsterBase): def _get_sample(self, instance, disk_rates_info): return util.make_sample_from_instance( instance, name='disk.read.bytes.rate', type=sample.TYPE_GAUGE, unit='B/s', volume=disk_rates_info.read_bytes_rate, ) class ReadRequestsRatePollster(_DiskRatesPollsterBase): def _get_sample(self, instance, disk_rates_info): return util.make_sample_from_instance( instance, name='disk.read.requests.rate', type=sample.TYPE_GAUGE, unit='requests/s', volume=disk_rates_info.read_requests_rate, ) class WriteBytesRatePollster(_DiskRatesPollsterBase): def _get_sample(self, instance, disk_rates_info): return util.make_sample_from_instance( instance, name='disk.write.bytes.rate', type=sample.TYPE_GAUGE, unit='B/s', volume=disk_rates_info.write_bytes_rate, ) class WriteRequestsRatePollster(_DiskRatesPollsterBase): def _get_sample(self, instance, disk_rates_info): return util.make_sample_from_instance( instance, name='disk.write.requests.rate', type=sample.TYPE_GAUGE, unit='requests/s', volume=disk_rates_info.write_requests_rate, ) ceilometer-2014.1/ceilometer/compute/pollsters/instance.py0000664000175300017540000000327312323717130025103 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 eNovance # Copyright © 2012 Red Hat, Inc # # Author: Julien Danjou # Author: Eoghan Glynn # # 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. from ceilometer.compute import plugin from ceilometer.compute.pollsters import util from ceilometer import sample class InstancePollster(plugin.ComputePollster): @staticmethod def get_samples(manager, cache, resources): for instance in resources: yield util.make_sample_from_instance( instance, name='instance', type=sample.TYPE_GAUGE, unit='instance', volume=1, ) class InstanceFlavorPollster(plugin.ComputePollster): @staticmethod def get_samples(manager, cache, resources): for instance in resources: yield util.make_sample_from_instance( instance, # Use the "meter name + variable" syntax name='instance:%s' % instance.flavor['name'], type=sample.TYPE_GAUGE, unit='instance', volume=1, ) ceilometer-2014.1/ceilometer/compute/pollsters/memory.py0000664000175300017540000000464712323717130024615 0ustar jenkinsjenkins00000000000000# Copyright (c) 2014 VMware, 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. from ceilometer.compute import plugin from ceilometer.compute.pollsters import util from ceilometer.compute.virt import inspector as virt_inspector from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer import sample LOG = log.getLogger(__name__) class MemoryUsagePollster(plugin.ComputePollster): def get_samples(self, manager, cache, resources): self._inspection_duration = self._record_poll_time() for instance in resources: LOG.debug(_('Checking memory usage for instance %s'), instance.id) try: memory_info = manager.inspector.inspect_memory_usage( instance, self._inspection_duration) LOG.debug(_("MEMORY USAGE: %(instance)s %(usage)f"), ({'instance': instance.__dict__, 'usage': memory_info.usage})) yield util.make_sample_from_instance( instance, name='memory.usage', type=sample.TYPE_GAUGE, unit='MB', volume=memory_info.usage, ) except virt_inspector.InstanceNotFoundException as err: # Instance was deleted while getting samples. Ignore it. LOG.debug(_('Exception while getting samples %s'), err) except NotImplementedError: # Selected inspector does not implement this pollster. LOG.debug(_('Obtaining Memory Usage is not implemented for %s' ), manager.inspector.__class__.__name__) except Exception as err: LOG.error(_('Could not get Memory Usage for %(id)s: %(e)s'), ( {'id': instance.id, 'e': err})) ceilometer-2014.1/ceilometer/api/0000775000175300017540000000000012323717426017776 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/middleware.py0000664000175300017540000001254312323717132022464 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright 2013 IBM Corp. # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Middleware to replace the plain text message body of an error response with one formatted so the client can parse it. Based on pecan.middleware.errordocument """ import json from lxml import etree import webob from ceilometer.api import hooks from ceilometer.openstack.common import gettextutils from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log LOG = log.getLogger(__name__) class ParsableErrorMiddleware(object): """Replace error body with something the client can parse. """ @staticmethod def best_match_language(accept_language): """Determines best available locale from the Accept-Language header. :returns: the best language match or None if the 'Accept-Language' header was not available in the request. """ if not accept_language: return None all_languages = gettextutils.get_available_languages('ceilometer') return accept_language.best_match(all_languages) def __init__(self, app): self.app = app def __call__(self, environ, start_response): # Request for this state, modified by replace_start_response() # and used when an error is being reported. state = {} def replacement_start_response(status, headers, exc_info=None): """Overrides the default response to make errors parsable. """ try: status_code = int(status.split(' ')[0]) state['status_code'] = status_code except (ValueError, TypeError): # pragma: nocover raise Exception(( 'ErrorDocumentMiddleware received an invalid ' 'status %s' % status )) else: if (state['status_code'] / 100) not in (2, 3): # Remove some headers so we can replace them later # when we have the full error message and can # compute the length. headers = [(h, v) for (h, v) in headers if h not in ('Content-Length', 'Content-Type') ] # Save the headers in case we need to modify them. state['headers'] = headers return start_response(status, headers, exc_info) app_iter = self.app(environ, replacement_start_response) if (state['status_code'] / 100) not in (2, 3): req = webob.Request(environ) # Find the first TranslationHook in the array of hooks and use the # translatable_error object from it error = None for hook in self.app.hooks: if isinstance(hook, hooks.TranslationHook): error = hook.local_error.translatable_error break user_locale = self.best_match_language(req.accept_language) if (req.accept.best_match(['application/json', 'application/xml']) == 'application/xml'): try: # simple check xml is valid fault = etree.fromstring('\n'.join(app_iter)) # Add the translated error to the xml data if error is not None: for fault_string in fault.findall('faultstring'): fault_string.text = ( gettextutils.translate( error, user_locale)) body = ['' + etree.tostring(fault) + ''] except etree.XMLSyntaxError as err: LOG.error(_('Error parsing HTTP response: %s') % err) body = ['%s' % state['status_code'] + ''] state['headers'].append(('Content-Type', 'application/xml')) else: try: fault = json.loads('\n'.join(app_iter)) if error is not None and 'faultstring' in fault: fault['faultstring'] = ( gettextutils.translate( error, user_locale)) body = [json.dumps({'error_message': fault})] except ValueError as err: body = [json.dumps({'error_message': '\n'.join(app_iter)})] state['headers'].append(('Content-Type', 'application/json')) state['headers'].append(('Content-Length', len(body[0]))) else: body = app_iter return body ceilometer-2014.1/ceilometer/api/controllers/0000775000175300017540000000000012323717426022344 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/controllers/root.py0000664000175300017540000000166212323717130023676 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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 pecan from ceilometer.api.controllers import v2 class RootController(object): v2 = v2.V2Controller() @pecan.expose(generic=True, template='index.html') def index(self): # FIXME: Return version information return dict() ceilometer-2014.1/ceilometer/api/controllers/v2.py0000664000175300017540000026262212323717132023251 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # Copyright 2013 IBM Corp. # Copyright © 2013 eNovance # Copyright Ericsson AB 2013. All rights reserved # # Authors: Doug Hellmann # Angus Salkeld # Eoghan Glynn # Julien Danjou # Ildiko Vancsa # Balazs Gibizer # # 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. """Version 2 of the API. """ import ast import base64 import copy import croniter import datetime import functools import inspect import json import jsonschema import pytz import uuid from oslo.config import cfg import pecan from pecan import rest import six import wsme from wsme import types as wtypes import wsmeext.pecan as wsme_pecan from ceilometer.api import acl from ceilometer.openstack.common import context from ceilometer.openstack.common.gettextutils import _ # noqa from ceilometer.openstack.common import log from ceilometer.openstack.common.notifier import api as notify from ceilometer.openstack.common import strutils from ceilometer.openstack.common import timeutils from ceilometer import sample from ceilometer import storage from ceilometer import utils LOG = log.getLogger(__name__) ALARM_API_OPTS = [ cfg.BoolOpt('record_history', default=True, help='Record alarm change events.' ), ] cfg.CONF.register_opts(ALARM_API_OPTS, group='alarm') state_kind = ["ok", "alarm", "insufficient data"] state_kind_enum = wtypes.Enum(str, *state_kind) operation_kind = wtypes.Enum(str, 'lt', 'le', 'eq', 'ne', 'ge', 'gt') class ClientSideError(wsme.exc.ClientSideError): def __init__(self, error, status_code=400): pecan.response.translatable_error = error super(ClientSideError, self).__init__(error, status_code) class EntityNotFound(ClientSideError): def __init__(self, entity, id): super(EntityNotFound, self).__init__( _("%(entity)s %(id)s Not Found") % {'entity': entity, 'id': id}, status_code=404) class AdvEnum(wtypes.wsproperty): """Handle default and mandatory for wtypes.Enum """ def __init__(self, name, *args, **kwargs): self._name = '_advenum_%s' % name self._default = kwargs.pop('default', None) mandatory = kwargs.pop('mandatory', False) enum = wtypes.Enum(*args, **kwargs) super(AdvEnum, self).__init__(datatype=enum, fget=self._get, fset=self._set, mandatory=mandatory) def _get(self, parent): if hasattr(parent, self._name): value = getattr(parent, self._name) return value or self._default return self._default def _set(self, parent, value): if self.datatype.validate(value): setattr(parent, self._name, value) class CronType(wtypes.UserType): """A user type that represents a cron format.""" basetype = six.string_types name = 'cron' @staticmethod def validate(value): # raises ValueError if invalid croniter.croniter(value) return value class _Base(wtypes.Base): @classmethod def from_db_model(cls, m): return cls(**(m.as_dict())) @classmethod def from_db_and_links(cls, m, links): return cls(links=links, **(m.as_dict())) def as_dict(self, db_model): valid_keys = inspect.getargspec(db_model.__init__)[0] if 'self' in valid_keys: valid_keys.remove('self') return self.as_dict_from_keys(valid_keys) def as_dict_from_keys(self, keys): return dict((k, getattr(self, k)) for k in keys if hasattr(self, k) and getattr(self, k) != wsme.Unset) class Link(_Base): """A link representation """ href = wtypes.text "The url of a link" rel = wtypes.text "The name of a link" @classmethod def sample(cls): return cls(href=('http://localhost:8777/v2/meters/volume?' 'q.field=resource_id&' 'q.value=bd9431c1-8d69-4ad3-803a-8d4a6b89fd36'), rel='volume' ) class Query(_Base): """Query filter. """ # The data types supported by the query. _supported_types = ['integer', 'float', 'string', 'boolean'] # Functions to convert the data field to the correct type. _type_converters = {'integer': int, 'float': float, 'boolean': functools.partial( strutils.bool_from_string, strict=True), 'string': six.text_type, 'datetime': timeutils.parse_isotime} _op = None # provide a default def get_op(self): return self._op or 'eq' def set_op(self, value): self._op = value field = wtypes.text "The name of the field to test" #op = wsme.wsattr(operation_kind, default='eq') # this ^ doesn't seem to work. op = wsme.wsproperty(operation_kind, get_op, set_op) "The comparison operator. Defaults to 'eq'." value = wtypes.text "The value to compare against the stored data" type = wtypes.text "The data type of value to compare against the stored data" def __repr__(self): # for logging calls return '' % (self.field, self.op, self.value, self.type) @classmethod def sample(cls): return cls(field='resource_id', op='eq', value='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', type='string' ) def as_dict(self): return self.as_dict_from_keys(['field', 'op', 'type', 'value']) def _get_value_as_type(self, forced_type=None): """Convert metadata value to the specified data type. This method is called during metadata query to help convert the querying metadata to the data type specified by user. If there is no data type given, the metadata will be parsed by ast.literal_eval to try to do a smart converting. NOTE (flwang) Using "_" as prefix to avoid an InvocationError raised from wsmeext/sphinxext.py. It's OK to call it outside the Query class. Because the "public" side of that class is actually the outside of the API, and the "private" side is the API implementation. The method is only used in the API implementation, so it's OK. :returns: metadata value converted with the specified data type. """ type = forced_type or self.type try: converted_value = self.value if not type: try: converted_value = ast.literal_eval(self.value) except (ValueError, SyntaxError): msg = _('Failed to convert the metadata value %s' ' automatically') % (self.value) LOG.debug(msg) else: if type not in self._supported_types: # Types must be explicitly declared so the # correct type converter may be used. Subclasses # of Query may define _supported_types and # _type_converters to define their own types. raise TypeError() converted_value = self._type_converters[type](self.value) except ValueError: msg = _('Failed to convert the value %(value)s' ' to the expected data type %(type)s.') % \ {'value': self.value, 'type': type} raise ClientSideError(msg) except TypeError: msg = _('The data type %(type)s is not supported. The supported' ' data type list is: %(supported)s') % \ {'type': type, 'supported': self._supported_types} raise ClientSideError(msg) except Exception: msg = _('Unexpected exception converting %(value)s to' ' the expected data type %(type)s.') % \ {'value': self.value, 'type': type} raise ClientSideError(msg) return converted_value class ProjectNotAuthorized(ClientSideError): def __init__(self, id, aspect='project'): params = dict(aspect=aspect, id=id) super(ProjectNotAuthorized, self).__init__( _("Not Authorized to access %(aspect)s %(id)s") % params, status_code=401) def _get_auth_project(on_behalf_of=None): # when an alarm is created by an admin on behalf of another tenant # we must ensure for: # - threshold alarm, that an implicit query constraint on project_id is # added so that admin-level visibility on statistics is not leaked # - combination alarm, that alarm ids verification is scoped to # alarms owned by the alarm project. # hence for null auth_project (indicating admin-ness) we check if # the creating tenant differs from the tenant on whose behalf the # alarm is being created auth_project = acl.get_limited_to_project(pecan.request.headers) created_by = pecan.request.headers.get('X-Project-Id') is_admin = auth_project is None if is_admin and on_behalf_of != created_by: auth_project = on_behalf_of return auth_project def _sanitize_query(query, db_func, on_behalf_of=None): '''Check the query to see if: 1) the request is coming from admin - then allow full visibility 2) non-admin - make sure that the query includes the requester's project. ''' q = copy.copy(query) auth_project = _get_auth_project(on_behalf_of) if auth_project: _verify_query_segregation(q, auth_project) proj_q = [i for i in q if i.field == 'project_id'] valid_keys = inspect.getargspec(db_func)[0] if not proj_q and 'on_behalf_of' not in valid_keys: # The user is restricted, but they didn't specify a project # so add it for them. q.append(Query(field='project_id', op='eq', value=auth_project)) return q def _verify_query_segregation(query, auth_project=None): '''Ensure non-admin queries are not constrained to another project.''' auth_project = (auth_project or acl.get_limited_to_project(pecan.request.headers)) if auth_project: for q in query: if q.field == 'project_id' and (auth_project != q.value or q.op != 'eq'): raise ProjectNotAuthorized(q.value) def _validate_query(query, db_func, internal_keys=[], allow_timestamps=True): """Validates the syntax of the query and verifies that the query request is authorized for the included project. :param query: Query expression that should be validated :param db_func: the function on the storage level, of which arguments will form the valid_keys list, which defines the valid fields for a query expression :param internal_keys: internally used field names, that should not be used for querying :param allow_timestamps: defines whether the timestamp-based constraint is applicable for this query or not :returns: None, if the query is valid :raises InvalidInput: if an operator is not supported for a given field :raises InvalidInput: if timestamp constraints are allowed, but search_offset was included without timestamp constraint :raises: UnknownArgument: if a field name is not a timestamp field, nor in the list of valid keys """ _verify_query_segregation(query) valid_keys = inspect.getargspec(db_func)[0] internal_keys.append('self') valid_keys = set(valid_keys) - set(internal_keys) translation = {'user_id': 'user', 'project_id': 'project', 'resource_id': 'resource'} has_timestamp_query = _validate_timestamp_fields(query, 'timestamp', ('lt', 'le', 'gt', 'ge'), allow_timestamps) has_search_offset_query = _validate_timestamp_fields(query, 'search_offset', ('eq'), allow_timestamps) if has_search_offset_query and not has_timestamp_query: raise wsme.exc.InvalidInput('field', 'search_offset', "search_offset cannot be used without " + "timestamp") def _is_field_metadata(field): return (field.startswith('metadata.') or field.startswith('resource_metadata.')) for i in query: if i.field not in ('timestamp', 'search_offset'): key = translation.get(i.field, i.field) operator = i.op if (key in valid_keys or _is_field_metadata(i.field)): if operator == 'eq': if key == 'enabled': i._get_value_as_type('boolean') elif _is_field_metadata(key): i._get_value_as_type() else: raise wsme.exc.InvalidInput('op', i.op, 'unimplemented operator for ' '%s' % i.field) else: msg = ("unrecognized field in query: %s, " "valid keys: %s") % (query, valid_keys) raise wsme.exc.UnknownArgument(key, msg) def _validate_timestamp_fields(query, field_name, operator_list, allow_timestamps): """Validates the timestamp related constraints in a query expression, if there are any. :param query: query expression that may contain the timestamp fields :param field_name: timestamp name, which should be checked (timestamp, search_offset) :param operator_list: list of operators that are supported for that timestamp, which was specified in the parameter field_name :param allow_timestamps: defines whether the timestamp-based constraint is applicable to this query or not :returns: True, if there was a timestamp constraint, containing a timestamp field named as defined in field_name, in the query and it was allowed and syntactically correct. :returns: False, if there wasn't timestamp constraint, containing a timestamp field named as defined in field_name, in the query :raises InvalidInput: if an operator is unsupported for a given timestamp field :raises UnknownArgument: if the timestamp constraint is not allowed in the query """ for item in query: if item.field == field_name: #If *timestamp* or *search_offset* field was specified in the #query, but timestamp is not supported on that resource, on #which the query was invoked, then raise an exception. if not allow_timestamps: raise wsme.exc.UnknownArgument(field_name, "not valid for " + "this resource") if item.op not in operator_list: raise wsme.exc.InvalidInput('op', item.op, 'unimplemented operator for %s' % item.field) return True return False def _query_to_kwargs(query, db_func, internal_keys=[], allow_timestamps=True): _validate_query(query, db_func, internal_keys=internal_keys, allow_timestamps=allow_timestamps) query = _sanitize_query(query, db_func) internal_keys.append('self') valid_keys = set(inspect.getargspec(db_func)[0]) - set(internal_keys) translation = {'user_id': 'user', 'project_id': 'project', 'resource_id': 'resource'} stamp = {} metaquery = {} kwargs = {} for i in query: if i.field == 'timestamp': if i.op in ('lt', 'le'): stamp['end_timestamp'] = i.value stamp['end_timestamp_op'] = i.op elif i.op in ('gt', 'ge'): stamp['start_timestamp'] = i.value stamp['start_timestamp_op'] = i.op else: if i.op == 'eq': if i.field == 'search_offset': stamp['search_offset'] = i.value elif i.field == 'enabled': kwargs[i.field] = i._get_value_as_type('boolean') elif i.field.startswith('metadata.'): metaquery[i.field] = i._get_value_as_type() elif i.field.startswith('resource_metadata.'): metaquery[i.field[9:]] = i._get_value_as_type() else: key = translation.get(i.field, i.field) kwargs[key] = i.value if metaquery and 'metaquery' in valid_keys: kwargs['metaquery'] = metaquery if stamp: q_ts = _get_query_timestamps(stamp) if 'start' in valid_keys: kwargs['start'] = q_ts['query_start'] kwargs['end'] = q_ts['query_end'] elif 'start_timestamp' in valid_keys: kwargs['start_timestamp'] = q_ts['query_start'] kwargs['end_timestamp'] = q_ts['query_end'] if 'start_timestamp_op' in stamp: kwargs['start_timestamp_op'] = stamp['start_timestamp_op'] if 'end_timestamp_op' in stamp: kwargs['end_timestamp_op'] = stamp['end_timestamp_op'] return kwargs def _validate_groupby_fields(groupby_fields): """Checks that the list of groupby fields from request is valid and if all fields are valid, returns fields with duplicates removed """ # NOTE(terriyu): Currently, metadata fields are not supported in our # group by statistics implementation valid_fields = set(['user_id', 'resource_id', 'project_id', 'source']) invalid_fields = set(groupby_fields) - valid_fields if invalid_fields: raise wsme.exc.UnknownArgument(invalid_fields, "Invalid groupby fields") # Remove duplicate fields # NOTE(terriyu): This assumes that we don't care about the order of the # group by fields. return list(set(groupby_fields)) def _get_query_timestamps(args={}): """Return any optional timestamp information in the request. Determine the desired range, if any, from the GET arguments. Set up the query range using the specified offset. [query_start ... start_timestamp ... end_timestamp ... query_end] Returns a dictionary containing: query_start: First timestamp to use for query start_timestamp: start_timestamp parameter from request query_end: Final timestamp to use for query end_timestamp: end_timestamp parameter from request search_offset: search_offset parameter from request """ search_offset = int(args.get('search_offset', 0)) start_timestamp = args.get('start_timestamp') if start_timestamp: start_timestamp = timeutils.parse_isotime(start_timestamp) start_timestamp = start_timestamp.replace(tzinfo=None) query_start = (start_timestamp - datetime.timedelta(minutes=search_offset)) else: query_start = None end_timestamp = args.get('end_timestamp') if end_timestamp: end_timestamp = timeutils.parse_isotime(end_timestamp) end_timestamp = end_timestamp.replace(tzinfo=None) query_end = end_timestamp + datetime.timedelta(minutes=search_offset) else: query_end = None return {'query_start': query_start, 'query_end': query_end, 'start_timestamp': start_timestamp, 'end_timestamp': end_timestamp, 'search_offset': search_offset, } def _flatten_metadata(metadata): """Return flattened resource metadata with flattened nested structures (except nested sets) and with all values converted to unicode strings. """ if metadata: # After changing recursive_keypairs` output we need to keep # flattening output unchanged. # Example: recursive_keypairs({'a': {'b':{'c':'d'}}}, '.') # output before: a.b:c=d # output now: a.b.c=d # So to keep the first variant just replace all dots except the first return dict((k.replace('.', ':').replace(':', '.', 1), unicode(v)) for k, v in utils.recursive_keypairs(metadata, separator='.') if type(v) is not set) return {} def _make_link(rel_name, url, type, type_arg, query=None): query_str = '' if query: query_str = '?q.field=%s&q.value=%s' % (query['field'], query['value']) return Link(href=('%s/v2/%s/%s%s') % (url, type, type_arg, query_str), rel=rel_name) def _send_notification(event, payload): notification = event.replace(" ", "_") notification = "alarm.%s" % notification notify.notify(None, notify.publisher_id("ceilometer.api"), notification, notify.INFO, payload) class OldSample(_Base): """A single measurement for a given meter and resource. This class is deprecated in favor of Sample. """ source = wtypes.text "The ID of the source that identifies where the sample comes from" counter_name = wsme.wsattr(wtypes.text, mandatory=True) "The name of the meter" # FIXME(dhellmann): Make this meter_name? counter_type = wsme.wsattr(wtypes.text, mandatory=True) "The type of the meter (see :ref:`measurements`)" # FIXME(dhellmann): Make this meter_type? counter_unit = wsme.wsattr(wtypes.text, mandatory=True) "The unit of measure for the value in counter_volume" # FIXME(dhellmann): Make this meter_unit? counter_volume = wsme.wsattr(float, mandatory=True) "The actual measured value" user_id = wtypes.text "The ID of the user who last triggered an update to the resource" project_id = wtypes.text "The ID of the project or tenant that owns the resource" resource_id = wsme.wsattr(wtypes.text, mandatory=True) "The ID of the :class:`Resource` for which the measurements are taken" timestamp = datetime.datetime "UTC date and time when the measurement was made" recorded_at = datetime.datetime "When the sample has been recorded." resource_metadata = {wtypes.text: wtypes.text} "Arbitrary metadata associated with the resource" message_id = wtypes.text "A unique identifier for the sample" def __init__(self, counter_volume=None, resource_metadata={}, timestamp=None, **kwds): if counter_volume is not None: counter_volume = float(counter_volume) resource_metadata = _flatten_metadata(resource_metadata) # this is to make it easier for clients to pass a timestamp in if timestamp and isinstance(timestamp, basestring): timestamp = timeutils.parse_isotime(timestamp) super(OldSample, self).__init__(counter_volume=counter_volume, resource_metadata=resource_metadata, timestamp=timestamp, **kwds) if self.resource_metadata in (wtypes.Unset, None): self.resource_metadata = {} @classmethod def sample(cls): return cls(source='openstack', counter_name='instance', counter_type='gauge', counter_unit='instance', counter_volume=1, resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', recorded_at=datetime.datetime.utcnow(), timestamp=datetime.datetime.utcnow(), resource_metadata={'name1': 'value1', 'name2': 'value2'}, message_id='5460acce-4fd6-480d-ab18-9735ec7b1996', ) class Statistics(_Base): """Computed statistics for a query. """ groupby = {wtypes.text: wtypes.text} "Dictionary of field names for group, if groupby statistics are requested" unit = wtypes.text "The unit type of the data set" min = float "The minimum volume seen in the data" max = float "The maximum volume seen in the data" avg = float "The average of all of the volume values seen in the data" sum = float "The total of all of the volume values seen in the data" count = int "The number of samples seen" aggregate = {wtypes.text: float} "The selectable aggregate value(s)" duration = float "The difference, in seconds, between the oldest and newest timestamp" duration_start = datetime.datetime "UTC date and time of the earliest timestamp, or the query start time" duration_end = datetime.datetime "UTC date and time of the oldest timestamp, or the query end time" period = int "The difference, in seconds, between the period start and end" period_start = datetime.datetime "UTC date and time of the period start" period_end = datetime.datetime "UTC date and time of the period end" def __init__(self, start_timestamp=None, end_timestamp=None, **kwds): super(Statistics, self).__init__(**kwds) self._update_duration(start_timestamp, end_timestamp) def _update_duration(self, start_timestamp, end_timestamp): # "Clamp" the timestamps we return to the original time # range, excluding the offset. if (start_timestamp and self.duration_start and self.duration_start < start_timestamp): self.duration_start = start_timestamp LOG.debug(_('clamping min timestamp to range')) if (end_timestamp and self.duration_end and self.duration_end > end_timestamp): self.duration_end = end_timestamp LOG.debug(_('clamping max timestamp to range')) # If we got valid timestamps back, compute a duration in seconds. # # If the min > max after clamping then we know the # timestamps on the samples fell outside of the time # range we care about for the query, so treat them as # "invalid." # # If the timestamps are invalid, return None as a # sentinel indicating that there is something "funny" # about the range. if (self.duration_start and self.duration_end and self.duration_start <= self.duration_end): self.duration = timeutils.delta_seconds(self.duration_start, self.duration_end) else: self.duration_start = self.duration_end = self.duration = None @classmethod def sample(cls): return cls(unit='GiB', min=1, max=9, avg=4.5, sum=45, count=10, duration_start=datetime.datetime(2013, 1, 4, 16, 42), duration_end=datetime.datetime(2013, 1, 4, 16, 47), period=7200, period_start=datetime.datetime(2013, 1, 4, 16, 00), period_end=datetime.datetime(2013, 1, 4, 18, 00), ) class Aggregate(_Base): func = wsme.wsattr(wtypes.text, mandatory=True) "The aggregation function name" param = wsme.wsattr(wtypes.text, default=None) "The paramter to the aggregation function" def __init__(self, **kwargs): super(Aggregate, self).__init__(**kwargs) @staticmethod def validate(aggregate): return aggregate @classmethod def sample(cls): return cls(func='cardinality', param='resource_id') class MeterController(rest.RestController): """Manages operations on a single meter. """ _custom_actions = { 'statistics': ['GET'], } def __init__(self, meter_name): pecan.request.context['meter_name'] = meter_name self.meter_name = meter_name @wsme_pecan.wsexpose([OldSample], [Query], int) def get_all(self, q=[], limit=None): """Return samples for the meter. :param q: Filter rules for the data to be returned. :param limit: Maximum number of samples to return. """ if limit and limit < 0: raise ClientSideError(_("Limit must be positive")) kwargs = _query_to_kwargs(q, storage.SampleFilter.__init__) kwargs['meter'] = self.meter_name f = storage.SampleFilter(**kwargs) return [OldSample.from_db_model(e) for e in pecan.request.storage_conn.get_samples(f, limit=limit) ] @wsme_pecan.wsexpose([OldSample], body=[OldSample]) def post(self, samples): """Post a list of new Samples to Telemetry. :param samples: a list of samples within the request body. """ now = timeutils.utcnow() auth_project = acl.get_limited_to_project(pecan.request.headers) def_source = pecan.request.cfg.sample_source def_project_id = pecan.request.headers.get('X-Project-Id') def_user_id = pecan.request.headers.get('X-User-Id') published_samples = [] for s in samples: if self.meter_name != s.counter_name: raise wsme.exc.InvalidInput('counter_name', s.counter_name, 'should be %s' % self.meter_name) if s.message_id: raise wsme.exc.InvalidInput('message_id', s.message_id, 'The message_id must not be set') if s.counter_type not in sample.TYPES: raise wsme.exc.InvalidInput('counter_type', s.counter_type, 'The counter type must be: ' + ', '.join(sample.TYPES)) s.user_id = (s.user_id or def_user_id) s.project_id = (s.project_id or def_project_id) s.source = '%s:%s' % (s.project_id, (s.source or def_source)) s.timestamp = (s.timestamp or now) if auth_project and auth_project != s.project_id: # non admin user trying to cross post to another project_id auth_msg = 'can not post samples to other projects' raise wsme.exc.InvalidInput('project_id', s.project_id, auth_msg) published_sample = sample.Sample( name=s.counter_name, type=s.counter_type, unit=s.counter_unit, volume=s.counter_volume, user_id=s.user_id, project_id=s.project_id, resource_id=s.resource_id, timestamp=s.timestamp.isoformat(), resource_metadata=utils.restore_nesting(s.resource_metadata, separator='.'), source=s.source) published_samples.append(published_sample) s.message_id = published_sample.id with pecan.request.pipeline_manager.publisher( context.get_admin_context()) as publisher: publisher(published_samples) return samples @wsme_pecan.wsexpose([Statistics], [Query], [unicode], int, [Aggregate]) def statistics(self, q=[], groupby=[], period=None, aggregate=[]): """Computes the statistics of the samples in the time range given. :param q: Filter rules for the data to be returned. :param groupby: Fields for group by aggregation :param period: Returned result will be an array of statistics for a period long of that number of seconds. :param aggregate: The selectable aggregation functions to be applied. """ if period and period < 0: raise ClientSideError(_("Period must be positive.")) kwargs = _query_to_kwargs(q, storage.SampleFilter.__init__) kwargs['meter'] = self.meter_name f = storage.SampleFilter(**kwargs) g = _validate_groupby_fields(groupby) aggregate = utils.uniq(aggregate, ['func', 'param']) computed = pecan.request.storage_conn.get_meter_statistics(f, period, g, aggregate) LOG.debug(_('computed value coming from %r'), pecan.request.storage_conn) # Find the original timestamp in the query to use for clamping # the duration returned in the statistics. start = end = None for i in q: if i.field == 'timestamp' and i.op in ('lt', 'le'): end = timeutils.parse_isotime(i.value).replace(tzinfo=None) elif i.field == 'timestamp' and i.op in ('gt', 'ge'): start = timeutils.parse_isotime(i.value).replace(tzinfo=None) return [Statistics(start_timestamp=start, end_timestamp=end, **c.as_dict()) for c in computed] class Meter(_Base): """One category of measurements. """ name = wtypes.text "The unique name for the meter" type = wtypes.Enum(str, *sample.TYPES) "The meter type (see :ref:`measurements`)" unit = wtypes.text "The unit of measure" resource_id = wtypes.text "The ID of the :class:`Resource` for which the measurements are taken" project_id = wtypes.text "The ID of the project or tenant that owns the resource" user_id = wtypes.text "The ID of the user who last triggered an update to the resource" source = wtypes.text "The ID of the source that identifies where the meter comes from" meter_id = wtypes.text "The unique identifier for the meter" def __init__(self, **kwargs): meter_id = base64.encodestring('%s+%s' % (kwargs['resource_id'], kwargs['name'])) kwargs['meter_id'] = meter_id super(Meter, self).__init__(**kwargs) @classmethod def sample(cls): return cls(name='instance', type='gauge', unit='instance', resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', source='openstack', ) class MetersController(rest.RestController): """Works on meters.""" @pecan.expose() def _lookup(self, meter_name, *remainder): return MeterController(meter_name), remainder @wsme_pecan.wsexpose([Meter], [Query]) def get_all(self, q=[]): """Return all known meters, based on the data recorded so far. :param q: Filter rules for the meters to be returned. """ #Timestamp field is not supported for Meter queries kwargs = _query_to_kwargs(q, pecan.request.storage_conn.get_meters, allow_timestamps=False) return [Meter.from_db_model(m) for m in pecan.request.storage_conn.get_meters(**kwargs)] class Sample(_Base): """One measurement.""" id = wtypes.text "The unique identifier for the sample." meter = wtypes.text "The meter name this sample is for." type = wtypes.Enum(str, *sample.TYPES) "The meter type (see :ref:`measurements`)" unit = wtypes.text "The unit of measure." volume = float "The metered value." user_id = wtypes.text "The user this sample was taken for." project_id = wtypes.text "The project this sample was taken for." resource_id = wtypes.text "The :class:`Resource` this sample was taken for." source = wtypes.text "The source that identifies where the sample comes from." timestamp = datetime.datetime "When the sample has been generated." recorded_at = datetime.datetime "When the sample has been recorded." metadata = {wtypes.text: wtypes.text} "Arbitrary metadata associated with the sample." @classmethod def from_db_model(cls, m): return cls(id=m.message_id, meter=m.counter_name, type=m.counter_type, unit=m.counter_unit, volume=m.counter_volume, user_id=m.user_id, project_id=m.project_id, resource_id=m.resource_id, source=m.source, timestamp=m.timestamp, recorded_at=m.recorded_at, metadata=_flatten_metadata(m.resource_metadata)) @classmethod def sample(cls): return cls(id=str(uuid.uuid1()), meter='instance', type='gauge', unit='instance', volume=1, resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', timestamp=timeutils.utcnow(), recorded_at=datetime.datetime.utcnow(), source='openstack', metadata={'name1': 'value1', 'name2': 'value2'}, ) class SamplesController(rest.RestController): """Controller managing the samples.""" @wsme_pecan.wsexpose([Sample], [Query], int) def get_all(self, q=[], limit=None): """Return all known samples, based on the data recorded so far. :param q: Filter rules for the samples to be returned. :param limit: Maximum number of samples to be returned. """ if limit and limit < 0: raise ClientSideError(_("Limit must be positive")) kwargs = _query_to_kwargs(q, storage.SampleFilter.__init__) f = storage.SampleFilter(**kwargs) return map(Sample.from_db_model, pecan.request.storage_conn.get_samples(f, limit=limit)) @wsme_pecan.wsexpose(Sample, wtypes.text) def get_one(self, sample_id): """Return a sample :param sample_id: the id of the sample """ f = storage.SampleFilter(message_id=sample_id) samples = list(pecan.request.storage_conn.get_samples(f)) if len(samples) < 1: raise EntityNotFound(_('Sample'), sample_id) return Sample.from_db_model(samples[0]) class ComplexQuery(_Base): """Holds a sample query encoded in json.""" filter = wtypes.text "The filter expression encoded in json." orderby = wtypes.text "List of single-element dicts for specifing the ordering of the results." limit = int "The maximum number of results to be returned." @classmethod def sample(cls): return cls(filter='{\"and\": [{\"and\": [{\"=\": ' + '{\"counter_name\": \"cpu_util\"}}, ' + '{\">\": {\"counter_volume\": 0.23}}, ' + '{\"<\": {\"counter_volume\": 0.26}}]}, ' + '{\"or\": [{\"and\": [{\">\": ' + '{\"timestamp\": \"2013-12-01T18:00:00\"}}, ' + '{\"<\": ' + '{\"timestamp\": \"2013-12-01T18:15:00\"}}]}, ' + '{\"and\": [{\">\": ' + '{\"timestamp\": \"2013-12-01T18:30:00\"}}, ' + '{\"<\": ' + '{\"timestamp\": \"2013-12-01T18:45:00\"}}]}]}]}', orderby='[{\"counter_volume\": \"ASC\"}, ' + '{\"timestamp\": \"DESC\"}]', limit=42 ) def _list_to_regexp(items, regexp_prefix=""): regexp = ["^%s$" % item for item in items] regexp = regexp_prefix + "|".join(regexp) return regexp class ValidatedComplexQuery(object): complex_operators = ["and", "or"] order_directions = ["asc", "desc"] simple_ops = ["=", "!=", "<", ">", "<=", "=<", ">=", "=>"] regexp_prefix = "(?i)" complex_ops = _list_to_regexp(complex_operators, regexp_prefix) simple_ops = _list_to_regexp(simple_ops, regexp_prefix) order_directions = _list_to_regexp(order_directions, regexp_prefix) timestamp_fields = ["timestamp", "state_timestamp"] def __init__(self, query, db_model, additional_name_mapping={}, metadata_allowed=False): self.name_mapping = {"user": "user_id", "project": "project_id"} self.name_mapping.update(additional_name_mapping) valid_keys = db_model.get_field_names() valid_keys = list(valid_keys) + self.name_mapping.keys() valid_fields = _list_to_regexp(valid_keys) if metadata_allowed: valid_filter_fields = valid_fields + "|^metadata\.[\S]+$" else: valid_filter_fields = valid_fields schema_value = { "oneOf": [{"type": "string"}, {"type": "number"}, {"type": "boolean"}], "minProperties": 1, "maxProperties": 1} schema_value_in = { "type": "array", "items": {"oneOf": [{"type": "string"}, {"type": "number"}]}} schema_field = { "type": "object", "patternProperties": {valid_filter_fields: schema_value}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1} schema_field_in = { "type": "object", "patternProperties": {valid_filter_fields: schema_value_in}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1} schema_leaf_in = { "type": "object", "patternProperties": {"(?i)^in$": schema_field_in}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1} schema_leaf_simple_ops = { "type": "object", "patternProperties": {self.simple_ops: schema_field}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1} schema_and_or_array = { "type": "array", "items": {"$ref": "#"}, "minItems": 2} schema_and_or = { "type": "object", "patternProperties": {self.complex_ops: schema_and_or_array}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1} schema_not = { "type": "object", "patternProperties": {"(?i)^not$": {"$ref": "#"}}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1} self.schema = { "oneOf": [{"$ref": "#/definitions/leaf_simple_ops"}, {"$ref": "#/definitions/leaf_in"}, {"$ref": "#/definitions/and_or"}, {"$ref": "#/definitions/not"}], "minProperties": 1, "maxProperties": 1, "definitions": {"leaf_simple_ops": schema_leaf_simple_ops, "leaf_in": schema_leaf_in, "and_or": schema_and_or, "not": schema_not}} self.orderby_schema = { "type": "array", "items": { "type": "object", "patternProperties": {valid_fields: {"type": "string", "pattern": self.order_directions}}, "additionalProperties": False, "minProperties": 1, "maxProperties": 1}} self.original_query = query def validate(self, visibility_field): """Validates the query content and does the necessary transformations. """ if self.original_query.filter is wtypes.Unset: self.filter_expr = None else: self.filter_expr = json.loads(self.original_query.filter) self._validate_filter(self.filter_expr) self._replace_isotime_with_datetime(self.filter_expr) self._convert_operator_to_lower_case(self.filter_expr) self._normalize_field_names_for_db_model(self.filter_expr) self._force_visibility(visibility_field) if self.original_query.orderby is wtypes.Unset: self.orderby = None else: self.orderby = json.loads(self.original_query.orderby) self._validate_orderby(self.orderby) self._convert_orderby_to_lower_case(self.orderby) self._normalize_field_names_in_orderby(self.orderby) if self.original_query.limit is wtypes.Unset: self.limit = None else: self.limit = self.original_query.limit if self.limit is not None and self.limit <= 0: msg = _('Limit should be positive') raise ClientSideError(msg) @staticmethod def _convert_orderby_to_lower_case(orderby): for orderby_field in orderby: utils.lowercase_values(orderby_field) def _normalize_field_names_in_orderby(self, orderby): for orderby_field in orderby: self._replace_field_names(orderby_field) def _traverse_postorder(self, tree, visitor): op = tree.keys()[0] if op.lower() in self.complex_operators: for i, operand in enumerate(tree[op]): self._traverse_postorder(operand, visitor) if op.lower() == "not": self._traverse_postorder(tree[op], visitor) visitor(tree) def _check_cross_project_references(self, own_project_id, visibility_field): """Do not allow other than own_project_id """ def check_project_id(subfilter): op = subfilter.keys()[0] if (op.lower() not in self.complex_operators and subfilter[op].keys()[0] == visibility_field and subfilter[op][visibility_field] != own_project_id): raise ProjectNotAuthorized(subfilter[op][visibility_field]) self._traverse_postorder(self.filter_expr, check_project_id) def _force_visibility(self, visibility_field): """If the tenant is not admin insert an extra "and =" clause to the query """ authorized_project = acl.get_limited_to_project(pecan.request.headers) is_admin = authorized_project is None if not is_admin: self._restrict_to_project(authorized_project, visibility_field) self._check_cross_project_references(authorized_project, visibility_field) def _restrict_to_project(self, project_id, visibility_field): restriction = {"=": {visibility_field: project_id}} if self.filter_expr is None: self.filter_expr = restriction else: self.filter_expr = {"and": [restriction, self.filter_expr]} def _replace_isotime_with_datetime(self, filter_expr): def replace_isotime(subfilter): op = subfilter.keys()[0] if (op.lower() not in self.complex_operators and subfilter[op].keys()[0] in self.timestamp_fields): field = subfilter[op].keys()[0] date_time = self._convert_to_datetime(subfilter[op][field]) subfilter[op][field] = date_time self._traverse_postorder(filter_expr, replace_isotime) def _normalize_field_names_for_db_model(self, filter_expr): def _normalize_field_names(subfilter): op = subfilter.keys()[0] if op.lower() not in self.complex_operators: self._replace_field_names(subfilter.values()[0]) self._traverse_postorder(filter_expr, _normalize_field_names) def _replace_field_names(self, subfilter): field = subfilter.keys()[0] value = subfilter[field] if field in self.name_mapping: del subfilter[field] subfilter[self.name_mapping[field]] = value if field.startswith("metadata."): del subfilter[field] subfilter["resource_" + field] = value def _convert_operator_to_lower_case(self, filter_expr): self._traverse_postorder(filter_expr, utils.lowercase_keys) @staticmethod def _convert_to_datetime(isotime): try: date_time = timeutils.parse_isotime(isotime) date_time = date_time.replace(tzinfo=None) return date_time except ValueError: LOG.exception(_("String %s is not a valid isotime") % isotime) msg = _('Failed to parse the timestamp value %s') % isotime raise ClientSideError(msg) def _validate_filter(self, filter_expr): jsonschema.validate(filter_expr, self.schema) def _validate_orderby(self, orderby_expr): jsonschema.validate(orderby_expr, self.orderby_schema) class Resource(_Base): """An externally defined object for which samples have been received. """ resource_id = wtypes.text "The unique identifier for the resource" project_id = wtypes.text "The ID of the owning project or tenant" user_id = wtypes.text "The ID of the user who created the resource or updated it last" first_sample_timestamp = datetime.datetime "UTC date & time not later than the first sample known for this resource" last_sample_timestamp = datetime.datetime "UTC date & time not earlier than the last sample known for this resource" metadata = {wtypes.text: wtypes.text} "Arbitrary metadata associated with the resource" links = [Link] "A list containing a self link and associated meter links" source = wtypes.text "The source where the resource come from" def __init__(self, metadata={}, **kwds): metadata = _flatten_metadata(metadata) super(Resource, self).__init__(metadata=metadata, **kwds) @classmethod def sample(cls): return cls(resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', timestamp=datetime.datetime.utcnow(), source="openstack", metadata={'name1': 'value1', 'name2': 'value2'}, links=[Link(href=('http://localhost:8777/v2/resources/' 'bd9431c1-8d69-4ad3-803a-8d4a6b89fd36'), rel='self'), Link(href=('http://localhost:8777/v2/meters/volume?' 'q.field=resource_id&' 'q.value=bd9431c1-8d69-4ad3-803a-' '8d4a6b89fd36'), rel='volume')], ) class ResourcesController(rest.RestController): """Works on resources.""" def _resource_links(self, resource_id, meter_links=1): links = [_make_link('self', pecan.request.host_url, 'resources', resource_id)] if meter_links: for meter in pecan.request.storage_conn.get_meters(resource= resource_id): query = {'field': 'resource_id', 'value': resource_id} links.append(_make_link(meter.name, pecan.request.host_url, 'meters', meter.name, query=query)) return links @wsme_pecan.wsexpose(Resource, unicode) def get_one(self, resource_id): """Retrieve details about one resource. :param resource_id: The UUID of the resource. """ authorized_project = acl.get_limited_to_project(pecan.request.headers) resources = list(pecan.request.storage_conn.get_resources( resource=resource_id, project=authorized_project)) if not resources: raise EntityNotFound(_('Resource'), resource_id) return Resource.from_db_and_links(resources[0], self._resource_links(resource_id)) @wsme_pecan.wsexpose([Resource], [Query], int) def get_all(self, q=[], meter_links=1): """Retrieve definitions of all of the resources. :param q: Filter rules for the resources to be returned. :param meter_links: option to include related meter links """ kwargs = _query_to_kwargs(q, pecan.request.storage_conn.get_resources) resources = [ Resource.from_db_and_links(r, self._resource_links(r.resource_id, meter_links)) for r in pecan.request.storage_conn.get_resources(**kwargs)] return resources class AlarmThresholdRule(_Base): meter_name = wsme.wsattr(wtypes.text, mandatory=True) "The name of the meter" #FIXME(sileht): default doesn't work #workaround: default is set in validate method query = wsme.wsattr([Query], default=[]) """The query to find the data for computing statistics. Ownership settings are automatically included based on the Alarm owner. """ period = wsme.wsattr(wtypes.IntegerType(minimum=1), default=60) "The time range in seconds over which query" comparison_operator = AdvEnum('comparison_operator', str, 'lt', 'le', 'eq', 'ne', 'ge', 'gt', default='eq') "The comparison against the alarm threshold" threshold = wsme.wsattr(float, mandatory=True) "The threshold of the alarm" statistic = AdvEnum('statistic', str, 'max', 'min', 'avg', 'sum', 'count', default='avg') "The statistic to compare to the threshold" evaluation_periods = wsme.wsattr(wtypes.IntegerType(minimum=1), default=1) "The number of historical periods to evaluate the threshold" exclude_outliers = wsme.wsattr(bool, default=False) "Whether datapoints with anomalously low sample counts are excluded" def __init__(self, query=None, **kwargs): if query: query = [Query(**q) for q in query] super(AlarmThresholdRule, self).__init__(query=query, **kwargs) @staticmethod def validate(threshold_rule): #note(sileht): wsme default doesn't work in some case #workaround for https://bugs.launchpad.net/wsme/+bug/1227039 if not threshold_rule.query: threshold_rule.query = [] #Timestamp is not allowed for AlarmThresholdRule query, as the alarm #evaluator will construct timestamp bounds for the sequence of #statistics queries as the sliding evaluation window advances #over time. _validate_query(threshold_rule.query, storage.SampleFilter.__init__, allow_timestamps=False) return threshold_rule @property def default_description(self): return _( 'Alarm when %(meter_name)s is %(comparison_operator)s a ' '%(statistic)s of %(threshold)s over %(period)s seconds') % \ dict(comparison_operator=self.comparison_operator, statistic=self.statistic, threshold=self.threshold, meter_name=self.meter_name, period=self.period) def as_dict(self): rule = self.as_dict_from_keys(['period', 'comparison_operator', 'threshold', 'statistic', 'evaluation_periods', 'meter_name', 'exclude_outliers']) rule['query'] = [q.as_dict() for q in self.query] return rule @classmethod def sample(cls): return cls(meter_name='cpu_util', period=60, evaluation_periods=1, threshold=300.0, statistic='avg', comparison_operator='gt', query=[{'field': 'resource_id', 'value': '2a4d689b-f0b8-49c1-9eef-87cae58d80db', 'op': 'eq', 'type': 'string'}]) class AlarmCombinationRule(_Base): operator = AdvEnum('operator', str, 'or', 'and', default='and') "How to combine the sub-alarms" alarm_ids = wsme.wsattr([wtypes.text], mandatory=True) "List of alarm identifiers to combine" @property def default_description(self): joiner = ' %s ' % self.operator return _('Combined state of alarms %s') % joiner.join(self.alarm_ids) def as_dict(self): return self.as_dict_from_keys(['operator', 'alarm_ids']) @classmethod def sample(cls): return cls(operator='or', alarm_ids=['739e99cb-c2ec-4718-b900-332502355f38', '153462d0-a9b8-4b5b-8175-9e4b05e9b856']) class AlarmTimeConstraint(_Base): """Representation of a time constraint on an alarm.""" name = wsme.wsattr(wtypes.text, mandatory=True) "The name of the constraint" _description = None # provide a default def get_description(self): if not self._description: return 'Time constraint at %s lasting for %s seconds' \ % (self.start, self.duration) return self._description def set_description(self, value): self._description = value description = wsme.wsproperty(wtypes.text, get_description, set_description) "The description of the constraint" start = wsme.wsattr(CronType(), mandatory=True) "Start point of the time constraint, in cron format" duration = wsme.wsattr(wtypes.IntegerType(minimum=0), mandatory=True) "How long the constraint should last, in seconds" timezone = wsme.wsattr(wtypes.text, default="") "Timezone of the constraint" def as_dict(self): return self.as_dict_from_keys(['name', 'description', 'start', 'duration', 'timezone']) @staticmethod def validate(tc): if tc.timezone: try: pytz.timezone(tc.timezone) except Exception: raise ClientSideError(_("Timezone %s is not valid") % tc.timezone) return tc @classmethod def sample(cls): return cls(name='SampleConstraint', description='nightly build every night at 23h for 3 hours', start='0 23 * * *', duration=10800, timezone='Europe/Ljubljana') class Alarm(_Base): """Representation of an alarm. .. note:: combination_rule and threshold_rule are mutually exclusive. The *type* of the alarm should be set to *threshold* or *combination* and the appropriate rule should be filled. """ alarm_id = wtypes.text "The UUID of the alarm" name = wsme.wsattr(wtypes.text, mandatory=True) "The name for the alarm" _description = None # provide a default def get_description(self): rule = getattr(self, '%s_rule' % self.type, None) if not self._description and rule: return six.text_type(rule.default_description) return self._description def set_description(self, value): self._description = value description = wsme.wsproperty(wtypes.text, get_description, set_description) "The description of the alarm" enabled = wsme.wsattr(bool, default=True) "This alarm is enabled?" ok_actions = wsme.wsattr([wtypes.text], default=[]) "The actions to do when alarm state change to ok" alarm_actions = wsme.wsattr([wtypes.text], default=[]) "The actions to do when alarm state change to alarm" insufficient_data_actions = wsme.wsattr([wtypes.text], default=[]) "The actions to do when alarm state change to insufficient data" repeat_actions = wsme.wsattr(bool, default=False) "The actions should be re-triggered on each evaluation cycle" type = AdvEnum('type', str, 'threshold', 'combination', mandatory=True) "Explicit type specifier to select which rule to follow below." threshold_rule = AlarmThresholdRule "Describe when to trigger the alarm based on computed statistics" combination_rule = AlarmCombinationRule """Describe when to trigger the alarm based on combining the state of other alarms""" time_constraints = wtypes.wsattr([AlarmTimeConstraint], default=[]) """Describe time constraints for the alarm""" # These settings are ignored in the PUT or POST operations, but are # filled in for GET project_id = wtypes.text "The ID of the project or tenant that owns the alarm" user_id = wtypes.text "The ID of the user who created the alarm" timestamp = datetime.datetime "The date of the last alarm definition update" state = AdvEnum('state', str, *state_kind, default='insufficient data') "The state offset the alarm" state_timestamp = datetime.datetime "The date of the last alarm state changed" def __init__(self, rule=None, time_constraints=None, **kwargs): super(Alarm, self).__init__(**kwargs) if rule: if self.type == 'threshold': self.threshold_rule = AlarmThresholdRule(**rule) elif self.type == 'combination': self.combination_rule = AlarmCombinationRule(**rule) if time_constraints: self.time_constraints = [AlarmTimeConstraint(**tc) for tc in time_constraints] @staticmethod def validate(alarm): Alarm.check_rule(alarm) if alarm.threshold_rule: # ensure an implicit constraint on project_id is added to # the query if not already present alarm.threshold_rule.query = _sanitize_query( alarm.threshold_rule.query, storage.SampleFilter.__init__, on_behalf_of=alarm.project_id ) elif alarm.combination_rule: project = _get_auth_project(alarm.project_id if alarm.project_id != wtypes.Unset else None) for id in alarm.combination_rule.alarm_ids: alarms = list(pecan.request.storage_conn.get_alarms( alarm_id=id, project=project)) if not alarms: raise EntityNotFound(_('Alarm'), id) tc_names = [tc.name for tc in alarm.time_constraints] if len(tc_names) > len(set(tc_names)): error = _("Time constraint names must be " "unique for a given alarm.") raise ClientSideError(error) return alarm @staticmethod def check_rule(alarm): rule = '%s_rule' % alarm.type if getattr(alarm, rule) in (wtypes.Unset, None): error = _("%(rule)s must be set for %(type)s" " type alarm") % {"rule": rule, "type": alarm.type} raise ClientSideError(error) if alarm.threshold_rule and alarm.combination_rule: error = _("threshold_rule and combination_rule " "cannot be set at the same time") raise ClientSideError(error) @classmethod def sample(cls): return cls(alarm_id=None, name="SwiftObjectAlarm", description="An alarm", type='combination', threshold_rule=None, combination_rule=AlarmCombinationRule.sample(), time_constraints=[AlarmTimeConstraint.sample().as_dict()], user_id="c96c887c216949acbdfbd8b494863567", project_id="c96c887c216949acbdfbd8b494863567", enabled=True, timestamp=datetime.datetime.utcnow(), state="ok", state_timestamp=datetime.datetime.utcnow(), ok_actions=["http://site:8000/ok"], alarm_actions=["http://site:8000/alarm"], insufficient_data_actions=["http://site:8000/nodata"], repeat_actions=False, ) def as_dict(self, db_model): d = super(Alarm, self).as_dict(db_model) for k in d: if k.endswith('_rule'): del d[k] d['rule'] = getattr(self, "%s_rule" % self.type).as_dict() d['time_constraints'] = [tc.as_dict() for tc in self.time_constraints] return d class AlarmChange(_Base): """Representation of an event in an alarm's history """ event_id = wtypes.text "The UUID of the change event" alarm_id = wtypes.text "The UUID of the alarm" type = wtypes.Enum(str, 'creation', 'rule change', 'state transition', 'deletion') "The type of change" detail = wtypes.text "JSON fragment describing change" project_id = wtypes.text "The project ID of the initiating identity" user_id = wtypes.text "The user ID of the initiating identity" on_behalf_of = wtypes.text "The tenant on behalf of which the change is being made" timestamp = datetime.datetime "The time/date of the alarm change" @classmethod def sample(cls): return cls(alarm_id='e8ff32f772a44a478182c3fe1f7cad6a', type='rule change', detail='{"threshold": 42.0, "evaluation_periods": 4}', user_id="3e5d11fda79448ac99ccefb20be187ca", project_id="b6f16144010811e387e4de429e99ee8c", on_behalf_of="92159030020611e3b26dde429e99ee8c", timestamp=datetime.datetime.utcnow(), ) class AlarmController(rest.RestController): """Manages operations on a single alarm. """ _custom_actions = { 'history': ['GET'], 'state': ['PUT', 'GET'], } def __init__(self, alarm_id): pecan.request.context['alarm_id'] = alarm_id self._id = alarm_id def _alarm(self): self.conn = pecan.request.storage_conn auth_project = acl.get_limited_to_project(pecan.request.headers) alarms = list(self.conn.get_alarms(alarm_id=self._id, project=auth_project)) if not alarms: raise EntityNotFound(_('Alarm'), self._id) return alarms[0] def _record_change(self, data, now, on_behalf_of=None, type=None): if not cfg.CONF.alarm.record_history: return type = type or storage.models.AlarmChange.RULE_CHANGE scrubbed_data = utils.stringify_timestamps(data) detail = json.dumps(scrubbed_data) user_id = pecan.request.headers.get('X-User-Id') project_id = pecan.request.headers.get('X-Project-Id') on_behalf_of = on_behalf_of or project_id payload = dict(event_id=str(uuid.uuid4()), alarm_id=self._id, type=type, detail=detail, user_id=user_id, project_id=project_id, on_behalf_of=on_behalf_of, timestamp=now) try: self.conn.record_alarm_change(payload) except NotImplementedError: pass # Revert to the pre-json'ed details ... payload['detail'] = scrubbed_data _send_notification(type, payload) @wsme_pecan.wsexpose(Alarm) def get(self): """Return this alarm. """ return Alarm.from_db_model(self._alarm()) @wsme_pecan.wsexpose(Alarm, body=Alarm) def put(self, data): """Modify this alarm. :param data: an alarm within the request body. """ # Ensure alarm exists alarm_in = self._alarm() now = timeutils.utcnow() data.alarm_id = self._id user, project = acl.get_limited_to(pecan.request.headers) if user: data.user_id = user elif data.user_id == wtypes.Unset: data.user_id = alarm_in.user_id if project: data.project_id = project elif data.project_id == wtypes.Unset: data.project_id = alarm_in.project_id data.timestamp = now if alarm_in.state != data.state: data.state_timestamp = now else: data.state_timestamp = alarm_in.state_timestamp # make sure alarms are unique by name per project. if alarm_in.name != data.name: alarms = list(self.conn.get_alarms(name=data.name, project=data.project_id)) if alarms: raise ClientSideError( _("Alarm with name=%s exists") % data.name, status_code=409) old_alarm = Alarm.from_db_model(alarm_in).as_dict(storage.models.Alarm) updated_alarm = data.as_dict(storage.models.Alarm) try: alarm_in = storage.models.Alarm(**updated_alarm) except Exception: LOG.exception(_("Error while putting alarm: %s") % updated_alarm) raise ClientSideError(_("Alarm incorrect")) alarm = self.conn.update_alarm(alarm_in) change = dict((k, v) for k, v in updated_alarm.items() if v != old_alarm[k] and k not in ['timestamp', 'state_timestamp']) self._record_change(change, now, on_behalf_of=alarm.project_id) return Alarm.from_db_model(alarm) @wsme_pecan.wsexpose(None, status_code=204) def delete(self): """Delete this alarm. """ # ensure alarm exists before deleting alarm = self._alarm() self.conn.delete_alarm(alarm.alarm_id) change = Alarm.from_db_model(alarm).as_dict(storage.models.Alarm) self._record_change(change, timeutils.utcnow(), type=storage.models.AlarmChange.DELETION) # TODO(eglynn): add pagination marker to signature once overall # API support for pagination is finalized @wsme_pecan.wsexpose([AlarmChange], [Query]) def history(self, q=[]): """Assembles the alarm history requested. :param q: Filter rules for the changes to be described. """ # allow history to be returned for deleted alarms, but scope changes # returned to those carried out on behalf of the auth'd tenant, to # avoid inappropriate cross-tenant visibility of alarm history auth_project = acl.get_limited_to_project(pecan.request.headers) conn = pecan.request.storage_conn kwargs = _query_to_kwargs(q, conn.get_alarm_changes, ['on_behalf_of']) return [AlarmChange.from_db_model(ac) for ac in conn.get_alarm_changes(self._id, auth_project, **kwargs)] @wsme.validate(state_kind_enum) @wsme_pecan.wsexpose(state_kind_enum, body=state_kind_enum) def put_state(self, state): """Set the state of this alarm. :param state: an alarm state within the request body. """ # note(sileht): body are not validated by wsme # Workaround for https://bugs.launchpad.net/wsme/+bug/1227229 if state not in state_kind: raise ClientSideError(_("state invalid")) now = timeutils.utcnow() alarm = self._alarm() alarm.state = state alarm.state_timestamp = now alarm = self.conn.update_alarm(alarm) change = {'state': alarm.state} self._record_change(change, now, on_behalf_of=alarm.project_id, type=storage.models.AlarmChange.STATE_TRANSITION) return alarm.state @wsme_pecan.wsexpose(state_kind_enum) def get_state(self): """Get the state of this alarm. """ alarm = self._alarm() return alarm.state class AlarmsController(rest.RestController): """Manages operations on the alarms collection. """ @pecan.expose() def _lookup(self, alarm_id, *remainder): return AlarmController(alarm_id), remainder def _record_creation(self, conn, data, alarm_id, now): if not cfg.CONF.alarm.record_history: return type = storage.models.AlarmChange.CREATION scrubbed_data = utils.stringify_timestamps(data) detail = json.dumps(scrubbed_data) user_id = pecan.request.headers.get('X-User-Id') project_id = pecan.request.headers.get('X-Project-Id') payload = dict(event_id=str(uuid.uuid4()), alarm_id=alarm_id, type=type, detail=detail, user_id=user_id, project_id=project_id, on_behalf_of=project_id, timestamp=now) try: conn.record_alarm_change(payload) except NotImplementedError: pass # Revert to the pre-json'ed details ... payload['detail'] = scrubbed_data _send_notification(type, payload) @wsme_pecan.wsexpose(Alarm, body=Alarm, status_code=201) def post(self, data): """Create a new alarm. :param data: an alarm within the request body. """ conn = pecan.request.storage_conn now = timeutils.utcnow() data.alarm_id = str(uuid.uuid4()) user_limit, project_limit = acl.get_limited_to(pecan.request.headers) def _set_ownership(aspect, owner_limitation, header): attr = '%s_id' % aspect requested_owner = getattr(data, attr) explicit_owner = requested_owner != wtypes.Unset caller = pecan.request.headers.get(header) if (owner_limitation and explicit_owner and requested_owner != caller): raise ProjectNotAuthorized(requested_owner, aspect) actual_owner = (owner_limitation or requested_owner if explicit_owner else caller) setattr(data, attr, actual_owner) _set_ownership('user', user_limit, 'X-User-Id') _set_ownership('project', project_limit, 'X-Project-Id') data.timestamp = now data.state_timestamp = now change = data.as_dict(storage.models.Alarm) # make sure alarms are unique by name per project. alarms = list(conn.get_alarms(name=data.name, project=data.project_id)) if alarms: raise ClientSideError( _("Alarm with name='%s' exists") % data.name, status_code=409) try: alarm_in = storage.models.Alarm(**change) except Exception: LOG.exception(_("Error while posting alarm: %s") % change) raise ClientSideError(_("Alarm incorrect")) alarm = conn.create_alarm(alarm_in) self._record_creation(conn, change, alarm.alarm_id, now) return Alarm.from_db_model(alarm) @wsme_pecan.wsexpose([Alarm], [Query]) def get_all(self, q=[]): """Return all alarms, based on the query provided. :param q: Filter rules for the alarms to be returned. """ #Timestamp is not supported field for Simple Alarm queries kwargs = _query_to_kwargs(q, pecan.request.storage_conn.get_alarms, allow_timestamps=False) return [Alarm.from_db_model(m) for m in pecan.request.storage_conn.get_alarms(**kwargs)] class TraitDescription(_Base): """A description of a trait, with no associated value.""" type = wtypes.text "the data type, defaults to string" name = wtypes.text "the name of the trait" @classmethod def sample(cls): return cls(name='service', type='string' ) class EventQuery(Query): """Query arguments for Event Queries.""" _supported_types = ['integer', 'float', 'string', 'datetime'] type = wsme.wsattr(wtypes.text, default='string') "the type of the trait filter, defaults to string" def __repr__(self): # for logging calls return '' % (self.field, self.op, self._get_value_as_type(), self.type) class Trait(_Base): """A Trait associated with an event.""" name = wtypes.text "The name of the trait" value = wtypes.text "the value of the trait" type = wtypes.text "the type of the trait (string, integer, float or datetime)" @classmethod def sample(cls): return cls(name='service', type='string', value='compute.hostname' ) class Event(_Base): """A System event.""" message_id = wtypes.text "The message ID for the notification" event_type = wtypes.text "The type of the event" _traits = None def get_traits(self): return self._traits @staticmethod def _convert_storage_trait(t): """Helper method to convert a storage model into an API trait instance. If an API trait instance is passed in, just return it. """ if isinstance(t, Trait): return t value = (six.text_type(t.value) if not t.dtype == storage.models.Trait.DATETIME_TYPE else t.value.isoformat()) type = storage.models.Trait.get_name_by_type(t.dtype) return Trait(name=t.name, type=type, value=value) def set_traits(self, traits): self._traits = map(self._convert_storage_trait, traits) traits = wsme.wsproperty(wtypes.ArrayType(Trait), get_traits, set_traits) "Event specific properties" generated = datetime.datetime "The time the event occurred" @classmethod def sample(cls): return cls( event_type='compute.instance.update', generated='2013-11-11T20:00:00', message_id='94834db1-8f1b-404d-b2ec-c35901f1b7f0', traits={ 'request_id': 'req-4e2d67b8-31a4-48af-bb2f-9df72a353a72', 'service': 'conductor.tem-devstack-01', 'tenant_id': '7f13f2b17917463b9ee21aa92c4b36d6' } ) def requires_admin(func): @functools.wraps(func) def wrapped(*args, **kwargs): usr_limit, proj_limit = acl.get_limited_to(pecan.request.headers) # If User and Project are None, you have full access. if usr_limit and proj_limit: raise ProjectNotAuthorized(proj_limit) return func(*args, **kwargs) return wrapped def _event_query_to_event_filter(q): evt_model_filter = { 'event_type': None, 'message_id': None, 'start_time': None, 'end_time': None } traits_filter = [] for i in q: # FIXME(herndon): Support for operators other than # 'eq' will come later. if i.op != 'eq': error = _("operator %s not supported") % i.op raise ClientSideError(error) if i.field in evt_model_filter: evt_model_filter[i.field] = i.value else: traits_filter.append({"key": i.field, i.type: i._get_value_as_type()}) return storage.EventFilter(traits_filter=traits_filter, **evt_model_filter) class TraitsController(rest.RestController): """Works on Event Traits.""" @requires_admin @wsme_pecan.wsexpose([Trait], wtypes.text, wtypes.text) def get_one(self, event_type, trait_name): """Return all instances of a trait for an event type. :param event_type: Event type to filter traits by :param trait_name: Trait to return values for """ LOG.debug(_("Getting traits for %s") % event_type) return [Trait(name=t.name, type=t.get_type_name(), value=t.value) for t in pecan.request.storage_conn .get_traits(event_type, trait_name)] @requires_admin @wsme_pecan.wsexpose([TraitDescription], wtypes.text) def get_all(self, event_type): """Return all trait names for an event type. :param event_type: Event type to filter traits by """ get_trait_name = storage.models.Trait.get_name_by_type return [TraitDescription(name=t['name'], type=get_trait_name(t['data_type'])) for t in pecan.request.storage_conn .get_trait_types(event_type)] class EventTypesController(rest.RestController): """Works on Event Types in the system.""" traits = TraitsController() @pecan.expose() def get_one(self, event_type): pecan.abort(404) @requires_admin @wsme_pecan.wsexpose([unicode]) def get_all(self): """Get all event types. """ return list(pecan.request.storage_conn.get_event_types()) class EventsController(rest.RestController): """Works on Events.""" @requires_admin @wsme_pecan.wsexpose([Event], [EventQuery]) def get_all(self, q=[]): """Return all events matching the query filters. :param q: Filter arguments for which Events to return """ event_filter = _event_query_to_event_filter(q) return [Event(message_id=event.message_id, event_type=event.event_type, generated=event.generated, traits=event.traits) for event in pecan.request.storage_conn.get_events(event_filter)] @requires_admin @wsme_pecan.wsexpose(Event, wtypes.text) def get_one(self, message_id): """Return a single event with the given message id. :param message_id: Message ID of the Event to be returned """ event_filter = storage.EventFilter(message_id=message_id) events = pecan.request.storage_conn.get_events(event_filter) if not events: raise EntityNotFound(_("Event"), message_id) if len(events) > 1: LOG.error(_("More than one event with " "id %s returned from storage driver") % message_id) event = events[0] return Event(message_id=event.message_id, event_type=event.event_type, generated=event.generated, traits=event.traits) class QuerySamplesController(rest.RestController): """Provides complex query possibilities for samples """ @wsme_pecan.wsexpose([Sample], body=ComplexQuery) def post(self, body): """Define query for retrieving Sample data. :param body: Query rules for the samples to be returned. """ sample_name_mapping = {"resource": "resource_id", "meter": "counter_name", "type": "counter_type", "unit": "counter_unit", "volume": "counter_volume"} query = ValidatedComplexQuery(body, storage.models.Sample, sample_name_mapping, metadata_allowed=True) query.validate(visibility_field="project_id") conn = pecan.request.storage_conn return [Sample.from_db_model(s) for s in conn.query_samples(query.filter_expr, query.orderby, query.limit)] class QueryAlarmHistoryController(rest.RestController): """Provides complex query possibilites for alarm history """ @wsme_pecan.wsexpose([AlarmChange], body=ComplexQuery) def post(self, body): """Define query for retrieving AlarmChange data. :param body: Query rules for the alarm history to be returned. """ query = ValidatedComplexQuery(body, storage.models.AlarmChange) query.validate(visibility_field="on_behalf_of") conn = pecan.request.storage_conn return [AlarmChange.from_db_model(s) for s in conn.query_alarm_history(query.filter_expr, query.orderby, query.limit)] class QueryAlarmsController(rest.RestController): """Provides complex query possibilities for alarms """ history = QueryAlarmHistoryController() @wsme_pecan.wsexpose([Alarm], body=ComplexQuery) def post(self, body): """Define query for retrieving Alarm data. :param body: Query rules for the alarms to be returned. """ query = ValidatedComplexQuery(body, storage.models.Alarm) query.validate(visibility_field="project_id") conn = pecan.request.storage_conn return [Alarm.from_db_model(s) for s in conn.query_alarms(query.filter_expr, query.orderby, query.limit)] class QueryController(rest.RestController): samples = QuerySamplesController() alarms = QueryAlarmsController() def _flatten_capabilities(capabilities): return dict((k, v) for k, v in utils.recursive_keypairs(capabilities)) class Capabilities(_Base): """A representation of the API capabilities, usually constrained by restrictions imposed by the storage driver. """ api = {wtypes.text: bool} "A flattened dictionary of API capabilities" @classmethod def sample(cls): return cls( api=_flatten_capabilities({ 'meters': {'pagination': True, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'resources': {'pagination': False, 'query': {'simple': True, 'metadata': True, 'complex': False}}, 'samples': {'pagination': True, 'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': True}}, 'statistics': {'pagination': True, 'groupby': True, 'query': {'simple': True, 'metadata': True, 'complex': False}, 'aggregation': {'standard': True, 'selectable': { 'max': True, 'min': True, 'sum': True, 'avg': True, 'count': True, 'stddev': True, 'cardinality': True, 'quartile': False}}}, 'alarms': {'query': {'simple': True, 'complex': True}, 'history': {'query': {'simple': True, 'complex': True}}}, 'events': {'query': {'simple': True}}, }) ) class CapabilitiesController(rest.RestController): """Manages capabilities queries. """ @wsme_pecan.wsexpose(Capabilities) def get(self): """Returns a flattened dictionary of API capabilities supported by the currently configured storage driver. """ # variation in API capabilities is effectively determined by # the lack of strict feature parity across storage drivers driver_capabilities = pecan.request.storage_conn.get_capabilities() return Capabilities(api=_flatten_capabilities(driver_capabilities)) class V2Controller(object): """Version 2 API controller root.""" resources = ResourcesController() meters = MetersController() samples = SamplesController() alarms = AlarmsController() event_types = EventTypesController() events = EventsController() query = QueryController() capabilities = CapabilitiesController() ceilometer-2014.1/ceilometer/api/controllers/__init__.py0000664000175300017540000000000012323717130024433 0ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/app.py0000664000175300017540000001103512323717130021120 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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 logging import os import socket from wsgiref import simple_server import netaddr from oslo.config import cfg import pecan from ceilometer.api import acl from ceilometer.api import config as api_config from ceilometer.api import hooks from ceilometer.api import middleware from ceilometer.openstack.common import log from ceilometer import storage LOG = log.getLogger(__name__) auth_opts = [ cfg.StrOpt('auth_strategy', default='keystone', help='The strategy to use for auth: noauth or keystone.'), cfg.BoolOpt('enable_v1_api', default=True, help='Deploy the deprecated v1 API.'), ] CONF = cfg.CONF CONF.register_opts(auth_opts) def get_pecan_config(): # Set up the pecan configuration filename = api_config.__file__.replace('.pyc', '.py') return pecan.configuration.conf_from_file(filename) def setup_app(pecan_config=None, extra_hooks=None): # FIXME: Replace DBHook with a hooks.TransactionHook app_hooks = [hooks.ConfigHook(), hooks.DBHook( storage.get_connection(cfg.CONF), ), hooks.PipelineHook(), hooks.TranslationHook()] if extra_hooks: app_hooks.extend(extra_hooks) if not pecan_config: pecan_config = get_pecan_config() pecan.configuration.set_config(dict(pecan_config), overwrite=True) app = pecan.make_app( pecan_config.app.root, static_root=pecan_config.app.static_root, template_path=pecan_config.app.template_path, debug=CONF.debug, force_canonical=getattr(pecan_config.app, 'force_canonical', True), hooks=app_hooks, wrap_app=middleware.ParsableErrorMiddleware, guess_content_type_from_ext=False ) if getattr(pecan_config.app, 'enable_acl', True): return acl.install(app, cfg.CONF) return app class VersionSelectorApplication(object): def __init__(self): pc = get_pecan_config() pc.app.debug = CONF.debug pc.app.enable_acl = (CONF.auth_strategy == 'keystone') if cfg.CONF.enable_v1_api: from ceilometer.api.v1 import app as v1app self.v1 = v1app.make_app(cfg.CONF, enable_acl=pc.app.enable_acl) else: def not_found(environ, start_response): start_response('404 Not Found', []) return [] self.v1 = not_found self.v2 = setup_app(pecan_config=pc) def __call__(self, environ, start_response): if environ['PATH_INFO'].startswith('/v1/'): return self.v1(environ, start_response) return self.v2(environ, start_response) def get_server_cls(host): """Return an appropriate WSGI server class base on provided host :param host: The listen host for the ceilometer API server. """ server_cls = simple_server.WSGIServer if netaddr.valid_ipv6(host): # NOTE(dzyu) make sure use IPv6 sockets if host is in IPv6 pattern if getattr(server_cls, 'address_family') == socket.AF_INET: class server_cls(server_cls): address_family = socket.AF_INET6 return server_cls def build_server(): # Build the WSGI app root = VersionSelectorApplication() # Create the WSGI server and start it host, port = cfg.CONF.api.host, cfg.CONF.api.port server_cls = get_server_cls(host) srv = simple_server.make_server(host, port, root, server_cls) LOG.info(_('Starting server in PID %s') % os.getpid()) LOG.info(_("Configuration:")) cfg.CONF.log_opt_values(LOG, logging.INFO) if host == '0.0.0.0': LOG.info(_( 'serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s') % ({'sport': port, 'vport': port})) else: LOG.info(_("serving on http://%(host)s:%(port)s") % ( {'host': host, 'port': port})) return srv ceilometer-2014.1/ceilometer/api/acl.py0000664000175300017540000000417412323717130021105 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Access Control Lists (ACL's) control access the API server.""" from ceilometer.openstack.common import policy from keystoneclient.middleware import auth_token from oslo.config import cfg _ENFORCER = None OPT_GROUP_NAME = 'keystone_authtoken' def register_opts(conf): """Register keystoneclient middleware options """ conf.register_opts(auth_token.opts, group=OPT_GROUP_NAME) auth_token.CONF = conf register_opts(cfg.CONF) def install(app, conf): """Install ACL check on application.""" return auth_token.AuthProtocol(app, conf=dict(conf.get(OPT_GROUP_NAME))) def get_limited_to(headers): """Return the user and project the request should be limited to. :param headers: HTTP headers dictionary :return: A tuple of (user, project), set to None if there's no limit on one of these. """ global _ENFORCER if not _ENFORCER: _ENFORCER = policy.Enforcer() if not _ENFORCER.enforce('context_is_admin', {}, {'roles': headers.get('X-Roles', "").split(",")}): return headers.get('X-User-Id'), headers.get('X-Project-Id') return None, None def get_limited_to_project(headers): """Return the project the request should be limited to. :param headers: HTTP headers dictionary :return: A project, or None if there's no limit on it. """ return get_limited_to(headers)[1] ceilometer-2014.1/ceilometer/api/config.py0000664000175300017540000000203112323717130021601 0ustar jenkinsjenkins00000000000000# 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. # Server Specific Configurations server = { 'port': '8777', 'host': '0.0.0.0' } # Pecan Application Configurations app = { 'root': 'ceilometer.api.controllers.root.RootController', 'modules': ['ceilometer.api'], 'static_root': '%(confdir)s/public', 'template_path': '%(confdir)s/ceilometer/api/templates', } # Custom Configurations must be in Python dictionary format:: # # foo = {'bar':'baz'} # # All configurations are accessible at:: # pecan.conf ceilometer-2014.1/ceilometer/api/v1/0000775000175300017540000000000012323717426020324 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/app.py0000664000175300017540000000364712323717130021460 0ustar jenkinsjenkins00000000000000# -*- encoding: utf-8 -*- # # Copyright © 2012 New Dream Network, LLC (DreamHost) # # Author: Doug Hellmann # # 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. """Set up the API server application instance.""" import flask from oslo.config import cfg from ceilometer.api import acl from ceilometer.api.v1 import blueprint as v1_blueprint from ceilometer.openstack.common import jsonutils from ceilometer import storage class JSONEncoder(flask.json.JSONEncoder): @staticmethod def default(o): return jsonutils.to_primitive(o) def make_app(conf, enable_acl=True, attach_storage=True, sources_file='sources.json'): app = flask.Flask('ceilometer.api') app.register_blueprint(v1_blueprint.blueprint, url_prefix='/v1') app.json_encoder = JSONEncoder try: with open(sources_file, "r") as f: sources = jsonutils.load(f) except IOError: sources = {} @app.before_request def attach_config(): flask.request.cfg = conf flask.request.sources = sources if attach_storage: @app.before_request def attach_storage(): flask.request.storage_conn = \ storage.get_connection(conf) # Install the middleware wrapper if enable_acl: app.wsgi_app = acl.install(app.wsgi_app, conf) return app # For documentation app = make_app(cfg.CONF, enable_acl=False, attach_storage=False) ceilometer-2014.1/ceilometer/api/v1/templates/0000775000175300017540000000000012323717426022322 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/templates/list_event.html0000664000175300017540000001340412323717130025356 0ustar jenkinsjenkins00000000000000 Metering for {{meter}}

Graph

API


JSON

        
ceilometer-2014.1/ceilometer/api/v1/static/0000775000175300017540000000000012323717426021613 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/static/d3.v2.js0000664000175300017540000072407212323717130023011 0ustar jenkinsjenkins00000000000000(function() { function d3_class(ctor, properties) { try { for (var key in properties) { Object.defineProperty(ctor.prototype, key, { value: properties[key], enumerable: false }); } } catch (e) { ctor.prototype = properties; } } function d3_arrayCopy(pseudoarray) { var i = -1, n = pseudoarray.length, array = []; while (++i < n) array.push(pseudoarray[i]); return array; } function d3_arraySlice(pseudoarray) { return Array.prototype.slice.call(pseudoarray); } function d3_Map() {} function d3_identity(d) { return d; } function d3_this() { return this; } function d3_true() { return true; } function d3_functor(v) { return typeof v === "function" ? v : function() { return v; }; } function d3_rebind(target, source, method) { return function() { var value = method.apply(source, arguments); return arguments.length ? target : value; }; } function d3_number(x) { return x != null && !isNaN(x); } function d3_zipLength(d) { return d.length; } function d3_splitter(d) { return d == null; } function d3_collapse(s) { return s.trim().replace(/\s+/g, " "); } function d3_range_integerScale(x) { var k = 1; while (x * k % 1) k *= 10; return k; } function d3_dispatch() {} function d3_dispatch_event(dispatch) { function event() { var z = listeners, i = -1, n = z.length, l; while (++i < n) if (l = z[i].on) l.apply(this, arguments); return dispatch; } var listeners = [], listenerByName = new d3_Map; event.on = function(name, listener) { var l = listenerByName.get(name), i; if (arguments.length < 2) return l && l.on; if (l) { l.on = null; listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); listenerByName.remove(name); } if (listener) listeners.push(listenerByName.set(name, { on: listener })); return dispatch; }; return event; } function d3_format_precision(x, p) { return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1); } function d3_format_typeDefault(x) { return x + ""; } function d3_format_group(value) { var i = value.lastIndexOf("."), f = i >= 0 ? value.substring(i) : (i = value.length, ""), t = []; while (i > 0) t.push(value.substring(i -= 3, i + 3)); return t.reverse().join(",") + f; } function d3_formatPrefix(d, i) { var k = Math.pow(10, Math.abs(8 - i) * 3); return { scale: i > 8 ? function(d) { return d / k; } : function(d) { return d * k; }, symbol: d }; } function d3_ease_clamp(f) { return function(t) { return t <= 0 ? 0 : t >= 1 ? 1 : f(t); }; } function d3_ease_reverse(f) { return function(t) { return 1 - f(1 - t); }; } function d3_ease_reflect(f) { return function(t) { return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); }; } function d3_ease_identity(t) { return t; } function d3_ease_poly(e) { return function(t) { return Math.pow(t, e); }; } function d3_ease_sin(t) { return 1 - Math.cos(t * Math.PI / 2); } function d3_ease_exp(t) { return Math.pow(2, 10 * (t - 1)); } function d3_ease_circle(t) { return 1 - Math.sqrt(1 - t * t); } function d3_ease_elastic(a, p) { var s; if (arguments.length < 2) p = .45; if (arguments.length < 1) { a = 1; s = p / 4; } else s = p / (2 * Math.PI) * Math.asin(1 / a); return function(t) { return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p); }; } function d3_ease_back(s) { if (!s) s = 1.70158; return function(t) { return t * t * ((s + 1) * t - s); }; } function d3_ease_bounce(t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; } function d3_eventCancel() { d3.event.stopPropagation(); d3.event.preventDefault(); } function d3_eventSource() { var e = d3.event, s; while (s = e.sourceEvent) e = s; return e; } function d3_eventDispatch(target) { var dispatch = new d3_dispatch, i = 0, n = arguments.length; while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); dispatch.of = function(thiz, argumentz) { return function(e1) { try { var e0 = e1.sourceEvent = d3.event; e1.target = target; d3.event = e1; dispatch[e1.type].apply(thiz, argumentz); } finally { d3.event = e0; } }; }; return dispatch; } function d3_transform(m) { var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; if (r0[0] * r1[1] < r1[0] * r0[1]) { r0[0] *= -1; r0[1] *= -1; kx *= -1; kz *= -1; } this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees; this.translate = [ m.e, m.f ]; this.scale = [ kx, ky ]; this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0; } function d3_transformDot(a, b) { return a[0] * b[0] + a[1] * b[1]; } function d3_transformNormalize(a) { var k = Math.sqrt(d3_transformDot(a, a)); if (k) { a[0] /= k; a[1] /= k; } return k; } function d3_transformCombine(a, b, k) { a[0] += k * b[0]; a[1] += k * b[1]; return a; } function d3_interpolateByName(name) { return name == "transform" ? d3.interpolateTransform : d3.interpolate; } function d3_uninterpolateNumber(a, b) { b = b - (a = +a) ? 1 / (b - a) : 0; return function(x) { return (x - a) * b; }; } function d3_uninterpolateClamp(a, b) { b = b - (a = +a) ? 1 / (b - a) : 0; return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); }; } function d3_Color() {} function d3_rgb(r, g, b) { return new d3_Rgb(r, g, b); } function d3_Rgb(r, g, b) { this.r = r; this.g = g; this.b = b; } function d3_rgb_hex(v) { return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); } function d3_rgb_parse(format, rgb, hsl) { var r = 0, g = 0, b = 0, m1, m2, name; m1 = /([a-z]+)\((.*)\)/i.exec(format); if (m1) { m2 = m1[2].split(","); switch (m1[1]) { case "hsl": { return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); } case "rgb": { return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); } } } if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b); if (format != null && format.charAt(0) === "#") { if (format.length === 4) { r = format.charAt(1); r += r; g = format.charAt(2); g += g; b = format.charAt(3); b += b; } else if (format.length === 7) { r = format.substring(1, 3); g = format.substring(3, 5); b = format.substring(5, 7); } r = parseInt(r, 16); g = parseInt(g, 16); b = parseInt(b, 16); } return rgb(r, g, b); } function d3_rgb_hsl(r, g, b) { var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; if (d) { s = l < .5 ? d / (max + min) : d / (2 - max - min); if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; h *= 60; } else { s = h = 0; } return d3_hsl(h, s, l); } function d3_rgb_lab(r, g, b) { r = d3_rgb_xyz(r); g = d3_rgb_xyz(g); b = d3_rgb_xyz(b); var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); } function d3_rgb_xyz(r) { return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); } function d3_rgb_parseNumber(c) { var f = parseFloat(c); return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; } function d3_hsl(h, s, l) { return new d3_Hsl(h, s, l); } function d3_Hsl(h, s, l) { this.h = h; this.s = s; this.l = l; } function d3_hsl_rgb(h, s, l) { function v(h) { if (h > 360) h -= 360; else if (h < 0) h += 360; if (h < 60) return m1 + (m2 - m1) * h / 60; if (h < 180) return m2; if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; return m1; } function vv(h) { return Math.round(v(h) * 255); } var m1, m2; h = h % 360; if (h < 0) h += 360; s = s < 0 ? 0 : s > 1 ? 1 : s; l = l < 0 ? 0 : l > 1 ? 1 : l; m2 = l <= .5 ? l * (1 + s) : l + s - l * s; m1 = 2 * l - m2; return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); } function d3_hcl(h, c, l) { return new d3_Hcl(h, c, l); } function d3_Hcl(h, c, l) { this.h = h; this.c = c; this.l = l; } function d3_hcl_lab(h, c, l) { return d3_lab(l, Math.cos(h *= Math.PI / 180) * c, Math.sin(h) * c); } function d3_lab(l, a, b) { return new d3_Lab(l, a, b); } function d3_Lab(l, a, b) { this.l = l; this.a = a; this.b = b; } function d3_lab_rgb(l, a, b) { var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; x = d3_lab_xyz(x) * d3_lab_X; y = d3_lab_xyz(y) * d3_lab_Y; z = d3_lab_xyz(z) * d3_lab_Z; return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); } function d3_lab_hcl(l, a, b) { return d3_hcl(Math.atan2(b, a) / Math.PI * 180, Math.sqrt(a * a + b * b), l); } function d3_lab_xyz(x) { return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; } function d3_xyz_lab(x) { return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; } function d3_xyz_rgb(r) { return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); } function d3_selection(groups) { d3_arraySubclass(groups, d3_selectionPrototype); return groups; } function d3_selection_selector(selector) { return function() { return d3_select(selector, this); }; } function d3_selection_selectorAll(selector) { return function() { return d3_selectAll(selector, this); }; } function d3_selection_attr(name, value) { function attrNull() { this.removeAttribute(name); } function attrNullNS() { this.removeAttributeNS(name.space, name.local); } function attrConstant() { this.setAttribute(name, value); } function attrConstantNS() { this.setAttributeNS(name.space, name.local, value); } function attrFunction() { var x = value.apply(this, arguments); if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); } function attrFunctionNS() { var x = value.apply(this, arguments); if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); } name = d3.ns.qualify(name); return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; } function d3_selection_classedRe(name) { return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); } function d3_selection_classed(name, value) { function classedConstant() { var i = -1; while (++i < n) name[i](this, value); } function classedFunction() { var i = -1, x = value.apply(this, arguments); while (++i < n) name[i](this, x); } name = name.trim().split(/\s+/).map(d3_selection_classedName); var n = name.length; return typeof value === "function" ? classedFunction : classedConstant; } function d3_selection_classedName(name) { var re = d3_selection_classedRe(name); return function(node, value) { if (c = node.classList) return value ? c.add(name) : c.remove(name); var c = node.className, cb = c.baseVal != null, cv = cb ? c.baseVal : c; if (value) { re.lastIndex = 0; if (!re.test(cv)) { cv = d3_collapse(cv + " " + name); if (cb) c.baseVal = cv; else node.className = cv; } } else if (cv) { cv = d3_collapse(cv.replace(re, " ")); if (cb) c.baseVal = cv; else node.className = cv; } }; } function d3_selection_style(name, value, priority) { function styleNull() { this.style.removeProperty(name); } function styleConstant() { this.style.setProperty(name, value, priority); } function styleFunction() { var x = value.apply(this, arguments); if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); } return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; } function d3_selection_property(name, value) { function propertyNull() { delete this[name]; } function propertyConstant() { this[name] = value; } function propertyFunction() { var x = value.apply(this, arguments); if (x == null) delete this[name]; else this[name] = x; } return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; } function d3_selection_dataNode(data) { return { __data__: data }; } function d3_selection_filter(selector) { return function() { return d3_selectMatches(this, selector); }; } function d3_selection_sortComparator(comparator) { if (!arguments.length) comparator = d3.ascending; return function(a, b) { return comparator(a && a.__data__, b && b.__data__); }; } function d3_selection_on(type, listener, capture) { function onRemove() { var wrapper = this[name]; if (wrapper) { this.removeEventListener(type, wrapper, wrapper.$); delete this[name]; } } function onAdd() { function wrapper(e) { var o = d3.event; d3.event = e; args[0] = node.__data__; try { listener.apply(node, args); } finally { d3.event = o; } } var node = this, args = arguments; onRemove.call(this); this.addEventListener(type, this[name] = wrapper, wrapper.$ = capture); wrapper._ = listener; } var name = "__on" + type, i = type.indexOf("."); if (i > 0) type = type.substring(0, i); return listener ? onAdd : onRemove; } function d3_selection_each(groups, callback) { for (var j = 0, m = groups.length; j < m; j++) { for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { if (node = group[i]) callback(node, i, j); } } return groups; } function d3_selection_enter(selection) { d3_arraySubclass(selection, d3_selection_enterPrototype); return selection; } function d3_transition(groups, id, time) { d3_arraySubclass(groups, d3_transitionPrototype); var tweens = new d3_Map, event = d3.dispatch("start", "end"), ease = d3_transitionEase; groups.id = id; groups.time = time; groups.tween = function(name, tween) { if (arguments.length < 2) return tweens.get(name); if (tween == null) tweens.remove(name); else tweens.set(name, tween); return groups; }; groups.ease = function(value) { if (!arguments.length) return ease; ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments); return groups; }; groups.each = function(type, listener) { if (arguments.length < 2) return d3_transition_each.call(groups, type); event.on(type, listener); return groups; }; d3.timer(function(elapsed) { return d3_selection_each(groups, function(node, i, j) { function start(elapsed) { if (lock.active > id) return stop(); lock.active = id; tweens.forEach(function(key, value) { if (value = value.call(node, d, i)) { tweened.push(value); } }); event.start.call(node, d, i); if (!tick(elapsed)) d3.timer(tick, 0, time); return 1; } function tick(elapsed) { if (lock.active !== id) return stop(); var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length; while (n > 0) { tweened[--n].call(node, e); } if (t >= 1) { stop(); d3_transitionId = id; event.end.call(node, d, i); d3_transitionId = 0; return 1; } } function stop() { if (!--lock.count) delete node.__transition__; return 1; } var tweened = [], delay = node.delay, duration = node.duration, lock = (node = node.node).__transition__ || (node.__transition__ = { active: 0, count: 0 }), d = node.__data__; ++lock.count; delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time); }); }, 0, time); return groups; } function d3_transition_each(callback) { var id = d3_transitionId, ease = d3_transitionEase, delay = d3_transitionDelay, duration = d3_transitionDuration; d3_transitionId = this.id; d3_transitionEase = this.ease(); d3_selection_each(this, function(node, i, j) { d3_transitionDelay = node.delay; d3_transitionDuration = node.duration; callback.call(node = node.node, node.__data__, i, j); }); d3_transitionId = id; d3_transitionEase = ease; d3_transitionDelay = delay; d3_transitionDuration = duration; return this; } function d3_tweenNull(d, i, a) { return a != "" && d3_tweenRemove; } function d3_tweenByName(b, name) { return d3.tween(b, d3_interpolateByName(name)); } function d3_timer_step() { var elapsed, now = Date.now(), t1 = d3_timer_queue; while (t1) { elapsed = now - t1.then; if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed); t1 = t1.next; } var delay = d3_timer_flush() - now; if (delay > 24) { if (isFinite(delay)) { clearTimeout(d3_timer_timeout); d3_timer_timeout = setTimeout(d3_timer_step, delay); } d3_timer_interval = 0; } else { d3_timer_interval = 1; d3_timer_frame(d3_timer_step); } } function d3_timer_flush() { var t0 = null, t1 = d3_timer_queue, then = Infinity; while (t1) { if (t1.flush) { delete d3_timer_byId[t1.callback.id]; t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next; } else { then = Math.min(then, t1.then + t1.delay); t1 = (t0 = t1).next; } } return then; } function d3_mousePoint(container, e) { var svg = container.ownerSVGElement || container; if (svg.createSVGPoint) { var point = svg.createSVGPoint(); if (d3_mouse_bug44083 < 0 && (window.scrollX || window.scrollY)) { svg = d3.select(document.body).append("svg").style("position", "absolute").style("top", 0).style("left", 0); var ctm = svg[0][0].getScreenCTM(); d3_mouse_bug44083 = !(ctm.f || ctm.e); svg.remove(); } if (d3_mouse_bug44083) { point.x = e.pageX; point.y = e.pageY; } else { point.x = e.clientX; point.y = e.clientY; } point = point.matrixTransform(container.getScreenCTM().inverse()); return [ point.x, point.y ]; } var rect = container.getBoundingClientRect(); return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; } function d3_noop() {} function d3_scaleExtent(domain) { var start = domain[0], stop = domain[domain.length - 1]; return start < stop ? [ start, stop ] : [ stop, start ]; } function d3_scaleRange(scale) { return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); } function d3_scale_nice(domain, nice) { var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; if (x1 < x0) { dx = i0, i0 = i1, i1 = dx; dx = x0, x0 = x1, x1 = dx; } if (nice = nice(x1 - x0)) { domain[i0] = nice.floor(x0); domain[i1] = nice.ceil(x1); } return domain; } function d3_scale_niceDefault() { return Math; } function d3_scale_linear(domain, range, interpolate, clamp) { function rescale() { var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; output = linear(domain, range, uninterpolate, interpolate); input = linear(range, domain, uninterpolate, d3.interpolate); return scale; } function scale(x) { return output(x); } var output, input; scale.invert = function(y) { return input(y); }; scale.domain = function(x) { if (!arguments.length) return domain; domain = x.map(Number); return rescale(); }; scale.range = function(x) { if (!arguments.length) return range; range = x; return rescale(); }; scale.rangeRound = function(x) { return scale.range(x).interpolate(d3.interpolateRound); }; scale.clamp = function(x) { if (!arguments.length) return clamp; clamp = x; return rescale(); }; scale.interpolate = function(x) { if (!arguments.length) return interpolate; interpolate = x; return rescale(); }; scale.ticks = function(m) { return d3_scale_linearTicks(domain, m); }; scale.tickFormat = function(m) { return d3_scale_linearTickFormat(domain, m); }; scale.nice = function() { d3_scale_nice(domain, d3_scale_linearNice); return rescale(); }; scale.copy = function() { return d3_scale_linear(domain, range, interpolate, clamp); }; return rescale(); } function d3_scale_linearRebind(scale, linear) { return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); } function d3_scale_linearNice(dx) { dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1); return dx && { floor: function(x) { return Math.floor(x / dx) * dx; }, ceil: function(x) { return Math.ceil(x / dx) * dx; } }; } function d3_scale_linearTickRange(domain, m) { var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; extent[0] = Math.ceil(extent[0] / step) * step; extent[1] = Math.floor(extent[1] / step) * step + step * .5; extent[2] = step; return extent; } function d3_scale_linearTicks(domain, m) { return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); } function d3_scale_linearTickFormat(domain, m) { return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f"); } function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); return function(x) { return i(u(x)); }; } function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; if (domain[k] < domain[0]) { domain = domain.slice().reverse(); range = range.slice().reverse(); } while (++j <= k) { u.push(uninterpolate(domain[j - 1], domain[j])); i.push(interpolate(range[j - 1], range[j])); } return function(x) { var j = d3.bisect(domain, x, 1, k) - 1; return i[j](u[j](x)); }; } function d3_scale_log(linear, log) { function scale(x) { return linear(log(x)); } var pow = log.pow; scale.invert = function(x) { return pow(linear.invert(x)); }; scale.domain = function(x) { if (!arguments.length) return linear.domain().map(pow); log = x[0] < 0 ? d3_scale_logn : d3_scale_logp; pow = log.pow; linear.domain(x.map(log)); return scale; }; scale.nice = function() { linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault)); return scale; }; scale.ticks = function() { var extent = d3_scaleExtent(linear.domain()), ticks = []; if (extent.every(isFinite)) { var i = Math.floor(extent[0]), j = Math.ceil(extent[1]), u = pow(extent[0]), v = pow(extent[1]); if (log === d3_scale_logn) { ticks.push(pow(i)); for (; i++ < j; ) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k); } else { for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k); ticks.push(pow(i)); } for (i = 0; ticks[i] < u; i++) {} for (j = ticks.length; ticks[j - 1] > v; j--) {} ticks = ticks.slice(i, j); } return ticks; }; scale.tickFormat = function(n, format) { if (arguments.length < 2) format = d3_scale_logFormat; if (arguments.length < 1) return format; var k = Math.max(.1, n / scale.ticks().length), f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil), e; return function(d) { return d / pow(f(log(d) + e)) <= k ? format(d) : ""; }; }; scale.copy = function() { return d3_scale_log(linear.copy(), log); }; return d3_scale_linearRebind(scale, linear); } function d3_scale_logp(x) { return Math.log(x < 0 ? 0 : x) / Math.LN10; } function d3_scale_logn(x) { return -Math.log(x > 0 ? 0 : -x) / Math.LN10; } function d3_scale_pow(linear, exponent) { function scale(x) { return linear(powp(x)); } var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); scale.invert = function(x) { return powb(linear.invert(x)); }; scale.domain = function(x) { if (!arguments.length) return linear.domain().map(powb); linear.domain(x.map(powp)); return scale; }; scale.ticks = function(m) { return d3_scale_linearTicks(scale.domain(), m); }; scale.tickFormat = function(m) { return d3_scale_linearTickFormat(scale.domain(), m); }; scale.nice = function() { return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice)); }; scale.exponent = function(x) { if (!arguments.length) return exponent; var domain = scale.domain(); powp = d3_scale_powPow(exponent = x); powb = d3_scale_powPow(1 / exponent); return scale.domain(domain); }; scale.copy = function() { return d3_scale_pow(linear.copy(), exponent); }; return d3_scale_linearRebind(scale, linear); } function d3_scale_powPow(e) { return function(x) { return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); }; } function d3_scale_ordinal(domain, ranger) { function scale(x) { return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length]; } function steps(start, step) { return d3.range(domain.length).map(function(i) { return start + step * i; }); } var index, range, rangeBand; scale.domain = function(x) { if (!arguments.length) return domain; domain = []; index = new d3_Map; var i = -1, n = x.length, xi; while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); return scale[ranger.t].apply(scale, ranger.a); }; scale.range = function(x) { if (!arguments.length) return range; range = x; rangeBand = 0; ranger = { t: "range", a: arguments }; return scale; }; scale.rangePoints = function(x, padding) { if (arguments.length < 2) padding = 0; var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding); range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); rangeBand = 0; ranger = { t: "rangePoints", a: arguments }; return scale; }; scale.rangeBands = function(x, padding, outerPadding) { if (arguments.length < 2) padding = 0; if (arguments.length < 3) outerPadding = padding; var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); range = steps(start + step * outerPadding, step); if (reverse) range.reverse(); rangeBand = step * (1 - padding); ranger = { t: "rangeBands", a: arguments }; return scale; }; scale.rangeRoundBands = function(x, padding, outerPadding) { if (arguments.length < 2) padding = 0; if (arguments.length < 3) outerPadding = padding; var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step; range = steps(start + Math.round(error / 2), step); if (reverse) range.reverse(); rangeBand = Math.round(step * (1 - padding)); ranger = { t: "rangeRoundBands", a: arguments }; return scale; }; scale.rangeBand = function() { return rangeBand; }; scale.rangeExtent = function() { return d3_scaleExtent(ranger.a[0]); }; scale.copy = function() { return d3_scale_ordinal(domain, ranger); }; return scale.domain(domain); } function d3_scale_quantile(domain, range) { function rescale() { var k = 0, n = domain.length, q = range.length; thresholds = []; while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); return scale; } function scale(x) { if (isNaN(x = +x)) return NaN; return range[d3.bisect(thresholds, x)]; } var thresholds; scale.domain = function(x) { if (!arguments.length) return domain; domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending); return rescale(); }; scale.range = function(x) { if (!arguments.length) return range; range = x; return rescale(); }; scale.quantiles = function() { return thresholds; }; scale.copy = function() { return d3_scale_quantile(domain, range); }; return rescale(); } function d3_scale_quantize(x0, x1, range) { function scale(x) { return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; } function rescale() { kx = range.length / (x1 - x0); i = range.length - 1; return scale; } var kx, i; scale.domain = function(x) { if (!arguments.length) return [ x0, x1 ]; x0 = +x[0]; x1 = +x[x.length - 1]; return rescale(); }; scale.range = function(x) { if (!arguments.length) return range; range = x; return rescale(); }; scale.copy = function() { return d3_scale_quantize(x0, x1, range); }; return rescale(); } function d3_scale_threshold(domain, range) { function scale(x) { return range[d3.bisect(domain, x)]; } scale.domain = function(_) { if (!arguments.length) return domain; domain = _; return scale; }; scale.range = function(_) { if (!arguments.length) return range; range = _; return scale; }; scale.copy = function() { return d3_scale_threshold(domain, range); }; return scale; } function d3_scale_identity(domain) { function identity(x) { return +x; } identity.invert = identity; identity.domain = identity.range = function(x) { if (!arguments.length) return domain; domain = x.map(identity); return identity; }; identity.ticks = function(m) { return d3_scale_linearTicks(domain, m); }; identity.tickFormat = function(m) { return d3_scale_linearTickFormat(domain, m); }; identity.copy = function() { return d3_scale_identity(domain); }; return identity; } function d3_svg_arcInnerRadius(d) { return d.innerRadius; } function d3_svg_arcOuterRadius(d) { return d.outerRadius; } function d3_svg_arcStartAngle(d) { return d.startAngle; } function d3_svg_arcEndAngle(d) { return d.endAngle; } function d3_svg_line(projection) { function line(data) { function segment() { segments.push("M", interpolate(projection(points), tension)); } var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); while (++i < n) { if (defined.call(this, d = data[i], i)) { points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); } else if (points.length) { segment(); points = []; } } if (points.length) segment(); return segments.length ? segments.join("") : null; } var x = d3_svg_lineX, y = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; line.x = function(_) { if (!arguments.length) return x; x = _; return line; }; line.y = function(_) { if (!arguments.length) return y; y = _; return line; }; line.defined = function(_) { if (!arguments.length) return defined; defined = _; return line; }; line.interpolate = function(_) { if (!arguments.length) return interpolateKey; if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; return line; }; line.tension = function(_) { if (!arguments.length) return tension; tension = _; return line; }; return line; } function d3_svg_lineX(d) { return d[0]; } function d3_svg_lineY(d) { return d[1]; } function d3_svg_lineLinear(points) { return points.join("L"); } function d3_svg_lineLinearClosed(points) { return d3_svg_lineLinear(points) + "Z"; } function d3_svg_lineStepBefore(points) { var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); return path.join(""); } function d3_svg_lineStepAfter(points) { var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); return path.join(""); } function d3_svg_lineCardinalOpen(points, tension) { return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension)); } function d3_svg_lineCardinalClosed(points, tension) { return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); } function d3_svg_lineCardinal(points, tension, closed) { return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); } function d3_svg_lineHermite(points, tangents) { if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { return d3_svg_lineLinear(points); } var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; if (quad) { path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; p0 = points[1]; pi = 2; } if (tangents.length > 1) { t = tangents[1]; p = points[pi]; pi++; path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; for (var i = 2; i < tangents.length; i++, pi++) { p = points[pi]; t = tangents[i]; path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; } } if (quad) { var lp = points[pi]; path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; } return path; } function d3_svg_lineCardinalTangents(points, tension) { var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; while (++i < n) { p0 = p1; p1 = p2; p2 = points[i]; tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); } return tangents; } function d3_svg_lineBasis(points) { if (points.length < 3) return d3_svg_lineLinear(points); var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0 ]; d3_svg_lineBasisBezier(path, px, py); while (++i < n) { pi = points[i]; px.shift(); px.push(pi[0]); py.shift(); py.push(pi[1]); d3_svg_lineBasisBezier(path, px, py); } i = -1; while (++i < 2) { px.shift(); px.push(pi[0]); py.shift(); py.push(pi[1]); d3_svg_lineBasisBezier(path, px, py); } return path.join(""); } function d3_svg_lineBasisOpen(points) { if (points.length < 4) return d3_svg_lineLinear(points); var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; while (++i < 3) { pi = points[i]; px.push(pi[0]); py.push(pi[1]); } path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); --i; while (++i < n) { pi = points[i]; px.shift(); px.push(pi[0]); py.shift(); py.push(pi[1]); d3_svg_lineBasisBezier(path, px, py); } return path.join(""); } function d3_svg_lineBasisClosed(points) { var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; while (++i < 4) { pi = points[i % n]; px.push(pi[0]); py.push(pi[1]); } path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; --i; while (++i < m) { pi = points[i % n]; px.shift(); px.push(pi[0]); py.shift(); py.push(pi[1]); d3_svg_lineBasisBezier(path, px, py); } return path.join(""); } function d3_svg_lineBundle(points, tension) { var n = points.length - 1; if (n) { var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; while (++i <= n) { p = points[i]; t = i / n; p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); } } return d3_svg_lineBasis(points); } function d3_svg_lineDot4(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; } function d3_svg_lineBasisBezier(path, x, y) { path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); } function d3_svg_lineSlope(p0, p1) { return (p1[1] - p0[1]) / (p1[0] - p0[0]); } function d3_svg_lineFiniteDifferences(points) { var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); while (++i < j) { m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; } m[i] = d; return m; } function d3_svg_lineMonotoneTangents(points) { var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; while (++i < j) { d = d3_svg_lineSlope(points[i], points[i + 1]); if (Math.abs(d) < 1e-6) { m[i] = m[i + 1] = 0; } else { a = m[i] / d; b = m[i + 1] / d; s = a * a + b * b; if (s > 9) { s = d * 3 / Math.sqrt(s); m[i] = s * a; m[i + 1] = s * b; } } } i = -1; while (++i <= j) { s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); tangents.push([ s || 0, m[i] * s || 0 ]); } return tangents; } function d3_svg_lineMonotone(points) { return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); } function d3_svg_lineRadial(points) { var point, i = -1, n = points.length, r, a; while (++i < n) { point = points[i]; r = point[0]; a = point[1] + d3_svg_arcOffset; point[0] = r * Math.cos(a); point[1] = r * Math.sin(a); } return points; } function d3_svg_area(projection) { function area(data) { function segment() { segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); } var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { return x; } : d3_functor(x1), fy1 = y0 === y1 ? function() { return y; } : d3_functor(y1), x, y; while (++i < n) { if (defined.call(this, d = data[i], i)) { points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); } else if (points0.length) { segment(); points0 = []; points1 = []; } } if (points0.length) segment(); return segments.length ? segments.join("") : null; } var x0 = d3_svg_lineX, x1 = d3_svg_lineX, y0 = 0, y1 = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; area.x = function(_) { if (!arguments.length) return x1; x0 = x1 = _; return area; }; area.x0 = function(_) { if (!arguments.length) return x0; x0 = _; return area; }; area.x1 = function(_) { if (!arguments.length) return x1; x1 = _; return area; }; area.y = function(_) { if (!arguments.length) return y1; y0 = y1 = _; return area; }; area.y0 = function(_) { if (!arguments.length) return y0; y0 = _; return area; }; area.y1 = function(_) { if (!arguments.length) return y1; y1 = _; return area; }; area.defined = function(_) { if (!arguments.length) return defined; defined = _; return area; }; area.interpolate = function(_) { if (!arguments.length) return interpolateKey; if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; interpolateReverse = interpolate.reverse || interpolate; L = interpolate.closed ? "M" : "L"; return area; }; area.tension = function(_) { if (!arguments.length) return tension; tension = _; return area; }; return area; } function d3_svg_chordSource(d) { return d.source; } function d3_svg_chordTarget(d) { return d.target; } function d3_svg_chordRadius(d) { return d.radius; } function d3_svg_chordStartAngle(d) { return d.startAngle; } function d3_svg_chordEndAngle(d) { return d.endAngle; } function d3_svg_diagonalProjection(d) { return [ d.x, d.y ]; } function d3_svg_diagonalRadialProjection(projection) { return function() { var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset; return [ r * Math.cos(a), r * Math.sin(a) ]; }; } function d3_svg_symbolSize() { return 64; } function d3_svg_symbolType() { return "circle"; } function d3_svg_symbolCircle(size) { var r = Math.sqrt(size / Math.PI); return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; } function d3_svg_axisX(selection, x) { selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; }); } function d3_svg_axisY(selection, y) { selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; }); } function d3_svg_axisSubdivide(scale, ticks, m) { subticks = []; if (m && ticks.length > 1) { var extent = d3_scaleExtent(scale.domain()), subticks, i = -1, n = ticks.length, d = (ticks[1] - ticks[0]) / ++m, j, v; while (++i < n) { for (j = m; --j > 0; ) { if ((v = +ticks[i] - j * d) >= extent[0]) { subticks.push(v); } } } for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1]; ) { subticks.push(v); } } return subticks; } function d3_behavior_zoomDelta() { if (!d3_behavior_zoomDiv) { d3_behavior_zoomDiv = d3.select("body").append("div").style("visibility", "hidden").style("top", 0).style("height", 0).style("width", 0).style("overflow-y", "scroll").append("div").style("height", "2000px").node().parentNode; } var e = d3.event, delta; try { d3_behavior_zoomDiv.scrollTop = 1e3; d3_behavior_zoomDiv.dispatchEvent(e); delta = 1e3 - d3_behavior_zoomDiv.scrollTop; } catch (error) { delta = e.wheelDelta || -e.detail * 5; } return delta; } function d3_layout_bundlePath(link) { var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; while (start !== lca) { start = start.parent; points.push(start); } var k = points.length; while (end !== lca) { points.splice(k, 0, end); end = end.parent; } return points; } function d3_layout_bundleAncestors(node) { var ancestors = [], parent = node.parent; while (parent != null) { ancestors.push(node); node = parent; parent = parent.parent; } ancestors.push(node); return ancestors; } function d3_layout_bundleLeastCommonAncestor(a, b) { if (a === b) return a; var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; while (aNode === bNode) { sharedNode = aNode; aNode = aNodes.pop(); bNode = bNodes.pop(); } return sharedNode; } function d3_layout_forceDragstart(d) { d.fixed |= 2; } function d3_layout_forceDragend(d) { d.fixed &= 1; } function d3_layout_forceMouseover(d) { d.fixed |= 4; } function d3_layout_forceMouseout(d) { d.fixed &= 3; } function d3_layout_forceAccumulate(quad, alpha, charges) { var cx = 0, cy = 0; quad.charge = 0; if (!quad.leaf) { var nodes = quad.nodes, n = nodes.length, i = -1, c; while (++i < n) { c = nodes[i]; if (c == null) continue; d3_layout_forceAccumulate(c, alpha, charges); quad.charge += c.charge; cx += c.charge * c.cx; cy += c.charge * c.cy; } } if (quad.point) { if (!quad.leaf) { quad.point.x += Math.random() - .5; quad.point.y += Math.random() - .5; } var k = alpha * charges[quad.point.index]; quad.charge += quad.pointCharge = k; cx += k * quad.point.x; cy += k * quad.point.y; } quad.cx = cx / quad.charge; quad.cy = cy / quad.charge; } function d3_layout_forceLinkDistance(link) { return 20; } function d3_layout_forceLinkStrength(link) { return 1; } function d3_layout_stackX(d) { return d.x; } function d3_layout_stackY(d) { return d.y; } function d3_layout_stackOut(d, y0, y) { d.y0 = y0; d.y = y; } function d3_layout_stackOrderDefault(data) { return d3.range(data.length); } function d3_layout_stackOffsetZero(data) { var j = -1, m = data[0].length, y0 = []; while (++j < m) y0[j] = 0; return y0; } function d3_layout_stackMaxIndex(array) { var i = 1, j = 0, v = array[0][1], k, n = array.length; for (; i < n; ++i) { if ((k = array[i][1]) > v) { j = i; v = k; } } return j; } function d3_layout_stackReduceSum(d) { return d.reduce(d3_layout_stackSum, 0); } function d3_layout_stackSum(p, d) { return p + d[1]; } function d3_layout_histogramBinSturges(range, values) { return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); } function d3_layout_histogramBinFixed(range, n) { var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; while (++x <= n) f[x] = m * x + b; return f; } function d3_layout_histogramRange(values) { return [ d3.min(values), d3.max(values) ]; } function d3_layout_hierarchyRebind(object, hierarchy) { d3.rebind(object, hierarchy, "sort", "children", "value"); object.links = d3_layout_hierarchyLinks; object.nodes = function(d) { d3_layout_hierarchyInline = true; return (object.nodes = object)(d); }; return object; } function d3_layout_hierarchyChildren(d) { return d.children; } function d3_layout_hierarchyValue(d) { return d.value; } function d3_layout_hierarchySort(a, b) { return b.value - a.value; } function d3_layout_hierarchyLinks(nodes) { return d3.merge(nodes.map(function(parent) { return (parent.children || []).map(function(child) { return { source: parent, target: child }; }); })); } function d3_layout_packSort(a, b) { return a.value - b.value; } function d3_layout_packInsert(a, b) { var c = a._pack_next; a._pack_next = b; b._pack_prev = a; b._pack_next = c; c._pack_prev = b; } function d3_layout_packSplice(a, b) { a._pack_next = b; b._pack_prev = a; } function d3_layout_packIntersects(a, b) { var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; return dr * dr - dx * dx - dy * dy > .001; } function d3_layout_packSiblings(node) { function bound(node) { xMin = Math.min(node.x - node.r, xMin); xMax = Math.max(node.x + node.r, xMax); yMin = Math.min(node.y - node.r, yMin); yMax = Math.max(node.y + node.r, yMax); } if (!(nodes = node.children) || !(n = nodes.length)) return; var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; nodes.forEach(d3_layout_packLink); a = nodes[0]; a.x = -a.r; a.y = 0; bound(a); if (n > 1) { b = nodes[1]; b.x = b.r; b.y = 0; bound(b); if (n > 2) { c = nodes[2]; d3_layout_packPlace(a, b, c); bound(c); d3_layout_packInsert(a, c); a._pack_prev = c; d3_layout_packInsert(c, b); b = a._pack_next; for (i = 3; i < n; i++) { d3_layout_packPlace(a, b, c = nodes[i]); var isect = 0, s1 = 1, s2 = 1; for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { if (d3_layout_packIntersects(j, c)) { isect = 1; break; } } if (isect == 1) { for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { if (d3_layout_packIntersects(k, c)) { break; } } } if (isect) { if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); i--; } else { d3_layout_packInsert(a, c); b = c; bound(c); } } } } var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; for (i = 0; i < n; i++) { c = nodes[i]; c.x -= cx; c.y -= cy; cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); } node.r = cr; nodes.forEach(d3_layout_packUnlink); } function d3_layout_packLink(node) { node._pack_next = node._pack_prev = node; } function d3_layout_packUnlink(node) { delete node._pack_next; delete node._pack_prev; } function d3_layout_packTransform(node, x, y, k) { var children = node.children; node.x = x += k * node.x; node.y = y += k * node.y; node.r *= k; if (children) { var i = -1, n = children.length; while (++i < n) d3_layout_packTransform(children[i], x, y, k); } } function d3_layout_packPlace(a, b, c) { var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; if (db && (dx || dy)) { var da = b.r + c.r, dc = dx * dx + dy * dy; da *= da; db *= db; var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); c.x = a.x + x * dx + y * dy; c.y = a.y + x * dy - y * dx; } else { c.x = a.x + db; c.y = a.y; } } function d3_layout_clusterY(children) { return 1 + d3.max(children, function(child) { return child.y; }); } function d3_layout_clusterX(children) { return children.reduce(function(x, child) { return x + child.x; }, 0) / children.length; } function d3_layout_clusterLeft(node) { var children = node.children; return children && children.length ? d3_layout_clusterLeft(children[0]) : node; } function d3_layout_clusterRight(node) { var children = node.children, n; return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; } function d3_layout_treeSeparation(a, b) { return a.parent == b.parent ? 1 : 2; } function d3_layout_treeLeft(node) { var children = node.children; return children && children.length ? children[0] : node._tree.thread; } function d3_layout_treeRight(node) { var children = node.children, n; return children && (n = children.length) ? children[n - 1] : node._tree.thread; } function d3_layout_treeSearch(node, compare) { var children = node.children; if (children && (n = children.length)) { var child, n, i = -1; while (++i < n) { if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) { node = child; } } } return node; } function d3_layout_treeRightmost(a, b) { return a.x - b.x; } function d3_layout_treeLeftmost(a, b) { return b.x - a.x; } function d3_layout_treeDeepest(a, b) { return a.depth - b.depth; } function d3_layout_treeVisitAfter(node, callback) { function visit(node, previousSibling) { var children = node.children; if (children && (n = children.length)) { var child, previousChild = null, i = -1, n; while (++i < n) { child = children[i]; visit(child, previousChild); previousChild = child; } } callback(node, previousSibling); } visit(node, null); } function d3_layout_treeShift(node) { var shift = 0, change = 0, children = node.children, i = children.length, child; while (--i >= 0) { child = children[i]._tree; child.prelim += shift; child.mod += shift; shift += child.shift + (change += child.change); } } function d3_layout_treeMove(ancestor, node, shift) { ancestor = ancestor._tree; node = node._tree; var change = shift / (node.number - ancestor.number); ancestor.change += change; node.change -= change; node.shift += shift; node.prelim += shift; node.mod += shift; } function d3_layout_treeAncestor(vim, node, ancestor) { return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor; } function d3_layout_treemapPadNull(node) { return { x: node.x, y: node.y, dx: node.dx, dy: node.dy }; } function d3_layout_treemapPad(node, padding) { var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; if (dx < 0) { x += dx / 2; dx = 0; } if (dy < 0) { y += dy / 2; dy = 0; } return { x: x, y: y, dx: dx, dy: dy }; } function d3_dsv(delimiter, mimeType) { function dsv(url, callback) { d3.text(url, mimeType, function(text) { callback(text && dsv.parse(text)); }); } function formatRow(row) { return row.map(formatValue).join(delimiter); } function formatValue(text) { return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; } var reParse = new RegExp("\r\n|[" + delimiter + "\r\n]", "g"), reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); dsv.parse = function(text) { var header; return dsv.parseRows(text, function(row, i) { if (i) { var o = {}, j = -1, m = header.length; while (++j < m) o[header[j]] = row[j]; return o; } else { header = row; return null; } }); }; dsv.parseRows = function(text, f) { function token() { if (reParse.lastIndex >= text.length) return EOF; if (eol) { eol = false; return EOL; } var j = reParse.lastIndex; if (text.charCodeAt(j) === 34) { var i = j; while (i++ < text.length) { if (text.charCodeAt(i) === 34) { if (text.charCodeAt(i + 1) !== 34) break; i++; } } reParse.lastIndex = i + 2; var c = text.charCodeAt(i + 1); if (c === 13) { eol = true; if (text.charCodeAt(i + 2) === 10) reParse.lastIndex++; } else if (c === 10) { eol = true; } return text.substring(j + 1, i).replace(/""/g, '"'); } var m = reParse.exec(text); if (m) { eol = m[0].charCodeAt(0) !== delimiterCode; return text.substring(j, m.index); } reParse.lastIndex = text.length; return text.substring(j); } var EOL = {}, EOF = {}, rows = [], n = 0, t, eol; reParse.lastIndex = 0; while ((t = token()) !== EOF) { var a = []; while (t !== EOL && t !== EOF) { a.push(t); t = token(); } if (f && !(a = f(a, n++))) continue; rows.push(a); } return rows; }; dsv.format = function(rows) { return rows.map(formatRow).join("\n"); }; return dsv; } function d3_geo_type(types, defaultValue) { return function(object) { return object && types.hasOwnProperty(object.type) ? types[object.type](object) : defaultValue; }; } function d3_path_circle(radius) { return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + +2 * radius + "z"; } function d3_geo_bounds(o, f) { if (d3_geo_boundsTypes.hasOwnProperty(o.type)) d3_geo_boundsTypes[o.type](o, f); } function d3_geo_boundsFeature(o, f) { d3_geo_bounds(o.geometry, f); } function d3_geo_boundsFeatureCollection(o, f) { for (var a = o.features, i = 0, n = a.length; i < n; i++) { d3_geo_bounds(a[i].geometry, f); } } function d3_geo_boundsGeometryCollection(o, f) { for (var a = o.geometries, i = 0, n = a.length; i < n; i++) { d3_geo_bounds(a[i], f); } } function d3_geo_boundsLineString(o, f) { for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { f.apply(null, a[i]); } } function d3_geo_boundsMultiLineString(o, f) { for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { for (var b = a[i], j = 0, m = b.length; j < m; j++) { f.apply(null, b[j]); } } } function d3_geo_boundsMultiPolygon(o, f) { for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { for (var b = a[i][0], j = 0, m = b.length; j < m; j++) { f.apply(null, b[j]); } } } function d3_geo_boundsPoint(o, f) { f.apply(null, o.coordinates); } function d3_geo_boundsPolygon(o, f) { for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) { f.apply(null, a[i]); } } function d3_geo_greatArcSource(d) { return d.source; } function d3_geo_greatArcTarget(d) { return d.target; } function d3_geo_greatArcInterpolator() { function interpolate(t) { var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; return [ Math.atan2(y, x) / d3_geo_radians, Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians ]; } var x0, y0, cy0, sy0, kx0, ky0, x1, y1, cy1, sy1, kx1, ky1, d, k; interpolate.distance = function() { if (d == null) k = 1 / Math.sin(d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0))))); return d; }; interpolate.source = function(_) { var cx0 = Math.cos(x0 = _[0] * d3_geo_radians), sx0 = Math.sin(x0); cy0 = Math.cos(y0 = _[1] * d3_geo_radians); sy0 = Math.sin(y0); kx0 = cy0 * cx0; ky0 = cy0 * sx0; d = null; return interpolate; }; interpolate.target = function(_) { var cx1 = Math.cos(x1 = _[0] * d3_geo_radians), sx1 = Math.sin(x1); cy1 = Math.cos(y1 = _[1] * d3_geo_radians); sy1 = Math.sin(y1); kx1 = cy1 * cx1; ky1 = cy1 * sx1; d = null; return interpolate; }; return interpolate; } function d3_geo_greatArcInterpolate(a, b) { var i = d3_geo_greatArcInterpolator().source(a).target(b); i.distance(); return i; } function d3_geom_contourStart(grid) { var x = 0, y = 0; while (true) { if (grid(x, y)) { return [ x, y ]; } if (x === 0) { x = y + 1; y = 0; } else { x = x - 1; y = y + 1; } } } function d3_geom_hullCCW(i1, i2, i3, v) { var t, a, b, c, d, e, f; t = v[i1]; a = t[0]; b = t[1]; t = v[i2]; c = t[0]; d = t[1]; t = v[i3]; e = t[0]; f = t[1]; return (f - b) * (c - a) - (d - b) * (e - a) > 0; } function d3_geom_polygonInside(p, a, b) { return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); } function d3_geom_polygonIntersect(c, d, a, b) { var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0], y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1], x13 = x1 - x3, x21 = x2 - x1, x43 = x4 - x3, y13 = y1 - y3, y21 = y2 - y1, y43 = y4 - y3, ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21); return [ x1 + ua * x21, y1 + ua * y21 ]; } function d3_voronoi_tessellate(vertices, callback) { var Sites = { list: vertices.map(function(v, i) { return { index: i, x: v[0], y: v[1] }; }).sort(function(a, b) { return a.y < b.y ? -1 : a.y > b.y ? 1 : a.x < b.x ? -1 : a.x > b.x ? 1 : 0; }), bottomSite: null }; var EdgeList = { list: [], leftEnd: null, rightEnd: null, init: function() { EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l"); EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l"); EdgeList.leftEnd.r = EdgeList.rightEnd; EdgeList.rightEnd.l = EdgeList.leftEnd; EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd); }, createHalfEdge: function(edge, side) { return { edge: edge, side: side, vertex: null, l: null, r: null }; }, insert: function(lb, he) { he.l = lb; he.r = lb.r; lb.r.l = he; lb.r = he; }, leftBound: function(p) { var he = EdgeList.leftEnd; do { he = he.r; } while (he != EdgeList.rightEnd && Geom.rightOf(he, p)); he = he.l; return he; }, del: function(he) { he.l.r = he.r; he.r.l = he.l; he.edge = null; }, right: function(he) { return he.r; }, left: function(he) { return he.l; }, leftRegion: function(he) { return he.edge == null ? Sites.bottomSite : he.edge.region[he.side]; }, rightRegion: function(he) { return he.edge == null ? Sites.bottomSite : he.edge.region[d3_voronoi_opposite[he.side]]; } }; var Geom = { bisect: function(s1, s2) { var newEdge = { region: { l: s1, r: s2 }, ep: { l: null, r: null } }; var dx = s2.x - s1.x, dy = s2.y - s1.y, adx = dx > 0 ? dx : -dx, ady = dy > 0 ? dy : -dy; newEdge.c = s1.x * dx + s1.y * dy + (dx * dx + dy * dy) * .5; if (adx > ady) { newEdge.a = 1; newEdge.b = dy / dx; newEdge.c /= dx; } else { newEdge.b = 1; newEdge.a = dx / dy; newEdge.c /= dy; } return newEdge; }, intersect: function(el1, el2) { var e1 = el1.edge, e2 = el2.edge; if (!e1 || !e2 || e1.region.r == e2.region.r) { return null; } var d = e1.a * e2.b - e1.b * e2.a; if (Math.abs(d) < 1e-10) { return null; } var xint = (e1.c * e2.b - e2.c * e1.b) / d, yint = (e2.c * e1.a - e1.c * e2.a) / d, e1r = e1.region.r, e2r = e2.region.r, el, e; if (e1r.y < e2r.y || e1r.y == e2r.y && e1r.x < e2r.x) { el = el1; e = e1; } else { el = el2; e = e2; } var rightOfSite = xint >= e.region.r.x; if (rightOfSite && el.side === "l" || !rightOfSite && el.side === "r") { return null; } return { x: xint, y: yint }; }, rightOf: function(he, p) { var e = he.edge, topsite = e.region.r, rightOfSite = p.x > topsite.x; if (rightOfSite && he.side === "l") { return 1; } if (!rightOfSite && he.side === "r") { return 0; } if (e.a === 1) { var dyp = p.y - topsite.y, dxp = p.x - topsite.x, fast = 0, above = 0; if (!rightOfSite && e.b < 0 || rightOfSite && e.b >= 0) { above = fast = dyp >= e.b * dxp; } else { above = p.x + p.y * e.b > e.c; if (e.b < 0) { above = !above; } if (!above) { fast = 1; } } if (!fast) { var dxs = topsite.x - e.region.l.x; above = e.b * (dxp * dxp - dyp * dyp) < dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b); if (e.b < 0) { above = !above; } } } else { var yl = e.c - e.a * p.x, t1 = p.y - yl, t2 = p.x - topsite.x, t3 = yl - topsite.y; above = t1 * t1 > t2 * t2 + t3 * t3; } return he.side === "l" ? above : !above; }, endPoint: function(edge, side, site) { edge.ep[side] = site; if (!edge.ep[d3_voronoi_opposite[side]]) return; callback(edge); }, distance: function(s, t) { var dx = s.x - t.x, dy = s.y - t.y; return Math.sqrt(dx * dx + dy * dy); } }; var EventQueue = { list: [], insert: function(he, site, offset) { he.vertex = site; he.ystar = site.y + offset; for (var i = 0, list = EventQueue.list, l = list.length; i < l; i++) { var next = list[i]; if (he.ystar > next.ystar || he.ystar == next.ystar && site.x > next.vertex.x) { continue; } else { break; } } list.splice(i, 0, he); }, del: function(he) { for (var i = 0, ls = EventQueue.list, l = ls.length; i < l && ls[i] != he; ++i) {} ls.splice(i, 1); }, empty: function() { return EventQueue.list.length === 0; }, nextEvent: function(he) { for (var i = 0, ls = EventQueue.list, l = ls.length; i < l; ++i) { if (ls[i] == he) return ls[i + 1]; } return null; }, min: function() { var elem = EventQueue.list[0]; return { x: elem.vertex.x, y: elem.ystar }; }, extractMin: function() { return EventQueue.list.shift(); } }; EdgeList.init(); Sites.bottomSite = Sites.list.shift(); var newSite = Sites.list.shift(), newIntStar; var lbnd, rbnd, llbnd, rrbnd, bisector; var bot, top, temp, p, v; var e, pm; while (true) { if (!EventQueue.empty()) { newIntStar = EventQueue.min(); } if (newSite && (EventQueue.empty() || newSite.y < newIntStar.y || newSite.y == newIntStar.y && newSite.x < newIntStar.x)) { lbnd = EdgeList.leftBound(newSite); rbnd = EdgeList.right(lbnd); bot = EdgeList.rightRegion(lbnd); e = Geom.bisect(bot, newSite); bisector = EdgeList.createHalfEdge(e, "l"); EdgeList.insert(lbnd, bisector); p = Geom.intersect(lbnd, bisector); if (p) { EventQueue.del(lbnd); EventQueue.insert(lbnd, p, Geom.distance(p, newSite)); } lbnd = bisector; bisector = EdgeList.createHalfEdge(e, "r"); EdgeList.insert(lbnd, bisector); p = Geom.intersect(bisector, rbnd); if (p) { EventQueue.insert(bisector, p, Geom.distance(p, newSite)); } newSite = Sites.list.shift(); } else if (!EventQueue.empty()) { lbnd = EventQueue.extractMin(); llbnd = EdgeList.left(lbnd); rbnd = EdgeList.right(lbnd); rrbnd = EdgeList.right(rbnd); bot = EdgeList.leftRegion(lbnd); top = EdgeList.rightRegion(rbnd); v = lbnd.vertex; Geom.endPoint(lbnd.edge, lbnd.side, v); Geom.endPoint(rbnd.edge, rbnd.side, v); EdgeList.del(lbnd); EventQueue.del(rbnd); EdgeList.del(rbnd); pm = "l"; if (bot.y > top.y) { temp = bot; bot = top; top = temp; pm = "r"; } e = Geom.bisect(bot, top); bisector = EdgeList.createHalfEdge(e, pm); EdgeList.insert(llbnd, bisector); Geom.endPoint(e, d3_voronoi_opposite[pm], v); p = Geom.intersect(llbnd, bisector); if (p) { EventQueue.del(llbnd); EventQueue.insert(llbnd, p, Geom.distance(p, bot)); } p = Geom.intersect(bisector, rrbnd); if (p) { EventQueue.insert(bisector, p, Geom.distance(p, bot)); } } else { break; } } for (lbnd = EdgeList.right(EdgeList.leftEnd); lbnd != EdgeList.rightEnd; lbnd = EdgeList.right(lbnd)) { callback(lbnd.edge); } } function d3_geom_quadtreeNode() { return { leaf: true, nodes: [], point: null }; } function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { if (!f(node, x1, y1, x2, y2)) { var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); } } function d3_geom_quadtreePoint(p) { return { x: p[0], y: p[1] }; } function d3_time_utc() { this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); } function d3_time_formatAbbreviate(name) { return name.substring(0, 3); } function d3_time_parse(date, template, string, j) { var c, p, i = 0, n = template.length, m = string.length; while (i < n) { if (j >= m) return -1; c = template.charCodeAt(i++); if (c == 37) { p = d3_time_parsers[template.charAt(i++)]; if (!p || (j = p(date, string, j)) < 0) return -1; } else if (c != string.charCodeAt(j++)) { return -1; } } return j; } function d3_time_formatRe(names) { return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); } function d3_time_formatLookup(names) { var map = new d3_Map, i = -1, n = names.length; while (++i < n) map.set(names[i].toLowerCase(), i); return map; } function d3_time_parseWeekdayAbbrev(date, string, i) { d3_time_dayAbbrevRe.lastIndex = 0; var n = d3_time_dayAbbrevRe.exec(string.substring(i)); return n ? i += n[0].length : -1; } function d3_time_parseWeekday(date, string, i) { d3_time_dayRe.lastIndex = 0; var n = d3_time_dayRe.exec(string.substring(i)); return n ? i += n[0].length : -1; } function d3_time_parseMonthAbbrev(date, string, i) { d3_time_monthAbbrevRe.lastIndex = 0; var n = d3_time_monthAbbrevRe.exec(string.substring(i)); return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i += n[0].length) : -1; } function d3_time_parseMonth(date, string, i) { d3_time_monthRe.lastIndex = 0; var n = d3_time_monthRe.exec(string.substring(i)); return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i += n[0].length) : -1; } function d3_time_parseLocaleFull(date, string, i) { return d3_time_parse(date, d3_time_formats.c.toString(), string, i); } function d3_time_parseLocaleDate(date, string, i) { return d3_time_parse(date, d3_time_formats.x.toString(), string, i); } function d3_time_parseLocaleTime(date, string, i) { return d3_time_parse(date, d3_time_formats.X.toString(), string, i); } function d3_time_parseFullYear(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 4)); return n ? (date.y = +n[0], i += n[0].length) : -1; } function d3_time_parseYear(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.y = d3_time_expandYear(+n[0]), i += n[0].length) : -1; } function d3_time_expandYear(d) { return d + (d > 68 ? 1900 : 2e3); } function d3_time_parseMonthNumber(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.m = n[0] - 1, i += n[0].length) : -1; } function d3_time_parseDay(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.d = +n[0], i += n[0].length) : -1; } function d3_time_parseHour24(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.H = +n[0], i += n[0].length) : -1; } function d3_time_parseMinutes(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.M = +n[0], i += n[0].length) : -1; } function d3_time_parseSeconds(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.S = +n[0], i += n[0].length) : -1; } function d3_time_parseMilliseconds(date, string, i) { d3_time_numberRe.lastIndex = 0; var n = d3_time_numberRe.exec(string.substring(i, i + 3)); return n ? (date.L = +n[0], i += n[0].length) : -1; } function d3_time_parseAmPm(date, string, i) { var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase()); return n == null ? -1 : (date.p = n, i); } function d3_time_zone(d) { var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(Math.abs(z) / 60), zm = Math.abs(z) % 60; return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm); } function d3_time_formatIsoNative(date) { return date.toISOString(); } function d3_time_interval(local, step, number) { function round(date) { var d0 = local(date), d1 = offset(d0, 1); return date - d0 < d1 - date ? d0 : d1; } function ceil(date) { step(date = local(new d3_time(date - 1)), 1); return date; } function offset(date, k) { step(date = new d3_time(+date), k); return date; } function range(t0, t1, dt) { var time = ceil(t0), times = []; if (dt > 1) { while (time < t1) { if (!(number(time) % dt)) times.push(new Date(+time)); step(time, 1); } } else { while (time < t1) times.push(new Date(+time)), step(time, 1); } return times; } function range_utc(t0, t1, dt) { try { d3_time = d3_time_utc; var utc = new d3_time_utc; utc._ = t0; return range(utc, t1, dt); } finally { d3_time = Date; } } local.floor = local; local.round = round; local.ceil = ceil; local.offset = offset; local.range = range; var utc = local.utc = d3_time_interval_utc(local); utc.floor = utc; utc.round = d3_time_interval_utc(round); utc.ceil = d3_time_interval_utc(ceil); utc.offset = d3_time_interval_utc(offset); utc.range = range_utc; return local; } function d3_time_interval_utc(method) { return function(date, k) { try { d3_time = d3_time_utc; var utc = new d3_time_utc; utc._ = date; return method(utc, k)._; } finally { d3_time = Date; } }; } function d3_time_scale(linear, methods, format) { function scale(x) { return linear(x); } scale.invert = function(x) { return d3_time_scaleDate(linear.invert(x)); }; scale.domain = function(x) { if (!arguments.length) return linear.domain().map(d3_time_scaleDate); linear.domain(x); return scale; }; scale.nice = function(m) { return scale.domain(d3_scale_nice(scale.domain(), function() { return m; })); }; scale.ticks = function(m, k) { var extent = d3_time_scaleExtent(scale.domain()); if (typeof m !== "function") { var span = extent[1] - extent[0], target = span / m, i = d3.bisect(d3_time_scaleSteps, target); if (i == d3_time_scaleSteps.length) return methods.year(extent, m); if (!i) return linear.ticks(m).map(d3_time_scaleDate); if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i; m = methods[i]; k = m[1]; m = m[0].range; } return m(extent[0], new Date(+extent[1] + 1), k); }; scale.tickFormat = function() { return format; }; scale.copy = function() { return d3_time_scale(linear.copy(), methods, format); }; return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); } function d3_time_scaleExtent(domain) { var start = domain[0], stop = domain[domain.length - 1]; return start < stop ? [ start, stop ] : [ stop, start ]; } function d3_time_scaleDate(t) { return new Date(t); } function d3_time_scaleFormat(formats) { return function(date) { var i = formats.length - 1, f = formats[i]; while (!f[1](date)) f = formats[--i]; return f[0](date); }; } function d3_time_scaleSetYear(y) { var d = new Date(y, 0, 1); d.setFullYear(y); return d; } function d3_time_scaleGetYear(d) { var y = d.getFullYear(), d0 = d3_time_scaleSetYear(y), d1 = d3_time_scaleSetYear(y + 1); return y + (d - d0) / (d1 - d0); } function d3_time_scaleUTCSetYear(y) { var d = new Date(Date.UTC(y, 0, 1)); d.setUTCFullYear(y); return d; } function d3_time_scaleUTCGetYear(d) { var y = d.getUTCFullYear(), d0 = d3_time_scaleUTCSetYear(y), d1 = d3_time_scaleUTCSetYear(y + 1); return y + (d - d0) / (d1 - d0); } if (!Date.now) Date.now = function() { return +(new Date); }; try { document.createElement("div").style.setProperty("opacity", 0, ""); } catch (error) { var d3_style_prototype = CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; d3_style_prototype.setProperty = function(name, value, priority) { d3_style_setProperty.call(this, name, value + "", priority); }; } d3 = { version: "2.10.3" }; var d3_array = d3_arraySlice; try { d3_array(document.documentElement.childNodes)[0].nodeType; } catch (e) { d3_array = d3_arrayCopy; } var d3_arraySubclass = [].__proto__ ? function(array, prototype) { array.__proto__ = prototype; } : function(array, prototype) { for (var property in prototype) array[property] = prototype[property]; }; d3.map = function(object) { var map = new d3_Map; for (var key in object) map.set(key, object[key]); return map; }; d3_class(d3_Map, { has: function(key) { return d3_map_prefix + key in this; }, get: function(key) { return this[d3_map_prefix + key]; }, set: function(key, value) { return this[d3_map_prefix + key] = value; }, remove: function(key) { key = d3_map_prefix + key; return key in this && delete this[key]; }, keys: function() { var keys = []; this.forEach(function(key) { keys.push(key); }); return keys; }, values: function() { var values = []; this.forEach(function(key, value) { values.push(value); }); return values; }, entries: function() { var entries = []; this.forEach(function(key, value) { entries.push({ key: key, value: value }); }); return entries; }, forEach: function(f) { for (var key in this) { if (key.charCodeAt(0) === d3_map_prefixCode) { f.call(this, key.substring(1), this[key]); } } } }); var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); d3.functor = d3_functor; d3.rebind = function(target, source) { var i = 1, n = arguments.length, method; while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); return target; }; d3.ascending = function(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; }; d3.descending = function(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; }; d3.mean = function(array, f) { var n = array.length, a, m = 0, i = -1, j = 0; if (arguments.length === 1) { while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; } else { while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; } return j ? m : undefined; }; d3.median = function(array, f) { if (arguments.length > 1) array = array.map(f); array = array.filter(d3_number); return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; }; d3.min = function(array, f) { var i = -1, n = array.length, a, b; if (arguments.length === 1) { while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; while (++i < n) if ((b = array[i]) != null && a > b) a = b; } else { while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; } return a; }; d3.max = function(array, f) { var i = -1, n = array.length, a, b; if (arguments.length === 1) { while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; while (++i < n) if ((b = array[i]) != null && b > a) a = b; } else { while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; } return a; }; d3.extent = function(array, f) { var i = -1, n = array.length, a, b, c; if (arguments.length === 1) { while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined; while (++i < n) if ((b = array[i]) != null) { if (a > b) a = b; if (c < b) c = b; } } else { while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined; while (++i < n) if ((b = f.call(array, array[i], i)) != null) { if (a > b) a = b; if (c < b) c = b; } } return [ a, c ]; }; d3.random = { normal: function(µ, σ) { var n = arguments.length; if (n < 2) σ = 1; if (n < 1) µ = 0; return function() { var x, y, r; do { x = Math.random() * 2 - 1; y = Math.random() * 2 - 1; r = x * x + y * y; } while (!r || r > 1); return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); }; }, logNormal: function(µ, σ) { var n = arguments.length; if (n < 2) σ = 1; if (n < 1) µ = 0; var random = d3.random.normal(); return function() { return Math.exp(µ + σ * random()); }; }, irwinHall: function(m) { return function() { for (var s = 0, j = 0; j < m; j++) s += Math.random(); return s / m; }; } }; d3.sum = function(array, f) { var s = 0, n = array.length, a, i = -1; if (arguments.length === 1) { while (++i < n) if (!isNaN(a = +array[i])) s += a; } else { while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; } return s; }; d3.quantile = function(values, p) { var H = (values.length - 1) * p + 1, h = Math.floor(H), v = values[h - 1], e = H - h; return e ? v + e * (values[h] - v) : v; }; d3.transpose = function(matrix) { return d3.zip.apply(d3, matrix); }; d3.zip = function() { if (!(n = arguments.length)) return []; for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { zip[j] = arguments[j][i]; } } return zips; }; d3.bisector = function(f) { return { left: function(a, x, lo, hi) { if (arguments.length < 3) lo = 0; if (arguments.length < 4) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid; } return lo; }, right: function(a, x, lo, hi) { if (arguments.length < 3) lo = 0; if (arguments.length < 4) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1; } return lo; } }; }; var d3_bisector = d3.bisector(function(d) { return d; }); d3.bisectLeft = d3_bisector.left; d3.bisect = d3.bisectRight = d3_bisector.right; d3.first = function(array, f) { var i = 0, n = array.length, a = array[0], b; if (arguments.length === 1) f = d3.ascending; while (++i < n) { if (f.call(array, a, b = array[i]) > 0) { a = b; } } return a; }; d3.last = function(array, f) { var i = 0, n = array.length, a = array[0], b; if (arguments.length === 1) f = d3.ascending; while (++i < n) { if (f.call(array, a, b = array[i]) <= 0) { a = b; } } return a; }; d3.nest = function() { function map(array, depth) { if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; var i = -1, n = array.length, key = keys[depth++], keyValue, object, valuesByKey = new d3_Map, values, o = {}; while (++i < n) { if (values = valuesByKey.get(keyValue = key(object = array[i]))) { values.push(object); } else { valuesByKey.set(keyValue, [ object ]); } } valuesByKey.forEach(function(keyValue, values) { o[keyValue] = map(values, depth); }); return o; } function entries(map, depth) { if (depth >= keys.length) return map; var a = [], sortKey = sortKeys[depth++], key; for (key in map) { a.push({ key: key, values: entries(map[key], depth) }); } if (sortKey) a.sort(function(a, b) { return sortKey(a.key, b.key); }); return a; } var nest = {}, keys = [], sortKeys = [], sortValues, rollup; nest.map = function(array) { return map(array, 0); }; nest.entries = function(array) { return entries(map(array, 0), 0); }; nest.key = function(d) { keys.push(d); return nest; }; nest.sortKeys = function(order) { sortKeys[keys.length - 1] = order; return nest; }; nest.sortValues = function(order) { sortValues = order; return nest; }; nest.rollup = function(f) { rollup = f; return nest; }; return nest; }; d3.keys = function(map) { var keys = []; for (var key in map) keys.push(key); return keys; }; d3.values = function(map) { var values = []; for (var key in map) values.push(map[key]); return values; }; d3.entries = function(map) { var entries = []; for (var key in map) entries.push({ key: key, value: map[key] }); return entries; }; d3.permute = function(array, indexes) { var permutes = [], i = -1, n = indexes.length; while (++i < n) permutes[i] = array[indexes[i]]; return permutes; }; d3.merge = function(arrays) { return Array.prototype.concat.apply([], arrays); }; d3.split = function(array, f) { var arrays = [], values = [], value, i = -1, n = array.length; if (arguments.length < 2) f = d3_splitter; while (++i < n) { if (f.call(values, value = array[i], i)) { values = []; } else { if (!values.length) arrays.push(values); values.push(value); } } return arrays; }; d3.range = function(start, stop, step) { if (arguments.length < 3) { step = 1; if (arguments.length < 2) { stop = start; start = 0; } } if ((stop - start) / step === Infinity) throw new Error("infinite range"); var range = [], k = d3_range_integerScale(Math.abs(step)), i = -1, j; start *= k, stop *= k, step *= k; if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); return range; }; d3.requote = function(s) { return s.replace(d3_requote_re, "\\$&"); }; var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; d3.round = function(x, n) { return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); }; d3.xhr = function(url, mime, callback) { var req = new XMLHttpRequest; if (arguments.length < 3) callback = mime, mime = null; else if (mime && req.overrideMimeType) req.overrideMimeType(mime); req.open("GET", url, true); if (mime) req.setRequestHeader("Accept", mime); req.onreadystatechange = function() { if (req.readyState === 4) { var s = req.status; callback(!s && req.response || s >= 200 && s < 300 || s === 304 ? req : null); } }; req.send(null); }; d3.text = function(url, mime, callback) { function ready(req) { callback(req && req.responseText); } if (arguments.length < 3) { callback = mime; mime = null; } d3.xhr(url, mime, ready); }; d3.json = function(url, callback) { d3.text(url, "application/json", function(text) { callback(text ? JSON.parse(text) : null); }); }; d3.html = function(url, callback) { d3.text(url, "text/html", function(text) { if (text != null) { var range = document.createRange(); range.selectNode(document.body); text = range.createContextualFragment(text); } callback(text); }); }; d3.xml = function(url, mime, callback) { function ready(req) { callback(req && req.responseXML); } if (arguments.length < 3) { callback = mime; mime = null; } d3.xhr(url, mime, ready); }; var d3_nsPrefix = { svg: "http://www.w3.org/2000/svg", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", xml: "http://www.w3.org/XML/1998/namespace", xmlns: "http://www.w3.org/2000/xmlns/" }; d3.ns = { prefix: d3_nsPrefix, qualify: function(name) { var i = name.indexOf(":"), prefix = name; if (i >= 0) { prefix = name.substring(0, i); name = name.substring(i + 1); } return d3_nsPrefix.hasOwnProperty(prefix) ? { space: d3_nsPrefix[prefix], local: name } : name; } }; d3.dispatch = function() { var dispatch = new d3_dispatch, i = -1, n = arguments.length; while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); return dispatch; }; d3_dispatch.prototype.on = function(type, listener) { var i = type.indexOf("."), name = ""; if (i > 0) { name = type.substring(i + 1); type = type.substring(0, i); } return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); }; d3.format = function(specifier) { var match = d3_format_re.exec(specifier), fill = match[1] || " ", sign = match[3] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, suffix = "", integer = false; if (precision) precision = +precision.substring(1); if (zfill) { fill = "0"; if (comma) width -= Math.floor((width - 1) / 4); } switch (type) { case "n": comma = true; type = "g"; break; case "%": scale = 100; suffix = "%"; type = "f"; break; case "p": scale = 100; suffix = "%"; type = "r"; break; case "d": integer = true; precision = 0; break; case "s": scale = -1; type = "r"; break; } if (type == "r" && !precision) type = "g"; type = d3_format_types.get(type) || d3_format_typeDefault; return function(value) { if (integer && value % 1) return ""; var negative = value < 0 && (value = -value) ? "-" : sign; if (scale < 0) { var prefix = d3.formatPrefix(value, precision); value = prefix.scale(value); suffix = prefix.symbol; } else { value *= scale; } value = type(value, precision); if (zfill) { var length = value.length + negative.length; if (length < width) value = (new Array(width - length + 1)).join(fill) + value; if (comma) value = d3_format_group(value); value = negative + value; } else { if (comma) value = d3_format_group(value); value = negative + value; var length = value.length; if (length < width) value = (new Array(width - length + 1)).join(fill) + value; } return value + suffix; }; }; var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; var d3_format_types = d3.map({ g: function(x, p) { return x.toPrecision(p); }, e: function(x, p) { return x.toExponential(p); }, f: function(x, p) { return x.toFixed(p); }, r: function(x, p) { return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); } }); var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "μ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); d3.formatPrefix = function(value, precision) { var i = 0; if (value) { if (value < 0) value *= -1; if (precision) value = d3.round(value, d3_format_precision(value, precision)); i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3)); } return d3_formatPrefixes[8 + i / 3]; }; var d3_ease_quad = d3_ease_poly(2), d3_ease_cubic = d3_ease_poly(3), d3_ease_default = function() { return d3_ease_identity; }; var d3_ease = d3.map({ linear: d3_ease_default, poly: d3_ease_poly, quad: function() { return d3_ease_quad; }, cubic: function() { return d3_ease_cubic; }, sin: function() { return d3_ease_sin; }, exp: function() { return d3_ease_exp; }, circle: function() { return d3_ease_circle; }, elastic: d3_ease_elastic, back: d3_ease_back, bounce: function() { return d3_ease_bounce; } }); var d3_ease_mode = d3.map({ "in": d3_ease_identity, out: d3_ease_reverse, "in-out": d3_ease_reflect, "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } }); d3.ease = function(name) { var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in"; t = d3_ease.get(t) || d3_ease_default; m = d3_ease_mode.get(m) || d3_ease_identity; return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1)))); }; d3.event = null; d3.transform = function(string) { var g = document.createElementNS(d3.ns.prefix.svg, "g"); return (d3.transform = function(string) { g.setAttribute("transform", string); var t = g.transform.baseVal.consolidate(); return new d3_transform(t ? t.matrix : d3_transformIdentity); })(string); }; d3_transform.prototype.toString = function() { return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; }; var d3_transformDegrees = 180 / Math.PI, d3_transformIdentity = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 }; d3.interpolate = function(a, b) { var i = d3.interpolators.length, f; while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; return f; }; d3.interpolateNumber = function(a, b) { b -= a; return function(t) { return a + b * t; }; }; d3.interpolateRound = function(a, b) { b -= a; return function(t) { return Math.round(a + b * t); }; }; d3.interpolateString = function(a, b) { var m, i, j, s0 = 0, s1 = 0, s = [], q = [], n, o; d3_interpolate_number.lastIndex = 0; for (i = 0; m = d3_interpolate_number.exec(b); ++i) { if (m.index) s.push(b.substring(s0, s1 = m.index)); q.push({ i: s.length, x: m[0] }); s.push(null); s0 = d3_interpolate_number.lastIndex; } if (s0 < b.length) s.push(b.substring(s0)); for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) { o = q[i]; if (o.x == m[0]) { if (o.i) { if (s[o.i + 1] == null) { s[o.i - 1] += o.x; s.splice(o.i, 1); for (j = i + 1; j < n; ++j) q[j].i--; } else { s[o.i - 1] += o.x + s[o.i + 1]; s.splice(o.i, 2); for (j = i + 1; j < n; ++j) q[j].i -= 2; } } else { if (s[o.i + 1] == null) { s[o.i] = o.x; } else { s[o.i] = o.x + s[o.i + 1]; s.splice(o.i + 1, 1); for (j = i + 1; j < n; ++j) q[j].i--; } } q.splice(i, 1); n--; i--; } else { o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x)); } } while (i < n) { o = q.pop(); if (s[o.i + 1] == null) { s[o.i] = o.x; } else { s[o.i] = o.x + s[o.i + 1]; s.splice(o.i + 1, 1); } n--; } if (s.length === 1) { return s[0] == null ? q[0].x : function() { return b; }; } return function(t) { for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t); return s.join(""); }; }; d3.interpolateTransform = function(a, b) { var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; if (ta[0] != tb[0] || ta[1] != tb[1]) { s.push("translate(", null, ",", null, ")"); q.push({ i: 1, x: d3.interpolateNumber(ta[0], tb[0]) }, { i: 3, x: d3.interpolateNumber(ta[1], tb[1]) }); } else if (tb[0] || tb[1]) { s.push("translate(" + tb + ")"); } else { s.push(""); } if (ra != rb) { if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; q.push({ i: s.push(s.pop() + "rotate(", null, ")") - 2, x: d3.interpolateNumber(ra, rb) }); } else if (rb) { s.push(s.pop() + "rotate(" + rb + ")"); } if (wa != wb) { q.push({ i: s.push(s.pop() + "skewX(", null, ")") - 2, x: d3.interpolateNumber(wa, wb) }); } else if (wb) { s.push(s.pop() + "skewX(" + wb + ")"); } if (ka[0] != kb[0] || ka[1] != kb[1]) { n = s.push(s.pop() + "scale(", null, ",", null, ")"); q.push({ i: n - 4, x: d3.interpolateNumber(ka[0], kb[0]) }, { i: n - 2, x: d3.interpolateNumber(ka[1], kb[1]) }); } else if (kb[0] != 1 || kb[1] != 1) { s.push(s.pop() + "scale(" + kb + ")"); } n = q.length; return function(t) { var i = -1, o; while (++i < n) s[(o = q[i]).i] = o.x(t); return s.join(""); }; }; d3.interpolateRgb = function(a, b) { a = d3.rgb(a); b = d3.rgb(b); var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; return function(t) { return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); }; }; d3.interpolateHsl = function(a, b) { a = d3.hsl(a); b = d3.hsl(b); var h0 = a.h, s0 = a.s, l0 = a.l, h1 = b.h - h0, s1 = b.s - s0, l1 = b.l - l0; if (h1 > 180) h1 -= 360; else if (h1 < -180) h1 += 360; return function(t) { return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t) + ""; }; }; d3.interpolateLab = function(a, b) { a = d3.lab(a); b = d3.lab(b); var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; return function(t) { return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; }; }; d3.interpolateHcl = function(a, b) { a = d3.hcl(a); b = d3.hcl(b); var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; return function(t) { return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; }; }; d3.interpolateArray = function(a, b) { var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i])); for (; i < na; ++i) c[i] = a[i]; for (; i < nb; ++i) c[i] = b[i]; return function(t) { for (i = 0; i < n0; ++i) c[i] = x[i](t); return c; }; }; d3.interpolateObject = function(a, b) { var i = {}, c = {}, k; for (k in a) { if (k in b) { i[k] = d3_interpolateByName(k)(a[k], b[k]); } else { c[k] = a[k]; } } for (k in b) { if (!(k in a)) { c[k] = b[k]; } } return function(t) { for (k in i) c[k] = i[k](t); return c; }; }; var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; d3.interpolators = [ d3.interpolateObject, function(a, b) { return b instanceof Array && d3.interpolateArray(a, b); }, function(a, b) { return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + ""); }, function(a, b) { return (typeof b === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Color) && d3.interpolateRgb(a, b); }, function(a, b) { return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b); } ]; d3_Color.prototype.toString = function() { return this.rgb() + ""; }; d3.rgb = function(r, g, b) { return arguments.length === 1 ? r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : d3_rgb(~~r, ~~g, ~~b); }; var d3_rgbPrototype = d3_Rgb.prototype = new d3_Color; d3_rgbPrototype.brighter = function(k) { k = Math.pow(.7, arguments.length ? k : 1); var r = this.r, g = this.g, b = this.b, i = 30; if (!r && !g && !b) return d3_rgb(i, i, i); if (r && r < i) r = i; if (g && g < i) g = i; if (b && b < i) b = i; return d3_rgb(Math.min(255, Math.floor(r / k)), Math.min(255, Math.floor(g / k)), Math.min(255, Math.floor(b / k))); }; d3_rgbPrototype.darker = function(k) { k = Math.pow(.7, arguments.length ? k : 1); return d3_rgb(Math.floor(k * this.r), Math.floor(k * this.g), Math.floor(k * this.b)); }; d3_rgbPrototype.hsl = function() { return d3_rgb_hsl(this.r, this.g, this.b); }; d3_rgbPrototype.toString = function() { return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); }; var d3_rgb_names = d3.map({ aliceblue: "#f0f8ff", antiquewhite: "#faebd7", aqua: "#00ffff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000000", blanchedalmond: "#ffebcd", blue: "#0000ff", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#00ffff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgreen: "#006400", darkgrey: "#a9a9a9", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkslategrey: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#ff00ff", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", gold: "#ffd700", goldenrod: "#daa520", gray: "#808080", green: "#008000", greenyellow: "#adff2f", grey: "#808080", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavender: "#e6e6fa", lavenderblush: "#fff0f5", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgray: "#d3d3d3", lightgreen: "#90ee90", lightgrey: "#d3d3d3", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#00ff00", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#ff00ff", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", red: "#ff0000", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", slategrey: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#ffffff", whitesmoke: "#f5f5f5", yellow: "#ffff00", yellowgreen: "#9acd32" }); d3_rgb_names.forEach(function(key, value) { d3_rgb_names.set(key, d3_rgb_parse(value, d3_rgb, d3_hsl_rgb)); }); d3.hsl = function(h, s, l) { return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l); }; var d3_hslPrototype = d3_Hsl.prototype = new d3_Color; d3_hslPrototype.brighter = function(k) { k = Math.pow(.7, arguments.length ? k : 1); return d3_hsl(this.h, this.s, this.l / k); }; d3_hslPrototype.darker = function(k) { k = Math.pow(.7, arguments.length ? k : 1); return d3_hsl(this.h, this.s, k * this.l); }; d3_hslPrototype.rgb = function() { return d3_hsl_rgb(this.h, this.s, this.l); }; d3.hcl = function(h, c, l) { return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l); }; var d3_hclPrototype = d3_Hcl.prototype = new d3_Color; d3_hclPrototype.brighter = function(k) { return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); }; d3_hclPrototype.darker = function(k) { return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); }; d3_hclPrototype.rgb = function() { return d3_hcl_lab(this.h, this.c, this.l).rgb(); }; d3.lab = function(l, a, b) { return arguments.length === 1 ? l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) : l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b) : d3_lab(+l, +a, +b); }; var d3_lab_K = 18; var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; var d3_labPrototype = d3_Lab.prototype = new d3_Color; d3_labPrototype.brighter = function(k) { return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); }; d3_labPrototype.darker = function(k) { return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); }; d3_labPrototype.rgb = function() { return d3_lab_rgb(this.l, this.a, this.b); }; var d3_select = function(s, n) { return n.querySelector(s); }, d3_selectAll = function(s, n) { return n.querySelectorAll(s); }, d3_selectRoot = document.documentElement, d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector, d3_selectMatches = function(n, s) { return d3_selectMatcher.call(n, s); }; if (typeof Sizzle === "function") { d3_select = function(s, n) { return Sizzle(s, n)[0] || null; }; d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); }; d3_selectMatches = Sizzle.matchesSelector; } var d3_selectionPrototype = []; d3.selection = function() { return d3_selectionRoot; }; d3.selection.prototype = d3_selectionPrototype; d3_selectionPrototype.select = function(selector) { var subgroups = [], subgroup, subnode, group, node; if (typeof selector !== "function") selector = d3_selection_selector(selector); for (var j = -1, m = this.length; ++j < m; ) { subgroups.push(subgroup = []); subgroup.parentNode = (group = this[j]).parentNode; for (var i = -1, n = group.length; ++i < n; ) { if (node = group[i]) { subgroup.push(subnode = selector.call(node, node.__data__, i)); if (subnode && "__data__" in node) subnode.__data__ = node.__data__; } else { subgroup.push(null); } } } return d3_selection(subgroups); }; d3_selectionPrototype.selectAll = function(selector) { var subgroups = [], subgroup, node; if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); for (var j = -1, m = this.length; ++j < m; ) { for (var group = this[j], i = -1, n = group.length; ++i < n; ) { if (node = group[i]) { subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i))); subgroup.parentNode = node; } } } return d3_selection(subgroups); }; d3_selectionPrototype.attr = function(name, value) { if (arguments.length < 2) { if (typeof name === "string") { var node = this.node(); name = d3.ns.qualify(name); return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); } for (value in name) this.each(d3_selection_attr(value, name[value])); return this; } return this.each(d3_selection_attr(name, value)); }; d3_selectionPrototype.classed = function(name, value) { if (arguments.length < 2) { if (typeof name === "string") { var node = this.node(), n = (name = name.trim().split(/^|\s+/g)).length, i = -1; if (value = node.classList) { while (++i < n) if (!value.contains(name[i])) return false; } else { value = node.className; if (value.baseVal != null) value = value.baseVal; while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; } return true; } for (value in name) this.each(d3_selection_classed(value, name[value])); return this; } return this.each(d3_selection_classed(name, value)); }; d3_selectionPrototype.style = function(name, value, priority) { var n = arguments.length; if (n < 3) { if (typeof name !== "string") { if (n < 2) value = ""; for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); return this; } if (n < 2) return window.getComputedStyle(this.node(), null).getPropertyValue(name); priority = ""; } return this.each(d3_selection_style(name, value, priority)); }; d3_selectionPrototype.property = function(name, value) { if (arguments.length < 2) { if (typeof name === "string") return this.node()[name]; for (value in name) this.each(d3_selection_property(value, name[value])); return this; } return this.each(d3_selection_property(name, value)); }; d3_selectionPrototype.text = function(value) { return arguments.length < 1 ? this.node().textContent : this.each(typeof value === "function" ? function() { var v = value.apply(this, arguments); this.textContent = v == null ? "" : v; } : value == null ? function() { this.textContent = ""; } : function() { this.textContent = value; }); }; d3_selectionPrototype.html = function(value) { return arguments.length < 1 ? this.node().innerHTML : this.each(typeof value === "function" ? function() { var v = value.apply(this, arguments); this.innerHTML = v == null ? "" : v; } : value == null ? function() { this.innerHTML = ""; } : function() { this.innerHTML = value; }); }; d3_selectionPrototype.append = function(name) { function append() { return this.appendChild(document.createElementNS(this.namespaceURI, name)); } function appendNS() { return this.appendChild(document.createElementNS(name.space, name.local)); } name = d3.ns.qualify(name); return this.select(name.local ? appendNS : append); }; d3_selectionPrototype.insert = function(name, before) { function insert() { return this.insertBefore(document.createElementNS(this.namespaceURI, name), d3_select(before, this)); } function insertNS() { return this.insertBefore(document.createElementNS(name.space, name.local), d3_select(before, this)); } name = d3.ns.qualify(name); return this.select(name.local ? insertNS : insert); }; d3_selectionPrototype.remove = function() { return this.each(function() { var parent = this.parentNode; if (parent) parent.removeChild(this); }); }; d3_selectionPrototype.data = function(value, key) { function bind(group, groupData) { var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), n1 = Math.max(n, m), updateNodes = [], enterNodes = [], exitNodes = [], node, nodeData; if (key) { var nodeByKeyValue = new d3_Map, keyValues = [], keyValue, j = groupData.length; for (i = -1; ++i < n; ) { keyValue = key.call(node = group[i], node.__data__, i); if (nodeByKeyValue.has(keyValue)) { exitNodes[j++] = node; } else { nodeByKeyValue.set(keyValue, node); } keyValues.push(keyValue); } for (i = -1; ++i < m; ) { keyValue = key.call(groupData, nodeData = groupData[i], i); if (nodeByKeyValue.has(keyValue)) { updateNodes[i] = node = nodeByKeyValue.get(keyValue); node.__data__ = nodeData; enterNodes[i] = exitNodes[i] = null; } else { enterNodes[i] = d3_selection_dataNode(nodeData); updateNodes[i] = exitNodes[i] = null; } nodeByKeyValue.remove(keyValue); } for (i = -1; ++i < n; ) { if (nodeByKeyValue.has(keyValues[i])) { exitNodes[i] = group[i]; } } } else { for (i = -1; ++i < n0; ) { node = group[i]; nodeData = groupData[i]; if (node) { node.__data__ = nodeData; updateNodes[i] = node; enterNodes[i] = exitNodes[i] = null; } else { enterNodes[i] = d3_selection_dataNode(nodeData); updateNodes[i] = exitNodes[i] = null; } } for (; i < m; ++i) { enterNodes[i] = d3_selection_dataNode(groupData[i]); updateNodes[i] = exitNodes[i] = null; } for (; i < n1; ++i) { exitNodes[i] = group[i]; enterNodes[i] = updateNodes[i] = null; } } enterNodes.update = updateNodes; enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; enter.push(enterNodes); update.push(updateNodes); exit.push(exitNodes); } var i = -1, n = this.length, group, node; if (!arguments.length) { value = new Array(n = (group = this[0]).length); while (++i < n) { if (node = group[i]) { value[i] = node.__data__; } } return value; } var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); if (typeof value === "function") { while (++i < n) { bind(group = this[i], value.call(group, group.parentNode.__data__, i)); } } else { while (++i < n) { bind(group = this[i], value); } } update.enter = function() { return enter; }; update.exit = function() { return exit; }; return update; }; d3_selectionPrototype.datum = d3_selectionPrototype.map = function(value) { return arguments.length < 1 ? this.property("__data__") : this.property("__data__", value); }; d3_selectionPrototype.filter = function(filter) { var subgroups = [], subgroup, group, node; if (typeof filter !== "function") filter = d3_selection_filter(filter); for (var j = 0, m = this.length; j < m; j++) { subgroups.push(subgroup = []); subgroup.parentNode = (group = this[j]).parentNode; for (var i = 0, n = group.length; i < n; i++) { if ((node = group[i]) && filter.call(node, node.__data__, i)) { subgroup.push(node); } } } return d3_selection(subgroups); }; d3_selectionPrototype.order = function() { for (var j = -1, m = this.length; ++j < m; ) { for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { if (node = group[i]) { if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); next = node; } } } return this; }; d3_selectionPrototype.sort = function(comparator) { comparator = d3_selection_sortComparator.apply(this, arguments); for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); return this.order(); }; d3_selectionPrototype.on = function(type, listener, capture) { var n = arguments.length; if (n < 3) { if (typeof type !== "string") { if (n < 2) listener = false; for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); return this; } if (n < 2) return (n = this.node()["__on" + type]) && n._; capture = false; } return this.each(d3_selection_on(type, listener, capture)); }; d3_selectionPrototype.each = function(callback) { return d3_selection_each(this, function(node, i, j) { callback.call(node, node.__data__, i, j); }); }; d3_selectionPrototype.call = function(callback) { callback.apply(this, (arguments[0] = this, arguments)); return this; }; d3_selectionPrototype.empty = function() { return !this.node(); }; d3_selectionPrototype.node = function(callback) { for (var j = 0, m = this.length; j < m; j++) { for (var group = this[j], i = 0, n = group.length; i < n; i++) { var node = group[i]; if (node) return node; } } return null; }; d3_selectionPrototype.transition = function() { var subgroups = [], subgroup, node; for (var j = -1, m = this.length; ++j < m; ) { subgroups.push(subgroup = []); for (var group = this[j], i = -1, n = group.length; ++i < n; ) { subgroup.push((node = group[i]) ? { node: node, delay: d3_transitionDelay, duration: d3_transitionDuration } : null); } } return d3_transition(subgroups, d3_transitionId || ++d3_transitionNextId, Date.now()); }; var d3_selectionRoot = d3_selection([ [ document ] ]); d3_selectionRoot[0].parentNode = d3_selectRoot; d3.select = function(selector) { return typeof selector === "string" ? d3_selectionRoot.select(selector) : d3_selection([ [ selector ] ]); }; d3.selectAll = function(selector) { return typeof selector === "string" ? d3_selectionRoot.selectAll(selector) : d3_selection([ d3_array(selector) ]); }; var d3_selection_enterPrototype = []; d3.selection.enter = d3_selection_enter; d3.selection.enter.prototype = d3_selection_enterPrototype; d3_selection_enterPrototype.append = d3_selectionPrototype.append; d3_selection_enterPrototype.insert = d3_selectionPrototype.insert; d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; d3_selection_enterPrototype.node = d3_selectionPrototype.node; d3_selection_enterPrototype.select = function(selector) { var subgroups = [], subgroup, subnode, upgroup, group, node; for (var j = -1, m = this.length; ++j < m; ) { upgroup = (group = this[j]).update; subgroups.push(subgroup = []); subgroup.parentNode = group.parentNode; for (var i = -1, n = group.length; ++i < n; ) { if (node = group[i]) { subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i)); subnode.__data__ = node.__data__; } else { subgroup.push(null); } } } return d3_selection(subgroups); }; var d3_transitionPrototype = [], d3_transitionNextId = 0, d3_transitionId = 0, d3_transitionDefaultDelay = 0, d3_transitionDefaultDuration = 250, d3_transitionDefaultEase = d3.ease("cubic-in-out"), d3_transitionDelay = d3_transitionDefaultDelay, d3_transitionDuration = d3_transitionDefaultDuration, d3_transitionEase = d3_transitionDefaultEase; d3_transitionPrototype.call = d3_selectionPrototype.call; d3.transition = function(selection) { return arguments.length ? d3_transitionId ? selection.transition() : selection : d3_selectionRoot.transition(); }; d3.transition.prototype = d3_transitionPrototype; d3_transitionPrototype.select = function(selector) { var subgroups = [], subgroup, subnode, node; if (typeof selector !== "function") selector = d3_selection_selector(selector); for (var j = -1, m = this.length; ++j < m; ) { subgroups.push(subgroup = []); for (var group = this[j], i = -1, n = group.length; ++i < n; ) { if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) { if ("__data__" in node.node) subnode.__data__ = node.node.__data__; subgroup.push({ node: subnode, delay: node.delay, duration: node.duration }); } else { subgroup.push(null); } } } return d3_transition(subgroups, this.id, this.time).ease(this.ease()); }; d3_transitionPrototype.selectAll = function(selector) { var subgroups = [], subgroup, subnodes, node; if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); for (var j = -1, m = this.length; ++j < m; ) { for (var group = this[j], i = -1, n = group.length; ++i < n; ) { if (node = group[i]) { subnodes = selector.call(node.node, node.node.__data__, i); subgroups.push(subgroup = []); for (var k = -1, o = subnodes.length; ++k < o; ) { subgroup.push({ node: subnodes[k], delay: node.delay, duration: node.duration }); } } } } return d3_transition(subgroups, this.id, this.time).ease(this.ease()); }; d3_transitionPrototype.filter = function(filter) { var subgroups = [], subgroup, group, node; if (typeof filter !== "function") filter = d3_selection_filter(filter); for (var j = 0, m = this.length; j < m; j++) { subgroups.push(subgroup = []); for (var group = this[j], i = 0, n = group.length; i < n; i++) { if ((node = group[i]) && filter.call(node.node, node.node.__data__, i)) { subgroup.push(node); } } } return d3_transition(subgroups, this.id, this.time).ease(this.ease()); }; d3_transitionPrototype.attr = function(name, value) { if (arguments.length < 2) { for (value in name) this.attrTween(value, d3_tweenByName(name[value], value)); return this; } return this.attrTween(name, d3_tweenByName(value, name)); }; d3_transitionPrototype.attrTween = function(nameNS, tween) { function attrTween(d, i) { var f = tween.call(this, d, i, this.getAttribute(name)); return f === d3_tweenRemove ? (this.removeAttribute(name), null) : f && function(t) { this.setAttribute(name, f(t)); }; } function attrTweenNS(d, i) { var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); return f === d3_tweenRemove ? (this.removeAttributeNS(name.space, name.local), null) : f && function(t) { this.setAttributeNS(name.space, name.local, f(t)); }; } var name = d3.ns.qualify(nameNS); return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); }; d3_transitionPrototype.style = function(name, value, priority) { var n = arguments.length; if (n < 3) { if (typeof name !== "string") { if (n < 2) value = ""; for (priority in name) this.styleTween(priority, d3_tweenByName(name[priority], priority), value); return this; } priority = ""; } return this.styleTween(name, d3_tweenByName(value, name), priority); }; d3_transitionPrototype.styleTween = function(name, tween, priority) { if (arguments.length < 3) priority = ""; return this.tween("style." + name, function(d, i) { var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name)); return f === d3_tweenRemove ? (this.style.removeProperty(name), null) : f && function(t) { this.style.setProperty(name, f(t), priority); }; }); }; d3_transitionPrototype.text = function(value) { return this.tween("text", function(d, i) { this.textContent = typeof value === "function" ? value.call(this, d, i) : value; }); }; d3_transitionPrototype.remove = function() { return this.each("end.transition", function() { var p; if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this); }); }; d3_transitionPrototype.delay = function(value) { return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { node.delay = value.call(node = node.node, node.__data__, i, j) | 0; } : (value = value | 0, function(node) { node.delay = value; })); }; d3_transitionPrototype.duration = function(value) { return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { node.duration = Math.max(1, value.call(node = node.node, node.__data__, i, j) | 0); } : (value = Math.max(1, value | 0), function(node) { node.duration = value; })); }; d3_transitionPrototype.transition = function() { return this.select(d3_this); }; d3.tween = function(b, interpolate) { function tweenFunction(d, i, a) { var v = b.call(this, d, i); return v == null ? a != "" && d3_tweenRemove : a != v && interpolate(a, v + ""); } function tweenString(d, i, a) { return a != b && interpolate(a, b); } return typeof b === "function" ? tweenFunction : b == null ? d3_tweenNull : (b += "", tweenString); }; var d3_tweenRemove = {}; var d3_timer_id = 0, d3_timer_byId = {}, d3_timer_queue = null, d3_timer_interval, d3_timer_timeout; d3.timer = function(callback, delay, then) { if (arguments.length < 3) { if (arguments.length < 2) delay = 0; else if (!isFinite(delay)) return; then = Date.now(); } var timer = d3_timer_byId[callback.id]; if (timer && timer.callback === callback) { timer.then = then; timer.delay = delay; } else d3_timer_byId[callback.id = ++d3_timer_id] = d3_timer_queue = { callback: callback, then: then, delay: delay, next: d3_timer_queue }; if (!d3_timer_interval) { d3_timer_timeout = clearTimeout(d3_timer_timeout); d3_timer_interval = 1; d3_timer_frame(d3_timer_step); } }; d3.timer.flush = function() { var elapsed, now = Date.now(), t1 = d3_timer_queue; while (t1) { elapsed = now - t1.then; if (!t1.delay) t1.flush = t1.callback(elapsed); t1 = t1.next; } d3_timer_flush(); }; var d3_timer_frame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { setTimeout(callback, 17); }; d3.mouse = function(container) { return d3_mousePoint(container, d3_eventSource()); }; var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0; d3.touches = function(container, touches) { if (arguments.length < 2) touches = d3_eventSource().touches; return touches ? d3_array(touches).map(function(touch) { var point = d3_mousePoint(container, touch); point.identifier = touch.identifier; return point; }) : []; }; d3.scale = {}; d3.scale.linear = function() { return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3.interpolate, false); }; d3.scale.log = function() { return d3_scale_log(d3.scale.linear(), d3_scale_logp); }; var d3_scale_logFormat = d3.format(".0e"); d3_scale_logp.pow = function(x) { return Math.pow(10, x); }; d3_scale_logn.pow = function(x) { return -Math.pow(10, -x); }; d3.scale.pow = function() { return d3_scale_pow(d3.scale.linear(), 1); }; d3.scale.sqrt = function() { return d3.scale.pow().exponent(.5); }; d3.scale.ordinal = function() { return d3_scale_ordinal([], { t: "range", a: [ [] ] }); }; d3.scale.category10 = function() { return d3.scale.ordinal().range(d3_category10); }; d3.scale.category20 = function() { return d3.scale.ordinal().range(d3_category20); }; d3.scale.category20b = function() { return d3.scale.ordinal().range(d3_category20b); }; d3.scale.category20c = function() { return d3.scale.ordinal().range(d3_category20c); }; var d3_category10 = [ "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" ]; var d3_category20 = [ "#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ]; var d3_category20b = [ "#393b79", "#5254a3", "#6b6ecf", "#9c9ede", "#637939", "#8ca252", "#b5cf6b", "#cedb9c", "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94", "#843c39", "#ad494a", "#d6616b", "#e7969c", "#7b4173", "#a55194", "#ce6dbd", "#de9ed6" ]; var d3_category20c = [ "#3182bd", "#6baed6", "#9ecae1", "#c6dbef", "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2", "#31a354", "#74c476", "#a1d99b", "#c7e9c0", "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", "#636363", "#969696", "#bdbdbd", "#d9d9d9" ]; d3.scale.quantile = function() { return d3_scale_quantile([], []); }; d3.scale.quantize = function() { return d3_scale_quantize(0, 1, [ 0, 1 ]); }; d3.scale.threshold = function() { return d3_scale_threshold([ .5 ], [ 0, 1 ]); }; d3.scale.identity = function() { return d3_scale_identity([ 0, 1 ]); }; d3.svg = {}; d3.svg.arc = function() { function arc() { var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0), df = da < Math.PI ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1); return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z"; } var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; arc.innerRadius = function(v) { if (!arguments.length) return innerRadius; innerRadius = d3_functor(v); return arc; }; arc.outerRadius = function(v) { if (!arguments.length) return outerRadius; outerRadius = d3_functor(v); return arc; }; arc.startAngle = function(v) { if (!arguments.length) return startAngle; startAngle = d3_functor(v); return arc; }; arc.endAngle = function(v) { if (!arguments.length) return endAngle; endAngle = d3_functor(v); return arc; }; arc.centroid = function() { var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; return [ Math.cos(a) * r, Math.sin(a) * r ]; }; return arc; }; var d3_svg_arcOffset = -Math.PI / 2, d3_svg_arcMax = 2 * Math.PI - 1e-6; d3.svg.line = function() { return d3_svg_line(d3_identity); }; var d3_svg_lineInterpolators = d3.map({ linear: d3_svg_lineLinear, "linear-closed": d3_svg_lineLinearClosed, "step-before": d3_svg_lineStepBefore, "step-after": d3_svg_lineStepAfter, basis: d3_svg_lineBasis, "basis-open": d3_svg_lineBasisOpen, "basis-closed": d3_svg_lineBasisClosed, bundle: d3_svg_lineBundle, cardinal: d3_svg_lineCardinal, "cardinal-open": d3_svg_lineCardinalOpen, "cardinal-closed": d3_svg_lineCardinalClosed, monotone: d3_svg_lineMonotone }); d3_svg_lineInterpolators.forEach(function(key, value) { value.key = key; value.closed = /-closed$/.test(key); }); var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; d3.svg.line.radial = function() { var line = d3_svg_line(d3_svg_lineRadial); line.radius = line.x, delete line.x; line.angle = line.y, delete line.y; return line; }; d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; d3.svg.area = function() { return d3_svg_area(d3_identity); }; d3.svg.area.radial = function() { var area = d3_svg_area(d3_svg_lineRadial); area.radius = area.x, delete area.x; area.innerRadius = area.x0, delete area.x0; area.outerRadius = area.x1, delete area.x1; area.angle = area.y, delete area.y; area.startAngle = area.y0, delete area.y0; area.endAngle = area.y1, delete area.y1; return area; }; d3.svg.chord = function() { function chord(d, i) { var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; } function subgroup(self, f, d, i) { var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; return { r: r, a0: a0, a1: a1, p0: [ r * Math.cos(a0), r * Math.sin(a0) ], p1: [ r * Math.cos(a1), r * Math.sin(a1) ] }; } function equals(a, b) { return a.a0 == b.a0 && a.a1 == b.a1; } function arc(r, p, a) { return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p; } function curve(r0, p0, r1, p1) { return "Q 0,0 " + p1; } var source = d3_svg_chordSource, target = d3_svg_chordTarget, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; chord.radius = function(v) { if (!arguments.length) return radius; radius = d3_functor(v); return chord; }; chord.source = function(v) { if (!arguments.length) return source; source = d3_functor(v); return chord; }; chord.target = function(v) { if (!arguments.length) return target; target = d3_functor(v); return chord; }; chord.startAngle = function(v) { if (!arguments.length) return startAngle; startAngle = d3_functor(v); return chord; }; chord.endAngle = function(v) { if (!arguments.length) return endAngle; endAngle = d3_functor(v); return chord; }; return chord; }; d3.svg.diagonal = function() { function diagonal(d, i) { var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { x: p0.x, y: m }, { x: p3.x, y: m }, p3 ]; p = p.map(projection); return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; } var source = d3_svg_chordSource, target = d3_svg_chordTarget, projection = d3_svg_diagonalProjection; diagonal.source = function(x) { if (!arguments.length) return source; source = d3_functor(x); return diagonal; }; diagonal.target = function(x) { if (!arguments.length) return target; target = d3_functor(x); return diagonal; }; diagonal.projection = function(x) { if (!arguments.length) return projection; projection = x; return diagonal; }; return diagonal; }; d3.svg.diagonal.radial = function() { var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; diagonal.projection = function(x) { return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; }; return diagonal; }; d3.svg.mouse = d3.mouse; d3.svg.touches = d3.touches; d3.svg.symbol = function() { function symbol(d, i) { return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); } var type = d3_svg_symbolType, size = d3_svg_symbolSize; symbol.type = function(x) { if (!arguments.length) return type; type = d3_functor(x); return symbol; }; symbol.size = function(x) { if (!arguments.length) return size; size = d3_functor(x); return symbol; }; return symbol; }; var d3_svg_symbols = d3.map({ circle: d3_svg_symbolCircle, cross: function(size) { var r = Math.sqrt(size / 5) / 2; return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; }, diamond: function(size) { var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; }, square: function(size) { var r = Math.sqrt(size) / 2; return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; }, "triangle-down": function(size) { var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; }, "triangle-up": function(size) { var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; } }); d3.svg.symbolTypes = d3_svg_symbols.keys(); var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180); d3.svg.axis = function() { function axis(g) { g.each(function() { var g = d3.select(this); var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String : tickFormat_; var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), subtick = g.selectAll(".minor").data(subticks, String), subtickEnter = subtick.enter().insert("line", "g").attr("class", "tick minor").style("opacity", 1e-6), subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(), subtickUpdate = d3.transition(subtick).style("opacity", 1); var tick = g.selectAll("g").data(ticks, String), tickEnter = tick.enter().insert("g", "path").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform; var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathEnter = path.enter().append("path").attr("class", "domain"), pathUpdate = d3.transition(path); var scale1 = scale.copy(), scale0 = this.__chart__ || scale1; this.__chart__ = scale1; tickEnter.append("line").attr("class", "tick"); tickEnter.append("text"); var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"); switch (orient) { case "bottom": { tickTransform = d3_svg_axisX; subtickEnter.attr("y2", tickMinorSize); subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize); lineEnter.attr("y2", tickMajorSize); textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding); lineUpdate.attr("x2", 0).attr("y2", tickMajorSize); textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding); text.attr("dy", ".71em").attr("text-anchor", "middle"); pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize); break; } case "top": { tickTransform = d3_svg_axisX; subtickEnter.attr("y2", -tickMinorSize); subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize); lineEnter.attr("y2", -tickMajorSize); textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize); textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); text.attr("dy", "0em").attr("text-anchor", "middle"); pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize); break; } case "left": { tickTransform = d3_svg_axisY; subtickEnter.attr("x2", -tickMinorSize); subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0); lineEnter.attr("x2", -tickMajorSize); textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)); lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0); textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0); text.attr("dy", ".32em").attr("text-anchor", "end"); pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize); break; } case "right": { tickTransform = d3_svg_axisY; subtickEnter.attr("x2", tickMinorSize); subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0); lineEnter.attr("x2", tickMajorSize); textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding); lineUpdate.attr("x2", tickMajorSize).attr("y2", 0); textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0); text.attr("dy", ".32em").attr("text-anchor", "start"); pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize); break; } } if (scale.ticks) { tickEnter.call(tickTransform, scale0); tickUpdate.call(tickTransform, scale1); tickExit.call(tickTransform, scale1); subtickEnter.call(tickTransform, scale0); subtickUpdate.call(tickTransform, scale1); subtickExit.call(tickTransform, scale1); } else { var dx = scale1.rangeBand() / 2, x = function(d) { return scale1(d) + dx; }; tickEnter.call(tickTransform, x); tickUpdate.call(tickTransform, x); } }); } var scale = d3.scale.linear(), orient = "bottom", tickMajorSize = 6, tickMinorSize = 6, tickEndSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_, tickSubdivide = 0; axis.scale = function(x) { if (!arguments.length) return scale; scale = x; return axis; }; axis.orient = function(x) { if (!arguments.length) return orient; orient = x; return axis; }; axis.ticks = function() { if (!arguments.length) return tickArguments_; tickArguments_ = arguments; return axis; }; axis.tickValues = function(x) { if (!arguments.length) return tickValues; tickValues = x; return axis; }; axis.tickFormat = function(x) { if (!arguments.length) return tickFormat_; tickFormat_ = x; return axis; }; axis.tickSize = function(x, y, z) { if (!arguments.length) return tickMajorSize; var n = arguments.length - 1; tickMajorSize = +x; tickMinorSize = n > 1 ? +y : tickMajorSize; tickEndSize = n > 0 ? +arguments[n] : tickMajorSize; return axis; }; axis.tickPadding = function(x) { if (!arguments.length) return tickPadding; tickPadding = +x; return axis; }; axis.tickSubdivide = function(x) { if (!arguments.length) return tickSubdivide; tickSubdivide = +x; return axis; }; return axis; }; d3.svg.brush = function() { function brush(g) { g.each(function() { var g = d3.select(this), bg = g.selectAll(".background").data([ 0 ]), fg = g.selectAll(".extent").data([ 0 ]), tz = g.selectAll(".resize").data(resizes, String), e; g.style("pointer-events", "all").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); bg.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); fg.enter().append("rect").attr("class", "extent").style("cursor", "move"); tz.enter().append("g").attr("class", function(d) { return "resize " + d; }).style("cursor", function(d) { return d3_svg_brushCursor[d]; }).append("rect").attr("x", function(d) { return /[ew]$/.test(d) ? -3 : null; }).attr("y", function(d) { return /^[ns]/.test(d) ? -3 : null; }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); tz.style("display", brush.empty() ? "none" : null); tz.exit().remove(); if (x) { e = d3_scaleRange(x); bg.attr("x", e[0]).attr("width", e[1] - e[0]); redrawX(g); } if (y) { e = d3_scaleRange(y); bg.attr("y", e[0]).attr("height", e[1] - e[0]); redrawY(g); } redraw(g); }); } function redraw(g) { g.selectAll(".resize").attr("transform", function(d) { return "translate(" + extent[+/e$/.test(d)][0] + "," + extent[+/^s/.test(d)][1] + ")"; }); } function redrawX(g) { g.select(".extent").attr("x", extent[0][0]); g.selectAll(".extent,.n>rect,.s>rect").attr("width", extent[1][0] - extent[0][0]); } function redrawY(g) { g.select(".extent").attr("y", extent[0][1]); g.selectAll(".extent,.e>rect,.w>rect").attr("height", extent[1][1] - extent[0][1]); } function brushstart() { function mouse() { var touches = d3.event.changedTouches; return touches ? d3.touches(target, touches)[0] : d3.mouse(target); } function keydown() { if (d3.event.keyCode == 32) { if (!dragging) { center = null; origin[0] -= extent[1][0]; origin[1] -= extent[1][1]; dragging = 2; } d3_eventCancel(); } } function keyup() { if (d3.event.keyCode == 32 && dragging == 2) { origin[0] += extent[1][0]; origin[1] += extent[1][1]; dragging = 0; d3_eventCancel(); } } function brushmove() { var point = mouse(), moved = false; if (offset) { point[0] += offset[0]; point[1] += offset[1]; } if (!dragging) { if (d3.event.altKey) { if (!center) center = [ (extent[0][0] + extent[1][0]) / 2, (extent[0][1] + extent[1][1]) / 2 ]; origin[0] = extent[+(point[0] < center[0])][0]; origin[1] = extent[+(point[1] < center[1])][1]; } else center = null; } if (resizingX && move1(point, x, 0)) { redrawX(g); moved = true; } if (resizingY && move1(point, y, 1)) { redrawY(g); moved = true; } if (moved) { redraw(g); event_({ type: "brush", mode: dragging ? "move" : "resize" }); } } function move1(point, scale, i) { var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], size = extent[1][i] - extent[0][i], min, max; if (dragging) { r0 -= position; r1 -= size + position; } min = Math.max(r0, Math.min(r1, point[i])); if (dragging) { max = (min += position) + size; } else { if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); if (position < min) { max = min; min = position; } else { max = position; } } if (extent[0][i] !== min || extent[1][i] !== max) { extentDomain = null; extent[0][i] = min; extent[1][i] = max; return true; } } function brushend() { brushmove(); g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); d3.select("body").style("cursor", null); w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); event_({ type: "brushend" }); d3_eventCancel(); } var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), center, origin = mouse(), offset; var w = d3.select(window).on("mousemove.brush", brushmove).on("mouseup.brush", brushend).on("touchmove.brush", brushmove).on("touchend.brush", brushend).on("keydown.brush", keydown).on("keyup.brush", keyup); if (dragging) { origin[0] = extent[0][0] - origin[0]; origin[1] = extent[0][1] - origin[1]; } else if (resizing) { var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); offset = [ extent[1 - ex][0] - origin[0], extent[1 - ey][1] - origin[1] ]; origin[0] = extent[ex][0]; origin[1] = extent[ey][1]; } else if (d3.event.altKey) center = origin.slice(); g.style("pointer-events", "none").selectAll(".resize").style("display", null); d3.select("body").style("cursor", eventTarget.style("cursor")); event_({ type: "brushstart" }); brushmove(); d3_eventCancel(); } var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, resizes = d3_svg_brushResizes[0], extent = [ [ 0, 0 ], [ 0, 0 ] ], extentDomain; brush.x = function(z) { if (!arguments.length) return x; x = z; resizes = d3_svg_brushResizes[!x << 1 | !y]; return brush; }; brush.y = function(z) { if (!arguments.length) return y; y = z; resizes = d3_svg_brushResizes[!x << 1 | !y]; return brush; }; brush.extent = function(z) { var x0, x1, y0, y1, t; if (!arguments.length) { z = extentDomain || extent; if (x) { x0 = z[0][0], x1 = z[1][0]; if (!extentDomain) { x0 = extent[0][0], x1 = extent[1][0]; if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); if (x1 < x0) t = x0, x0 = x1, x1 = t; } } if (y) { y0 = z[0][1], y1 = z[1][1]; if (!extentDomain) { y0 = extent[0][1], y1 = extent[1][1]; if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); if (y1 < y0) t = y0, y0 = y1, y1 = t; } } return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; } extentDomain = [ [ 0, 0 ], [ 0, 0 ] ]; if (x) { x0 = z[0], x1 = z[1]; if (y) x0 = x0[0], x1 = x1[0]; extentDomain[0][0] = x0, extentDomain[1][0] = x1; if (x.invert) x0 = x(x0), x1 = x(x1); if (x1 < x0) t = x0, x0 = x1, x1 = t; extent[0][0] = x0 | 0, extent[1][0] = x1 | 0; } if (y) { y0 = z[0], y1 = z[1]; if (x) y0 = y0[1], y1 = y1[1]; extentDomain[0][1] = y0, extentDomain[1][1] = y1; if (y.invert) y0 = y(y0), y1 = y(y1); if (y1 < y0) t = y0, y0 = y1, y1 = t; extent[0][1] = y0 | 0, extent[1][1] = y1 | 0; } return brush; }; brush.clear = function() { extentDomain = null; extent[0][0] = extent[0][1] = extent[1][0] = extent[1][1] = 0; return brush; }; brush.empty = function() { return x && extent[0][0] === extent[1][0] || y && extent[0][1] === extent[1][1]; }; return d3.rebind(brush, event, "on"); }; var d3_svg_brushCursor = { n: "ns-resize", e: "ew-resize", s: "ns-resize", w: "ew-resize", nw: "nwse-resize", ne: "nesw-resize", se: "nwse-resize", sw: "nesw-resize" }; var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; d3.behavior = {}; d3.behavior.drag = function() { function drag() { this.on("mousedown.drag", mousedown).on("touchstart.drag", mousedown); } function mousedown() { function point() { var p = target.parentNode; return touchId ? d3.touches(p).filter(function(p) { return p.identifier === touchId; })[0] : d3.mouse(p); } function dragmove() { if (!target.parentNode) return dragend(); var p = point(), dx = p[0] - origin_[0], dy = p[1] - origin_[1]; moved |= dx | dy; origin_ = p; d3_eventCancel(); event_({ type: "drag", x: p[0] + offset[0], y: p[1] + offset[1], dx: dx, dy: dy }); } function dragend() { event_({ type: "dragend" }); if (moved) { d3_eventCancel(); if (d3.event.target === eventTarget) w.on("click.drag", click, true); } w.on(touchId ? "touchmove.drag-" + touchId : "mousemove.drag", null).on(touchId ? "touchend.drag-" + touchId : "mouseup.drag", null); } function click() { d3_eventCancel(); w.on("click.drag", null); } var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, touchId = d3.event.touches && d3.event.changedTouches[0].identifier, offset, origin_ = point(), moved = 0; var w = d3.select(window).on(touchId ? "touchmove.drag-" + touchId : "mousemove.drag", dragmove).on(touchId ? "touchend.drag-" + touchId : "mouseup.drag", dragend, true); if (origin) { offset = origin.apply(target, arguments); offset = [ offset.x - origin_[0], offset.y - origin_[1] ]; } else { offset = [ 0, 0 ]; } if (!touchId) d3_eventCancel(); event_({ type: "dragstart" }); } var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null; drag.origin = function(x) { if (!arguments.length) return origin; origin = x; return drag; }; return d3.rebind(drag, event, "on"); }; d3.behavior.zoom = function() { function zoom() { this.on("mousedown.zoom", mousedown).on("mousewheel.zoom", mousewheel).on("mousemove.zoom", mousemove).on("DOMMouseScroll.zoom", mousewheel).on("dblclick.zoom", dblclick).on("touchstart.zoom", touchstart).on("touchmove.zoom", touchmove).on("touchend.zoom", touchstart); } function location(p) { return [ (p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale ]; } function point(l) { return [ l[0] * scale + translate[0], l[1] * scale + translate[1] ]; } function scaleTo(s) { scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); } function translateTo(p, l) { l = point(l); translate[0] += p[0] - l[0]; translate[1] += p[1] - l[1]; } function dispatch(event) { if (x1) x1.domain(x0.range().map(function(x) { return (x - translate[0]) / scale; }).map(x0.invert)); if (y1) y1.domain(y0.range().map(function(y) { return (y - translate[1]) / scale; }).map(y0.invert)); d3.event.preventDefault(); event({ type: "zoom", scale: scale, translate: translate }); } function mousedown() { function mousemove() { moved = 1; translateTo(d3.mouse(target), l); dispatch(event_); } function mouseup() { if (moved) d3_eventCancel(); w.on("mousemove.zoom", null).on("mouseup.zoom", null); if (moved && d3.event.target === eventTarget) w.on("click.zoom", click, true); } function click() { d3_eventCancel(); w.on("click.zoom", null); } var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, moved = 0, w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), l = location(d3.mouse(target)); window.focus(); d3_eventCancel(); } function mousewheel() { if (!translate0) translate0 = location(d3.mouse(this)); scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale); translateTo(d3.mouse(this), translate0); dispatch(event.of(this, arguments)); } function mousemove() { translate0 = null; } function dblclick() { var p = d3.mouse(this), l = location(p); scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2); translateTo(p, l); dispatch(event.of(this, arguments)); } function touchstart() { var touches = d3.touches(this), now = Date.now(); scale0 = scale; translate0 = {}; touches.forEach(function(t) { translate0[t.identifier] = location(t); }); d3_eventCancel(); if (touches.length === 1) { if (now - touchtime < 500) { var p = touches[0], l = location(touches[0]); scaleTo(scale * 2); translateTo(p, l); dispatch(event.of(this, arguments)); } touchtime = now; } } function touchmove() { var touches = d3.touches(this), p0 = touches[0], l0 = translate0[p0.identifier]; if (p1 = touches[1]) { var p1, l1 = translate0[p1.identifier]; p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; scaleTo(d3.event.scale * scale0); } translateTo(p0, l0); touchtime = null; dispatch(event.of(this, arguments)); } var translate = [ 0, 0 ], translate0, scale = 1, scale0, scaleExtent = d3_behavior_zoomInfinity, event = d3_eventDispatch(zoom, "zoom"), x0, x1, y0, y1, touchtime; zoom.translate = function(x) { if (!arguments.length) return translate; translate = x.map(Number); return zoom; }; zoom.scale = function(x) { if (!arguments.length) return scale; scale = +x; return zoom; }; zoom.scaleExtent = function(x) { if (!arguments.length) return scaleExtent; scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number); return zoom; }; zoom.x = function(z) { if (!arguments.length) return x1; x1 = z; x0 = z.copy(); return zoom; }; zoom.y = function(z) { if (!arguments.length) return y1; y1 = z; y0 = z.copy(); return zoom; }; return d3.rebind(zoom, event, "on"); }; var d3_behavior_zoomDiv, d3_behavior_zoomInfinity = [ 0, Infinity ]; d3.layout = {}; d3.layout.bundle = function() { return function(links) { var paths = [], i = -1, n = links.length; while (++i < n) paths.push(d3_layout_bundlePath(links[i])); return paths; }; }; d3.layout.chord = function() { function relayout() { var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; chords = []; groups = []; k = 0, i = -1; while (++i < n) { x = 0, j = -1; while (++j < n) { x += matrix[i][j]; } groupSums.push(x); subgroupIndex.push(d3.range(n)); k += x; } if (sortGroups) { groupIndex.sort(function(a, b) { return sortGroups(groupSums[a], groupSums[b]); }); } if (sortSubgroups) { subgroupIndex.forEach(function(d, i) { d.sort(function(a, b) { return sortSubgroups(matrix[i][a], matrix[i][b]); }); }); } k = (2 * Math.PI - padding * n) / k; x = 0, i = -1; while (++i < n) { x0 = x, j = -1; while (++j < n) { var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; subgroups[di + "-" + dj] = { index: di, subindex: dj, startAngle: a0, endAngle: a1, value: v }; } groups[di] = { index: di, startAngle: x0, endAngle: x, value: (x - x0) / k }; x += padding; } i = -1; while (++i < n) { j = i - 1; while (++j < n) { var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; if (source.value || target.value) { chords.push(source.value < target.value ? { source: target, target: source } : { source: source, target: target }); } } } if (sortChords) resort(); } function resort() { chords.sort(function(a, b) { return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); }); } var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; chord.matrix = function(x) { if (!arguments.length) return matrix; n = (matrix = x) && matrix.length; chords = groups = null; return chord; }; chord.padding = function(x) { if (!arguments.length) return padding; padding = x; chords = groups = null; return chord; }; chord.sortGroups = function(x) { if (!arguments.length) return sortGroups; sortGroups = x; chords = groups = null; return chord; }; chord.sortSubgroups = function(x) { if (!arguments.length) return sortSubgroups; sortSubgroups = x; chords = null; return chord; }; chord.sortChords = function(x) { if (!arguments.length) return sortChords; sortChords = x; if (chords) resort(); return chord; }; chord.chords = function() { if (!chords) relayout(); return chords; }; chord.groups = function() { if (!groups) relayout(); return groups; }; return chord; }; d3.layout.force = function() { function repulse(node) { return function(quad, x1, y1, x2, y2) { if (quad.point !== node) { var dx = quad.cx - node.x, dy = quad.cy - node.y, dn = 1 / Math.sqrt(dx * dx + dy * dy); if ((x2 - x1) * dn < theta) { var k = quad.charge * dn * dn; node.px -= dx * k; node.py -= dy * k; return true; } if (quad.point && isFinite(dn)) { var k = quad.pointCharge * dn * dn; node.px -= dx * k; node.py -= dy * k; } } return !quad.charge; }; } function dragmove(d) { d.px = d3.event.x; d.py = d3.event.y; force.resume(); } var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, gravity = .1, theta = .8, interval, nodes = [], links = [], distances, strengths, charges; force.tick = function() { if ((alpha *= .99) < .005) { event.end({ type: "end", alpha: alpha = 0 }); return true; } var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; for (i = 0; i < m; ++i) { o = links[i]; s = o.source; t = o.target; x = t.x - s.x; y = t.y - s.y; if (l = x * x + y * y) { l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; x *= l; y *= l; t.x -= x * (k = s.weight / (t.weight + s.weight)); t.y -= y * k; s.x += x * (k = 1 - k); s.y += y * k; } } if (k = alpha * gravity) { x = size[0] / 2; y = size[1] / 2; i = -1; if (k) while (++i < n) { o = nodes[i]; o.x += (x - o.x) * k; o.y += (y - o.y) * k; } } if (charge) { d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); i = -1; while (++i < n) { if (!(o = nodes[i]).fixed) { q.visit(repulse(o)); } } } i = -1; while (++i < n) { o = nodes[i]; if (o.fixed) { o.x = o.px; o.y = o.py; } else { o.x -= (o.px - (o.px = o.x)) * friction; o.y -= (o.py - (o.py = o.y)) * friction; } } event.tick({ type: "tick", alpha: alpha }); }; force.nodes = function(x) { if (!arguments.length) return nodes; nodes = x; return force; }; force.links = function(x) { if (!arguments.length) return links; links = x; return force; }; force.size = function(x) { if (!arguments.length) return size; size = x; return force; }; force.linkDistance = function(x) { if (!arguments.length) return linkDistance; linkDistance = d3_functor(x); return force; }; force.distance = force.linkDistance; force.linkStrength = function(x) { if (!arguments.length) return linkStrength; linkStrength = d3_functor(x); return force; }; force.friction = function(x) { if (!arguments.length) return friction; friction = x; return force; }; force.charge = function(x) { if (!arguments.length) return charge; charge = typeof x === "function" ? x : +x; return force; }; force.gravity = function(x) { if (!arguments.length) return gravity; gravity = x; return force; }; force.theta = function(x) { if (!arguments.length) return theta; theta = x; return force; }; force.alpha = function(x) { if (!arguments.length) return alpha; if (alpha) { if (x > 0) alpha = x; else alpha = 0; } else if (x > 0) { event.start({ type: "start", alpha: alpha = x }); d3.timer(force.tick); } return force; }; force.start = function() { function position(dimension, size) { var neighbors = neighbor(i), j = -1, m = neighbors.length, x; while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x; return Math.random() * size; } function neighbor() { if (!neighbors) { neighbors = []; for (j = 0; j < n; ++j) { neighbors[j] = []; } for (j = 0; j < m; ++j) { var o = links[j]; neighbors[o.source.index].push(o.target); neighbors[o.target.index].push(o.source); } } return neighbors[i]; } var i, j, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; for (i = 0; i < n; ++i) { (o = nodes[i]).index = i; o.weight = 0; } distances = []; strengths = []; for (i = 0; i < m; ++i) { o = links[i]; if (typeof o.source == "number") o.source = nodes[o.source]; if (typeof o.target == "number") o.target = nodes[o.target]; distances[i] = linkDistance.call(this, o, i); strengths[i] = linkStrength.call(this, o, i); ++o.source.weight; ++o.target.weight; } for (i = 0; i < n; ++i) { o = nodes[i]; if (isNaN(o.x)) o.x = position("x", w); if (isNaN(o.y)) o.y = position("y", h); if (isNaN(o.px)) o.px = o.x; if (isNaN(o.py)) o.py = o.y; } charges = []; if (typeof charge === "function") { for (i = 0; i < n; ++i) { charges[i] = +charge.call(this, nodes[i], i); } } else { for (i = 0; i < n; ++i) { charges[i] = charge; } } return force.resume(); }; force.resume = function() { return force.alpha(.1); }; force.stop = function() { return force.alpha(0); }; force.drag = function() { if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart", d3_layout_forceDragstart).on("drag", dragmove).on("dragend", d3_layout_forceDragend); this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); }; return d3.rebind(force, event, "on"); }; d3.layout.partition = function() { function position(node, x, dx, dy) { var children = node.children; node.x = x; node.y = node.depth * dy; node.dx = dx; node.dy = dy; if (children && (n = children.length)) { var i = -1, n, c, d; dx = node.value ? dx / node.value : 0; while (++i < n) { position(c = children[i], x, d = c.value * dx, dy); x += d; } } } function depth(node) { var children = node.children, d = 0; if (children && (n = children.length)) { var i = -1, n; while (++i < n) d = Math.max(d, depth(children[i])); } return 1 + d; } function partition(d, i) { var nodes = hierarchy.call(this, d, i); position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); return nodes; } var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; partition.size = function(x) { if (!arguments.length) return size; size = x; return partition; }; return d3_layout_hierarchyRebind(partition, hierarchy); }; d3.layout.pie = function() { function pie(data, i) { var values = data.map(function(d, i) { return +value.call(pie, d, i); }); var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle); var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - startAngle) / d3.sum(values); var index = d3.range(data.length); if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { return values[j] - values[i]; } : function(i, j) { return sort(data[i], data[j]); }); var arcs = []; index.forEach(function(i) { var d; arcs[i] = { data: data[i], value: d = values[i], startAngle: a, endAngle: a += d * k }; }); return arcs; } var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = 2 * Math.PI; pie.value = function(x) { if (!arguments.length) return value; value = x; return pie; }; pie.sort = function(x) { if (!arguments.length) return sort; sort = x; return pie; }; pie.startAngle = function(x) { if (!arguments.length) return startAngle; startAngle = x; return pie; }; pie.endAngle = function(x) { if (!arguments.length) return endAngle; endAngle = x; return pie; }; return pie; }; var d3_layout_pieSortByValue = {}; d3.layout.stack = function() { function stack(data, index) { var series = data.map(function(d, i) { return values.call(stack, d, i); }); var points = series.map(function(d, i) { return d.map(function(v, i) { return [ x.call(stack, v, i), y.call(stack, v, i) ]; }); }); var orders = order.call(stack, points, index); series = d3.permute(series, orders); points = d3.permute(points, orders); var offsets = offset.call(stack, points, index); var n = series.length, m = series[0].length, i, j, o; for (j = 0; j < m; ++j) { out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); for (i = 1; i < n; ++i) { out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); } } return data; } var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; stack.values = function(x) { if (!arguments.length) return values; values = x; return stack; }; stack.order = function(x) { if (!arguments.length) return order; order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; return stack; }; stack.offset = function(x) { if (!arguments.length) return offset; offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; return stack; }; stack.x = function(z) { if (!arguments.length) return x; x = z; return stack; }; stack.y = function(z) { if (!arguments.length) return y; y = z; return stack; }; stack.out = function(z) { if (!arguments.length) return out; out = z; return stack; }; return stack; }; var d3_layout_stackOrders = d3.map({ "inside-out": function(data) { var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }), top = 0, bottom = 0, tops = [], bottoms = []; for (i = 0; i < n; ++i) { j = index[i]; if (top < bottom) { top += sums[j]; tops.push(j); } else { bottom += sums[j]; bottoms.push(j); } } return bottoms.reverse().concat(tops); }, reverse: function(data) { return d3.range(data.length).reverse(); }, "default": d3_layout_stackOrderDefault }); var d3_layout_stackOffsets = d3.map({ silhouette: function(data) { var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; for (j = 0; j < m; ++j) { for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; if (o > max) max = o; sums.push(o); } for (j = 0; j < m; ++j) { y0[j] = (max - sums[j]) / 2; } return y0; }, wiggle: function(data) { var n = data.length, x = data[0], m = x.length, max = 0, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; y0[0] = o = o0 = 0; for (j = 1; j < m; ++j) { for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; } s2 += s3 * data[i][j][1]; } y0[j] = o -= s1 ? s2 / s1 * dx : 0; if (o < o0) o0 = o; } for (j = 0; j < m; ++j) y0[j] -= o0; return y0; }, expand: function(data) { var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; for (j = 0; j < m; ++j) { for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; } for (j = 0; j < m; ++j) y0[j] = 0; return y0; }, zero: d3_layout_stackOffsetZero }); d3.layout.histogram = function() { function histogram(data, i) { var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; while (++i < m) { bin = bins[i] = []; bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); bin.y = 0; } if (m > 0) { i = -1; while (++i < n) { x = values[i]; if (x >= range[0] && x <= range[1]) { bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; bin.y += k; bin.push(data[i]); } } } return bins; } var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; histogram.value = function(x) { if (!arguments.length) return valuer; valuer = x; return histogram; }; histogram.range = function(x) { if (!arguments.length) return ranger; ranger = d3_functor(x); return histogram; }; histogram.bins = function(x) { if (!arguments.length) return binner; binner = typeof x === "number" ? function(range) { return d3_layout_histogramBinFixed(range, x); } : d3_functor(x); return histogram; }; histogram.frequency = function(x) { if (!arguments.length) return frequency; frequency = !!x; return histogram; }; return histogram; }; d3.layout.hierarchy = function() { function recurse(data, depth, nodes) { var childs = children.call(hierarchy, data, depth), node = d3_layout_hierarchyInline ? data : { data: data }; node.depth = depth; nodes.push(node); if (childs && (n = childs.length)) { var i = -1, n, c = node.children = [], v = 0, j = depth + 1, d; while (++i < n) { d = recurse(childs[i], j, nodes); d.parent = node; c.push(d); v += d.value; } if (sort) c.sort(sort); if (value) node.value = v; } else if (value) { node.value = +value.call(hierarchy, data, depth) || 0; } return node; } function revalue(node, depth) { var children = node.children, v = 0; if (children && (n = children.length)) { var i = -1, n, j = depth + 1; while (++i < n) v += revalue(children[i], j); } else if (value) { v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0; } if (value) node.value = v; return v; } function hierarchy(d) { var nodes = []; recurse(d, 0, nodes); return nodes; } var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; hierarchy.sort = function(x) { if (!arguments.length) return sort; sort = x; return hierarchy; }; hierarchy.children = function(x) { if (!arguments.length) return children; children = x; return hierarchy; }; hierarchy.value = function(x) { if (!arguments.length) return value; value = x; return hierarchy; }; hierarchy.revalue = function(root) { revalue(root, 0); return root; }; return hierarchy; }; var d3_layout_hierarchyInline = false; d3.layout.pack = function() { function pack(d, i) { var nodes = hierarchy.call(this, d, i), root = nodes[0]; root.x = 0; root.y = 0; d3_layout_treeVisitAfter(root, function(d) { d.r = Math.sqrt(d.value); }); d3_layout_treeVisitAfter(root, d3_layout_packSiblings); var w = size[0], h = size[1], k = Math.max(2 * root.r / w, 2 * root.r / h); if (padding > 0) { var dr = padding * k / 2; d3_layout_treeVisitAfter(root, function(d) { d.r += dr; }); d3_layout_treeVisitAfter(root, d3_layout_packSiblings); d3_layout_treeVisitAfter(root, function(d) { d.r -= dr; }); k = Math.max(2 * root.r / w, 2 * root.r / h); } d3_layout_packTransform(root, w / 2, h / 2, 1 / k); return nodes; } var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ]; pack.size = function(x) { if (!arguments.length) return size; size = x; return pack; }; pack.padding = function(_) { if (!arguments.length) return padding; padding = +_; return pack; }; return d3_layout_hierarchyRebind(pack, hierarchy); }; d3.layout.cluster = function() { function cluster(d, i) { var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0, kx, ky; d3_layout_treeVisitAfter(root, function(node) { var children = node.children; if (children && children.length) { node.x = d3_layout_clusterX(children); node.y = d3_layout_clusterY(children); } else { node.x = previousNode ? x += separation(node, previousNode) : 0; node.y = 0; previousNode = node; } }); var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; d3_layout_treeVisitAfter(root, function(node) { node.x = (node.x - x0) / (x1 - x0) * size[0]; node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; }); return nodes; } var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ]; cluster.separation = function(x) { if (!arguments.length) return separation; separation = x; return cluster; }; cluster.size = function(x) { if (!arguments.length) return size; size = x; return cluster; }; return d3_layout_hierarchyRebind(cluster, hierarchy); }; d3.layout.tree = function() { function tree(d, i) { function firstWalk(node, previousSibling) { var children = node.children, layout = node._tree; if (children && (n = children.length)) { var n, firstChild = children[0], previousChild, ancestor = firstChild, child, i = -1; while (++i < n) { child = children[i]; firstWalk(child, previousChild); ancestor = apportion(child, previousChild, ancestor); previousChild = child; } d3_layout_treeShift(node); var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim); if (previousSibling) { layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); layout.mod = layout.prelim - midpoint; } else { layout.prelim = midpoint; } } else { if (previousSibling) { layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); } } } function secondWalk(node, x) { node.x = node._tree.prelim + x; var children = node.children; if (children && (n = children.length)) { var i = -1, n; x += node._tree.mod; while (++i < n) { secondWalk(children[i], x); } } } function apportion(node, previousSibling, ancestor) { if (previousSibling) { var vip = node, vop = node, vim = previousSibling, vom = node.parent.children[0], sip = vip._tree.mod, sop = vop._tree.mod, sim = vim._tree.mod, som = vom._tree.mod, shift; while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { vom = d3_layout_treeLeft(vom); vop = d3_layout_treeRight(vop); vop._tree.ancestor = node; shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip); if (shift > 0) { d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift); sip += shift; sop += shift; } sim += vim._tree.mod; sip += vip._tree.mod; som += vom._tree.mod; sop += vop._tree.mod; } if (vim && !d3_layout_treeRight(vop)) { vop._tree.thread = vim; vop._tree.mod += sim - sop; } if (vip && !d3_layout_treeLeft(vom)) { vom._tree.thread = vip; vom._tree.mod += sip - som; ancestor = node; } } return ancestor; } var nodes = hierarchy.call(this, d, i), root = nodes[0]; d3_layout_treeVisitAfter(root, function(node, previousSibling) { node._tree = { ancestor: node, prelim: 0, mod: 0, change: 0, shift: 0, number: previousSibling ? previousSibling._tree.number + 1 : 0 }; }); firstWalk(root); secondWalk(root, -root._tree.prelim); var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), right = d3_layout_treeSearch(root, d3_layout_treeRightmost), deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2, y1 = deep.depth || 1; d3_layout_treeVisitAfter(root, function(node) { node.x = (node.x - x0) / (x1 - x0) * size[0]; node.y = node.depth / y1 * size[1]; delete node._tree; }); return nodes; } var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ]; tree.separation = function(x) { if (!arguments.length) return separation; separation = x; return tree; }; tree.size = function(x) { if (!arguments.length) return size; size = x; return tree; }; return d3_layout_hierarchyRebind(tree, hierarchy); }; d3.layout.treemap = function() { function scale(children, k) { var i = -1, n = children.length, child, area; while (++i < n) { area = (child = children[i]).value * (k < 0 ? 0 : k); child.area = isNaN(area) || area <= 0 ? 0 : area; } } function squarify(node) { var children = node.children; if (children && children.length) { var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = Math.min(rect.dx, rect.dy), n; scale(remaining, rect.dx * rect.dy / node.value); row.area = 0; while ((n = remaining.length) > 0) { row.push(child = remaining[n - 1]); row.area += child.area; if ((score = worst(row, u)) <= best) { remaining.pop(); best = score; } else { row.area -= row.pop().area; position(row, u, rect, false); u = Math.min(rect.dx, rect.dy); row.length = row.area = 0; best = Infinity; } } if (row.length) { position(row, u, rect, true); row.length = row.area = 0; } children.forEach(squarify); } } function stickify(node) { var children = node.children; if (children && children.length) { var rect = pad(node), remaining = children.slice(), child, row = []; scale(remaining, rect.dx * rect.dy / node.value); row.area = 0; while (child = remaining.pop()) { row.push(child); row.area += child.area; if (child.z != null) { position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); row.length = row.area = 0; } } children.forEach(stickify); } } function worst(row, u) { var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; while (++i < n) { if (!(r = row[i].area)) continue; if (r < rmin) rmin = r; if (r > rmax) rmax = r; } s *= s; u *= u; return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; } function position(row, u, rect, flush) { var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; if (u == rect.dx) { if (flush || v > rect.dy) v = rect.dy; while (++i < n) { o = row[i]; o.x = x; o.y = y; o.dy = v; x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); } o.z = true; o.dx += rect.x + rect.dx - x; rect.y += v; rect.dy -= v; } else { if (flush || v > rect.dx) v = rect.dx; while (++i < n) { o = row[i]; o.x = x; o.y = y; o.dx = v; y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); } o.z = false; o.dy += rect.y + rect.dy - y; rect.x += v; rect.dx -= v; } } function treemap(d) { var nodes = stickies || hierarchy(d), root = nodes[0]; root.x = 0; root.y = 0; root.dx = size[0]; root.dy = size[1]; if (stickies) hierarchy.revalue(root); scale([ root ], root.dx * root.dy / root.value); (stickies ? stickify : squarify)(root); if (sticky) stickies = nodes; return nodes; } var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, ratio = .5 * (1 + Math.sqrt(5)); treemap.size = function(x) { if (!arguments.length) return size; size = x; return treemap; }; treemap.padding = function(x) { function padFunction(node) { var p = x.call(treemap, node, node.depth); return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); } function padConstant(node) { return d3_layout_treemapPad(node, x); } if (!arguments.length) return padding; var type; pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], padConstant) : padConstant; return treemap; }; treemap.round = function(x) { if (!arguments.length) return round != Number; round = x ? Math.round : Number; return treemap; }; treemap.sticky = function(x) { if (!arguments.length) return sticky; sticky = x; stickies = null; return treemap; }; treemap.ratio = function(x) { if (!arguments.length) return ratio; ratio = x; return treemap; }; return d3_layout_hierarchyRebind(treemap, hierarchy); }; d3.csv = d3_dsv(",", "text/csv"); d3.tsv = d3_dsv(" ", "text/tab-separated-values"); d3.geo = {}; var d3_geo_radians = Math.PI / 180; d3.geo.azimuthal = function() { function azimuthal(coordinates) { var x1 = coordinates[0] * d3_geo_radians - x0, y1 = coordinates[1] * d3_geo_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1), cy1 = Math.cos(y1), sy1 = Math.sin(y1), cc = mode !== "orthographic" ? sy0 * sy1 + cy0 * cy1 * cx1 : null, c, k = mode === "stereographic" ? 1 / (1 + cc) : mode === "gnomonic" ? 1 / cc : mode === "equidistant" ? (c = Math.acos(cc), c ? c / Math.sin(c) : 0) : mode === "equalarea" ? Math.sqrt(2 / (1 + cc)) : 1, x = k * cy1 * sx1, y = k * (sy0 * cy1 * cx1 - cy0 * sy1); return [ scale * x + translate[0], scale * y + translate[1] ]; } var mode = "orthographic", origin, scale = 200, translate = [ 480, 250 ], x0, y0, cy0, sy0; azimuthal.invert = function(coordinates) { var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p = Math.sqrt(x * x + y * y), c = mode === "stereographic" ? 2 * Math.atan(p) : mode === "gnomonic" ? Math.atan(p) : mode === "equidistant" ? p : mode === "equalarea" ? 2 * Math.asin(.5 * p) : Math.asin(p), sc = Math.sin(c), cc = Math.cos(c); return [ (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_geo_radians, Math.asin(cc * sy0 - (p ? y * sc * cy0 / p : 0)) / d3_geo_radians ]; }; azimuthal.mode = function(x) { if (!arguments.length) return mode; mode = x + ""; return azimuthal; }; azimuthal.origin = function(x) { if (!arguments.length) return origin; origin = x; x0 = origin[0] * d3_geo_radians; y0 = origin[1] * d3_geo_radians; cy0 = Math.cos(y0); sy0 = Math.sin(y0); return azimuthal; }; azimuthal.scale = function(x) { if (!arguments.length) return scale; scale = +x; return azimuthal; }; azimuthal.translate = function(x) { if (!arguments.length) return translate; translate = [ +x[0], +x[1] ]; return azimuthal; }; return azimuthal.origin([ 0, 0 ]); }; d3.geo.albers = function() { function albers(coordinates) { var t = n * (d3_geo_radians * coordinates[0] - lng0), p = Math.sqrt(C - 2 * n * Math.sin(d3_geo_radians * coordinates[1])) / n; return [ scale * p * Math.sin(t) + translate[0], scale * (p * Math.cos(t) - p0) + translate[1] ]; } function reload() { var phi1 = d3_geo_radians * parallels[0], phi2 = d3_geo_radians * parallels[1], lat0 = d3_geo_radians * origin[1], s = Math.sin(phi1), c = Math.cos(phi1); lng0 = d3_geo_radians * origin[0]; n = .5 * (s + Math.sin(phi2)); C = c * c + 2 * n * s; p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n; return albers; } var origin = [ -98, 38 ], parallels = [ 29.5, 45.5 ], scale = 1e3, translate = [ 480, 250 ], lng0, n, C, p0; albers.invert = function(coordinates) { var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p0y = p0 + y, t = Math.atan2(x, p0y), p = Math.sqrt(x * x + p0y * p0y); return [ (lng0 + t / n) / d3_geo_radians, Math.asin((C - p * p * n * n) / (2 * n)) / d3_geo_radians ]; }; albers.origin = function(x) { if (!arguments.length) return origin; origin = [ +x[0], +x[1] ]; return reload(); }; albers.parallels = function(x) { if (!arguments.length) return parallels; parallels = [ +x[0], +x[1] ]; return reload(); }; albers.scale = function(x) { if (!arguments.length) return scale; scale = +x; return albers; }; albers.translate = function(x) { if (!arguments.length) return translate; translate = [ +x[0], +x[1] ]; return albers; }; return reload(); }; d3.geo.albersUsa = function() { function albersUsa(coordinates) { var lon = coordinates[0], lat = coordinates[1]; return (lat > 50 ? alaska : lon < -140 ? hawaii : lat < 21 ? puertoRico : lower48)(coordinates); } var lower48 = d3.geo.albers(); var alaska = d3.geo.albers().origin([ -160, 60 ]).parallels([ 55, 65 ]); var hawaii = d3.geo.albers().origin([ -160, 20 ]).parallels([ 8, 18 ]); var puertoRico = d3.geo.albers().origin([ -60, 10 ]).parallels([ 8, 18 ]); albersUsa.scale = function(x) { if (!arguments.length) return lower48.scale(); lower48.scale(x); alaska.scale(x * .6); hawaii.scale(x); puertoRico.scale(x * 1.5); return albersUsa.translate(lower48.translate()); }; albersUsa.translate = function(x) { if (!arguments.length) return lower48.translate(); var dz = lower48.scale() / 1e3, dx = x[0], dy = x[1]; lower48.translate(x); alaska.translate([ dx - 400 * dz, dy + 170 * dz ]); hawaii.translate([ dx - 190 * dz, dy + 200 * dz ]); puertoRico.translate([ dx + 580 * dz, dy + 430 * dz ]); return albersUsa; }; return albersUsa.scale(lower48.scale()); }; d3.geo.bonne = function() { function bonne(coordinates) { var x = coordinates[0] * d3_geo_radians - x0, y = coordinates[1] * d3_geo_radians - y0; if (y1) { var p = c1 + y1 - y, E = x * Math.cos(y) / p; x = p * Math.sin(E); y = p * Math.cos(E) - c1; } else { x *= Math.cos(y); y *= -1; } return [ scale * x + translate[0], scale * y + translate[1] ]; } var scale = 200, translate = [ 480, 250 ], x0, y0, y1, c1; bonne.invert = function(coordinates) { var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; if (y1) { var c = c1 + y, p = Math.sqrt(x * x + c * c); y = c1 + y1 - p; x = x0 + p * Math.atan2(x, c) / Math.cos(y); } else { y *= -1; x /= Math.cos(y); } return [ x / d3_geo_radians, y / d3_geo_radians ]; }; bonne.parallel = function(x) { if (!arguments.length) return y1 / d3_geo_radians; c1 = 1 / Math.tan(y1 = x * d3_geo_radians); return bonne; }; bonne.origin = function(x) { if (!arguments.length) return [ x0 / d3_geo_radians, y0 / d3_geo_radians ]; x0 = x[0] * d3_geo_radians; y0 = x[1] * d3_geo_radians; return bonne; }; bonne.scale = function(x) { if (!arguments.length) return scale; scale = +x; return bonne; }; bonne.translate = function(x) { if (!arguments.length) return translate; translate = [ +x[0], +x[1] ]; return bonne; }; return bonne.origin([ 0, 0 ]).parallel(45); }; d3.geo.equirectangular = function() { function equirectangular(coordinates) { var x = coordinates[0] / 360, y = -coordinates[1] / 360; return [ scale * x + translate[0], scale * y + translate[1] ]; } var scale = 500, translate = [ 480, 250 ]; equirectangular.invert = function(coordinates) { var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; return [ 360 * x, -360 * y ]; }; equirectangular.scale = function(x) { if (!arguments.length) return scale; scale = +x; return equirectangular; }; equirectangular.translate = function(x) { if (!arguments.length) return translate; translate = [ +x[0], +x[1] ]; return equirectangular; }; return equirectangular; }; d3.geo.mercator = function() { function mercator(coordinates) { var x = coordinates[0] / 360, y = -(Math.log(Math.tan(Math.PI / 4 + coordinates[1] * d3_geo_radians / 2)) / d3_geo_radians) / 360; return [ scale * x + translate[0], scale * Math.max(-.5, Math.min(.5, y)) + translate[1] ]; } var scale = 500, translate = [ 480, 250 ]; mercator.invert = function(coordinates) { var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; return [ 360 * x, 2 * Math.atan(Math.exp(-360 * y * d3_geo_radians)) / d3_geo_radians - 90 ]; }; mercator.scale = function(x) { if (!arguments.length) return scale; scale = +x; return mercator; }; mercator.translate = function(x) { if (!arguments.length) return translate; translate = [ +x[0], +x[1] ]; return mercator; }; return mercator; }; d3.geo.path = function() { function path(d, i) { if (typeof pointRadius === "function") pointCircle = d3_path_circle(pointRadius.apply(this, arguments)); pathType(d); var result = buffer.length ? buffer.join("") : null; buffer = []; return result; } function project(coordinates) { return projection(coordinates).join(","); } function polygonArea(coordinates) { var sum = area(coordinates[0]), i = 0, n = coordinates.length; while (++i < n) sum -= area(coordinates[i]); return sum; } function polygonCentroid(coordinates) { var polygon = d3.geom.polygon(coordinates[0].map(projection)), area = polygon.area(), centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1), x = centroid[0], y = centroid[1], z = area, i = 0, n = coordinates.length; while (++i < n) { polygon = d3.geom.polygon(coordinates[i].map(projection)); area = polygon.area(); centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1); x -= centroid[0]; y -= centroid[1]; z -= area; } return [ x, y, 6 * z ]; } function area(coordinates) { return Math.abs(d3.geom.polygon(coordinates.map(projection)).area()); } var pointRadius = 4.5, pointCircle = d3_path_circle(pointRadius), projection = d3.geo.albersUsa(), buffer = []; var pathType = d3_geo_type({ FeatureCollection: function(o) { var features = o.features, i = -1, n = features.length; while (++i < n) buffer.push(pathType(features[i].geometry)); }, Feature: function(o) { pathType(o.geometry); }, Point: function(o) { buffer.push("M", project(o.coordinates), pointCircle); }, MultiPoint: function(o) { var coordinates = o.coordinates, i = -1, n = coordinates.length; while (++i < n) buffer.push("M", project(coordinates[i]), pointCircle); }, LineString: function(o) { var coordinates = o.coordinates, i = -1, n = coordinates.length; buffer.push("M"); while (++i < n) buffer.push(project(coordinates[i]), "L"); buffer.pop(); }, MultiLineString: function(o) { var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m; while (++i < n) { subcoordinates = coordinates[i]; j = -1; m = subcoordinates.length; buffer.push("M"); while (++j < m) buffer.push(project(subcoordinates[j]), "L"); buffer.pop(); } }, Polygon: function(o) { var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m; while (++i < n) { subcoordinates = coordinates[i]; j = -1; if ((m = subcoordinates.length - 1) > 0) { buffer.push("M"); while (++j < m) buffer.push(project(subcoordinates[j]), "L"); buffer[buffer.length - 1] = "Z"; } } }, MultiPolygon: function(o) { var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m, subsubcoordinates, k, p; while (++i < n) { subcoordinates = coordinates[i]; j = -1; m = subcoordinates.length; while (++j < m) { subsubcoordinates = subcoordinates[j]; k = -1; if ((p = subsubcoordinates.length - 1) > 0) { buffer.push("M"); while (++k < p) buffer.push(project(subsubcoordinates[k]), "L"); buffer[buffer.length - 1] = "Z"; } } } }, GeometryCollection: function(o) { var geometries = o.geometries, i = -1, n = geometries.length; while (++i < n) buffer.push(pathType(geometries[i])); } }); var areaType = path.area = d3_geo_type({ FeatureCollection: function(o) { var area = 0, features = o.features, i = -1, n = features.length; while (++i < n) area += areaType(features[i]); return area; }, Feature: function(o) { return areaType(o.geometry); }, Polygon: function(o) { return polygonArea(o.coordinates); }, MultiPolygon: function(o) { var sum = 0, coordinates = o.coordinates, i = -1, n = coordinates.length; while (++i < n) sum += polygonArea(coordinates[i]); return sum; }, GeometryCollection: function(o) { var sum = 0, geometries = o.geometries, i = -1, n = geometries.length; while (++i < n) sum += areaType(geometries[i]); return sum; } }, 0); var centroidType = path.centroid = d3_geo_type({ Feature: function(o) { return centroidType(o.geometry); }, Polygon: function(o) { var centroid = polygonCentroid(o.coordinates); return [ centroid[0] / centroid[2], centroid[1] / centroid[2] ]; }, MultiPolygon: function(o) { var area = 0, coordinates = o.coordinates, centroid, x = 0, y = 0, z = 0, i = -1, n = coordinates.length; while (++i < n) { centroid = polygonCentroid(coordinates[i]); x += centroid[0]; y += centroid[1]; z += centroid[2]; } return [ x / z, y / z ]; } }); path.projection = function(x) { projection = x; return path; }; path.pointRadius = function(x) { if (typeof x === "function") pointRadius = x; else { pointRadius = +x; pointCircle = d3_path_circle(pointRadius); } return path; }; return path; }; d3.geo.bounds = function(feature) { var left = Infinity, bottom = Infinity, right = -Infinity, top = -Infinity; d3_geo_bounds(feature, function(x, y) { if (x < left) left = x; if (x > right) right = x; if (y < bottom) bottom = y; if (y > top) top = y; }); return [ [ left, bottom ], [ right, top ] ]; }; var d3_geo_boundsTypes = { Feature: d3_geo_boundsFeature, FeatureCollection: d3_geo_boundsFeatureCollection, GeometryCollection: d3_geo_boundsGeometryCollection, LineString: d3_geo_boundsLineString, MultiLineString: d3_geo_boundsMultiLineString, MultiPoint: d3_geo_boundsLineString, MultiPolygon: d3_geo_boundsMultiPolygon, Point: d3_geo_boundsPoint, Polygon: d3_geo_boundsPolygon }; d3.geo.circle = function() { function circle() {} function visible(point) { return arc.distance(point) < radians; } function clip(coordinates) { var i = -1, n = coordinates.length, clipped = [], p0, p1, p2, d0, d1; while (++i < n) { d1 = arc.distance(p2 = coordinates[i]); if (d1 < radians) { if (p1) clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1))); clipped.push(p2); p0 = p1 = null; } else { p1 = p2; if (!p0 && clipped.length) { clipped.push(d3_geo_greatArcInterpolate(clipped[clipped.length - 1], p1)((radians - d0) / (d1 - d0))); p0 = p1; } } d0 = d1; } p0 = coordinates[0]; p1 = clipped[0]; if (p1 && p2[0] === p0[0] && p2[1] === p0[1] && !(p2[0] === p1[0] && p2[1] === p1[1])) { clipped.push(p1); } return resample(clipped); } function resample(coordinates) { var i = 0, n = coordinates.length, j, m, resampled = n ? [ coordinates[0] ] : coordinates, resamples, origin = arc.source(); while (++i < n) { resamples = arc.source(coordinates[i - 1])(coordinates[i]).coordinates; for (j = 0, m = resamples.length; ++j < m; ) resampled.push(resamples[j]); } arc.source(origin); return resampled; } var origin = [ 0, 0 ], degrees = 90 - .01, radians = degrees * d3_geo_radians, arc = d3.geo.greatArc().source(origin).target(d3_identity); circle.clip = function(d) { if (typeof origin === "function") arc.source(origin.apply(this, arguments)); return clipType(d) || null; }; var clipType = d3_geo_type({ FeatureCollection: function(o) { var features = o.features.map(clipType).filter(d3_identity); return features && (o = Object.create(o), o.features = features, o); }, Feature: function(o) { var geometry = clipType(o.geometry); return geometry && (o = Object.create(o), o.geometry = geometry, o); }, Point: function(o) { return visible(o.coordinates) && o; }, MultiPoint: function(o) { var coordinates = o.coordinates.filter(visible); return coordinates.length && { type: o.type, coordinates: coordinates }; }, LineString: function(o) { var coordinates = clip(o.coordinates); return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); }, MultiLineString: function(o) { var coordinates = o.coordinates.map(clip).filter(function(d) { return d.length; }); return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); }, Polygon: function(o) { var coordinates = o.coordinates.map(clip); return coordinates[0].length && (o = Object.create(o), o.coordinates = coordinates, o); }, MultiPolygon: function(o) { var coordinates = o.coordinates.map(function(d) { return d.map(clip); }).filter(function(d) { return d[0].length; }); return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); }, GeometryCollection: function(o) { var geometries = o.geometries.map(clipType).filter(d3_identity); return geometries.length && (o = Object.create(o), o.geometries = geometries, o); } }); circle.origin = function(x) { if (!arguments.length) return origin; origin = x; if (typeof origin !== "function") arc.source(origin); return circle; }; circle.angle = function(x) { if (!arguments.length) return degrees; radians = (degrees = +x) * d3_geo_radians; return circle; }; return d3.rebind(circle, arc, "precision"); }; d3.geo.greatArc = function() { function greatArc() { var d = greatArc.distance.apply(this, arguments), t = 0, dt = precision / d, coordinates = [ p0 ]; while ((t += dt) < 1) coordinates.push(interpolate(t)); coordinates.push(p1); return { type: "LineString", coordinates: coordinates }; } var source = d3_geo_greatArcSource, p0, target = d3_geo_greatArcTarget, p1, precision = 6 * d3_geo_radians, interpolate = d3_geo_greatArcInterpolator(); greatArc.distance = function() { if (typeof source === "function") interpolate.source(p0 = source.apply(this, arguments)); if (typeof target === "function") interpolate.target(p1 = target.apply(this, arguments)); return interpolate.distance(); }; greatArc.source = function(_) { if (!arguments.length) return source; source = _; if (typeof source !== "function") interpolate.source(p0 = source); return greatArc; }; greatArc.target = function(_) { if (!arguments.length) return target; target = _; if (typeof target !== "function") interpolate.target(p1 = target); return greatArc; }; greatArc.precision = function(_) { if (!arguments.length) return precision / d3_geo_radians; precision = _ * d3_geo_radians; return greatArc; }; return greatArc; }; d3.geo.greatCircle = d3.geo.circle; d3.geom = {}; d3.geom.contour = function(grid, start) { var s = start || d3_geom_contourStart(grid), c = [], x = s[0], y = s[1], dx = 0, dy = 0, pdx = NaN, pdy = NaN, i = 0; do { i = 0; if (grid(x - 1, y - 1)) i += 1; if (grid(x, y - 1)) i += 2; if (grid(x - 1, y)) i += 4; if (grid(x, y)) i += 8; if (i === 6) { dx = pdy === -1 ? -1 : 1; dy = 0; } else if (i === 9) { dx = 0; dy = pdx === 1 ? -1 : 1; } else { dx = d3_geom_contourDx[i]; dy = d3_geom_contourDy[i]; } if (dx != pdx && dy != pdy) { c.push([ x, y ]); pdx = dx; pdy = dy; } x += dx; y += dy; } while (s[0] != x || s[1] != y); return c; }; var d3_geom_contourDx = [ 1, 0, 1, 1, -1, 0, -1, 1, 0, 0, 0, 0, -1, 0, -1, NaN ], d3_geom_contourDy = [ 0, -1, 0, 0, 0, -1, 0, 0, 1, -1, 1, 1, 0, -1, 0, NaN ]; d3.geom.hull = function(vertices) { if (vertices.length < 3) return []; var len = vertices.length, plen = len - 1, points = [], stack = [], i, j, h = 0, x1, y1, x2, y2, u, v, a, sp; for (i = 1; i < len; ++i) { if (vertices[i][1] < vertices[h][1]) { h = i; } else if (vertices[i][1] == vertices[h][1]) { h = vertices[i][0] < vertices[h][0] ? i : h; } } for (i = 0; i < len; ++i) { if (i === h) continue; y1 = vertices[i][1] - vertices[h][1]; x1 = vertices[i][0] - vertices[h][0]; points.push({ angle: Math.atan2(y1, x1), index: i }); } points.sort(function(a, b) { return a.angle - b.angle; }); a = points[0].angle; v = points[0].index; u = 0; for (i = 1; i < plen; ++i) { j = points[i].index; if (a == points[i].angle) { x1 = vertices[v][0] - vertices[h][0]; y1 = vertices[v][1] - vertices[h][1]; x2 = vertices[j][0] - vertices[h][0]; y2 = vertices[j][1] - vertices[h][1]; if (x1 * x1 + y1 * y1 >= x2 * x2 + y2 * y2) { points[i].index = -1; } else { points[u].index = -1; a = points[i].angle; u = i; v = j; } } else { a = points[i].angle; u = i; v = j; } } stack.push(h); for (i = 0, j = 0; i < 2; ++j) { if (points[j].index !== -1) { stack.push(points[j].index); i++; } } sp = stack.length; for (; j < plen; ++j) { if (points[j].index === -1) continue; while (!d3_geom_hullCCW(stack[sp - 2], stack[sp - 1], points[j].index, vertices)) { --sp; } stack[sp++] = points[j].index; } var poly = []; for (i = 0; i < sp; ++i) { poly.push(vertices[stack[i]]); } return poly; }; d3.geom.polygon = function(coordinates) { coordinates.area = function() { var i = 0, n = coordinates.length, a = coordinates[n - 1][0] * coordinates[0][1], b = coordinates[n - 1][1] * coordinates[0][0]; while (++i < n) { a += coordinates[i - 1][0] * coordinates[i][1]; b += coordinates[i - 1][1] * coordinates[i][0]; } return (b - a) * .5; }; coordinates.centroid = function(k) { var i = -1, n = coordinates.length, x = 0, y = 0, a, b = coordinates[n - 1], c; if (!arguments.length) k = -1 / (6 * coordinates.area()); while (++i < n) { a = b; b = coordinates[i]; c = a[0] * b[1] - b[0] * a[1]; x += (a[0] + b[0]) * c; y += (a[1] + b[1]) * c; } return [ x * k, y * k ]; }; coordinates.clip = function(subject) { var input, i = -1, n = coordinates.length, j, m, a = coordinates[n - 1], b, c, d; while (++i < n) { input = subject.slice(); subject.length = 0; b = coordinates[i]; c = input[(m = input.length) - 1]; j = -1; while (++j < m) { d = input[j]; if (d3_geom_polygonInside(d, a, b)) { if (!d3_geom_polygonInside(c, a, b)) { subject.push(d3_geom_polygonIntersect(c, d, a, b)); } subject.push(d); } else if (d3_geom_polygonInside(c, a, b)) { subject.push(d3_geom_polygonIntersect(c, d, a, b)); } c = d; } a = b; } return subject; }; return coordinates; }; d3.geom.voronoi = function(vertices) { var polygons = vertices.map(function() { return []; }); d3_voronoi_tessellate(vertices, function(e) { var s1, s2, x1, x2, y1, y2; if (e.a === 1 && e.b >= 0) { s1 = e.ep.r; s2 = e.ep.l; } else { s1 = e.ep.l; s2 = e.ep.r; } if (e.a === 1) { y1 = s1 ? s1.y : -1e6; x1 = e.c - e.b * y1; y2 = s2 ? s2.y : 1e6; x2 = e.c - e.b * y2; } else { x1 = s1 ? s1.x : -1e6; y1 = e.c - e.a * x1; x2 = s2 ? s2.x : 1e6; y2 = e.c - e.a * x2; } var v1 = [ x1, y1 ], v2 = [ x2, y2 ]; polygons[e.region.l.index].push(v1, v2); polygons[e.region.r.index].push(v1, v2); }); return polygons.map(function(polygon, i) { var cx = vertices[i][0], cy = vertices[i][1]; polygon.forEach(function(v) { v.angle = Math.atan2(v[0] - cx, v[1] - cy); }); return polygon.sort(function(a, b) { return a.angle - b.angle; }).filter(function(d, i) { return !i || d.angle - polygon[i - 1].angle > 1e-10; }); }); }; var d3_voronoi_opposite = { l: "r", r: "l" }; d3.geom.delaunay = function(vertices) { var edges = vertices.map(function() { return []; }), triangles = []; d3_voronoi_tessellate(vertices, function(e) { edges[e.region.l.index].push(vertices[e.region.r.index]); }); edges.forEach(function(edge, i) { var v = vertices[i], cx = v[0], cy = v[1]; edge.forEach(function(v) { v.angle = Math.atan2(v[0] - cx, v[1] - cy); }); edge.sort(function(a, b) { return a.angle - b.angle; }); for (var j = 0, m = edge.length - 1; j < m; j++) { triangles.push([ v, edge[j], edge[j + 1] ]); } }); return triangles; }; d3.geom.quadtree = function(points, x1, y1, x2, y2) { function insert(n, p, x1, y1, x2, y2) { if (isNaN(p.x) || isNaN(p.y)) return; if (n.leaf) { var v = n.point; if (v) { if (Math.abs(v.x - p.x) + Math.abs(v.y - p.y) < .01) { insertChild(n, p, x1, y1, x2, y2); } else { n.point = null; insertChild(n, v, x1, y1, x2, y2); insertChild(n, p, x1, y1, x2, y2); } } else { n.point = p; } } else { insertChild(n, p, x1, y1, x2, y2); } } function insertChild(n, p, x1, y1, x2, y2) { var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = p.x >= sx, bottom = p.y >= sy, i = (bottom << 1) + right; n.leaf = false; n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); if (right) x1 = sx; else x2 = sx; if (bottom) y1 = sy; else y2 = sy; insert(n, p, x1, y1, x2, y2); } var p, i = -1, n = points.length; if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint); if (arguments.length < 5) { if (arguments.length === 3) { y2 = x2 = y1; y1 = x1; } else { x1 = y1 = Infinity; x2 = y2 = -Infinity; while (++i < n) { p = points[i]; if (p.x < x1) x1 = p.x; if (p.y < y1) y1 = p.y; if (p.x > x2) x2 = p.x; if (p.y > y2) y2 = p.y; } var dx = x2 - x1, dy = y2 - y1; if (dx > dy) y2 = y1 + dx; else x2 = x1 + dy; } } var root = d3_geom_quadtreeNode(); root.add = function(p) { insert(root, p, x1, y1, x2, y2); }; root.visit = function(f) { d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2); }; points.forEach(root.add); return root; }; d3.time = {}; var d3_time = Date, d3_time_daySymbols = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; d3_time_utc.prototype = { getDate: function() { return this._.getUTCDate(); }, getDay: function() { return this._.getUTCDay(); }, getFullYear: function() { return this._.getUTCFullYear(); }, getHours: function() { return this._.getUTCHours(); }, getMilliseconds: function() { return this._.getUTCMilliseconds(); }, getMinutes: function() { return this._.getUTCMinutes(); }, getMonth: function() { return this._.getUTCMonth(); }, getSeconds: function() { return this._.getUTCSeconds(); }, getTime: function() { return this._.getTime(); }, getTimezoneOffset: function() { return 0; }, valueOf: function() { return this._.valueOf(); }, setDate: function() { d3_time_prototype.setUTCDate.apply(this._, arguments); }, setDay: function() { d3_time_prototype.setUTCDay.apply(this._, arguments); }, setFullYear: function() { d3_time_prototype.setUTCFullYear.apply(this._, arguments); }, setHours: function() { d3_time_prototype.setUTCHours.apply(this._, arguments); }, setMilliseconds: function() { d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); }, setMinutes: function() { d3_time_prototype.setUTCMinutes.apply(this._, arguments); }, setMonth: function() { d3_time_prototype.setUTCMonth.apply(this._, arguments); }, setSeconds: function() { d3_time_prototype.setUTCSeconds.apply(this._, arguments); }, setTime: function() { d3_time_prototype.setTime.apply(this._, arguments); } }; var d3_time_prototype = Date.prototype; var d3_time_formatDateTime = "%a %b %e %H:%M:%S %Y", d3_time_formatDate = "%m/%d/%y", d3_time_formatTime = "%H:%M:%S"; var d3_time_days = d3_time_daySymbols, d3_time_dayAbbreviations = d3_time_days.map(d3_time_formatAbbreviate), d3_time_months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], d3_time_monthAbbreviations = d3_time_months.map(d3_time_formatAbbreviate); d3.time.format = function(template) { function format(date) { var string = [], i = -1, j = 0, c, f; while (++i < n) { if (template.charCodeAt(i) == 37) { string.push(template.substring(j, i), (f = d3_time_formats[c = template.charAt(++i)]) ? f(date) : c); j = i + 1; } } string.push(template.substring(j, i)); return string.join(""); } var n = template.length; format.parse = function(string) { var d = { y: 1900, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0 }, i = d3_time_parse(d, template, string, 0); if (i != string.length) return null; if ("p" in d) d.H = d.H % 12 + d.p * 12; var date = new d3_time; date.setFullYear(d.y, d.m, d.d); date.setHours(d.H, d.M, d.S, d.L); return date; }; format.toString = function() { return template; }; return format; }; var d3_time_zfill2 = d3.format("02d"), d3_time_zfill3 = d3.format("03d"), d3_time_zfill4 = d3.format("04d"), d3_time_sfill2 = d3.format("2d"); var d3_time_dayRe = d3_time_formatRe(d3_time_days), d3_time_dayAbbrevRe = d3_time_formatRe(d3_time_dayAbbreviations), d3_time_monthRe = d3_time_formatRe(d3_time_months), d3_time_monthLookup = d3_time_formatLookup(d3_time_months), d3_time_monthAbbrevRe = d3_time_formatRe(d3_time_monthAbbreviations), d3_time_monthAbbrevLookup = d3_time_formatLookup(d3_time_monthAbbreviations); var d3_time_formats = { a: function(d) { return d3_time_dayAbbreviations[d.getDay()]; }, A: function(d) { return d3_time_days[d.getDay()]; }, b: function(d) { return d3_time_monthAbbreviations[d.getMonth()]; }, B: function(d) { return d3_time_months[d.getMonth()]; }, c: d3.time.format(d3_time_formatDateTime), d: function(d) { return d3_time_zfill2(d.getDate()); }, e: function(d) { return d3_time_sfill2(d.getDate()); }, H: function(d) { return d3_time_zfill2(d.getHours()); }, I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); }, j: function(d) { return d3_time_zfill3(1 + d3.time.dayOfYear(d)); }, L: function(d) { return d3_time_zfill3(d.getMilliseconds()); }, m: function(d) { return d3_time_zfill2(d.getMonth() + 1); }, M: function(d) { return d3_time_zfill2(d.getMinutes()); }, p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; }, S: function(d) { return d3_time_zfill2(d.getSeconds()); }, U: function(d) { return d3_time_zfill2(d3.time.sundayOfYear(d)); }, w: function(d) { return d.getDay(); }, W: function(d) { return d3_time_zfill2(d3.time.mondayOfYear(d)); }, x: d3.time.format(d3_time_formatDate), X: d3.time.format(d3_time_formatTime), y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); }, Y: function(d) { return d3_time_zfill4(d.getFullYear() % 1e4); }, Z: d3_time_zone, "%": function(d) { return "%"; } }; var d3_time_parsers = { a: d3_time_parseWeekdayAbbrev, A: d3_time_parseWeekday, b: d3_time_parseMonthAbbrev, B: d3_time_parseMonth, c: d3_time_parseLocaleFull, d: d3_time_parseDay, e: d3_time_parseDay, H: d3_time_parseHour24, I: d3_time_parseHour24, L: d3_time_parseMilliseconds, m: d3_time_parseMonthNumber, M: d3_time_parseMinutes, p: d3_time_parseAmPm, S: d3_time_parseSeconds, x: d3_time_parseLocaleDate, X: d3_time_parseLocaleTime, y: d3_time_parseYear, Y: d3_time_parseFullYear }; var d3_time_numberRe = /^\s*\d+/; var d3_time_amPmLookup = d3.map({ am: 0, pm: 1 }); d3.time.format.utc = function(template) { function format(date) { try { d3_time = d3_time_utc; var utc = new d3_time; utc._ = date; return local(utc); } finally { d3_time = Date; } } var local = d3.time.format(template); format.parse = function(string) { try { d3_time = d3_time_utc; var date = local.parse(string); return date && date._; } finally { d3_time = Date; } }; format.toString = local.toString; return format; }; var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ"); d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso; d3_time_formatIsoNative.parse = function(string) { var date = new Date(string); return isNaN(date) ? null : date; }; d3_time_formatIsoNative.toString = d3_time_formatIso.toString; d3.time.second = d3_time_interval(function(date) { return new d3_time(Math.floor(date / 1e3) * 1e3); }, function(date, offset) { date.setTime(date.getTime() + Math.floor(offset) * 1e3); }, function(date) { return date.getSeconds(); }); d3.time.seconds = d3.time.second.range; d3.time.seconds.utc = d3.time.second.utc.range; d3.time.minute = d3_time_interval(function(date) { return new d3_time(Math.floor(date / 6e4) * 6e4); }, function(date, offset) { date.setTime(date.getTime() + Math.floor(offset) * 6e4); }, function(date) { return date.getMinutes(); }); d3.time.minutes = d3.time.minute.range; d3.time.minutes.utc = d3.time.minute.utc.range; d3.time.hour = d3_time_interval(function(date) { var timezone = date.getTimezoneOffset() / 60; return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); }, function(date, offset) { date.setTime(date.getTime() + Math.floor(offset) * 36e5); }, function(date) { return date.getHours(); }); d3.time.hours = d3.time.hour.range; d3.time.hours.utc = d3.time.hour.utc.range; d3.time.day = d3_time_interval(function(date) { var day = new d3_time(1970, 0); day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); return day; }, function(date, offset) { date.setDate(date.getDate() + offset); }, function(date) { return date.getDate() - 1; }); d3.time.days = d3.time.day.range; d3.time.days.utc = d3.time.day.utc.range; d3.time.dayOfYear = function(date) { var year = d3.time.year(date); return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); }; d3_time_daySymbols.forEach(function(day, i) { day = day.toLowerCase(); i = 7 - i; var interval = d3.time[day] = d3_time_interval(function(date) { (date = d3.time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); return date; }, function(date, offset) { date.setDate(date.getDate() + Math.floor(offset) * 7); }, function(date) { var day = d3.time.year(date).getDay(); return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); }); d3.time[day + "s"] = interval.range; d3.time[day + "s"].utc = interval.utc.range; d3.time[day + "OfYear"] = function(date) { var day = d3.time.year(date).getDay(); return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7); }; }); d3.time.week = d3.time.sunday; d3.time.weeks = d3.time.sunday.range; d3.time.weeks.utc = d3.time.sunday.utc.range; d3.time.weekOfYear = d3.time.sundayOfYear; d3.time.month = d3_time_interval(function(date) { date = d3.time.day(date); date.setDate(1); return date; }, function(date, offset) { date.setMonth(date.getMonth() + offset); }, function(date) { return date.getMonth(); }); d3.time.months = d3.time.month.range; d3.time.months.utc = d3.time.month.utc.range; d3.time.year = d3_time_interval(function(date) { date = d3.time.day(date); date.setMonth(0, 1); return date; }, function(date, offset) { date.setFullYear(date.getFullYear() + offset); }, function(date) { return date.getFullYear(); }); d3.time.years = d3.time.year.range; d3.time.years.utc = d3.time.year.utc.range; var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; var d3_time_scaleLocalMethods = [ [ d3.time.second, 1 ], [ d3.time.second, 5 ], [ d3.time.second, 15 ], [ d3.time.second, 30 ], [ d3.time.minute, 1 ], [ d3.time.minute, 5 ], [ d3.time.minute, 15 ], [ d3.time.minute, 30 ], [ d3.time.hour, 1 ], [ d3.time.hour, 3 ], [ d3.time.hour, 6 ], [ d3.time.hour, 12 ], [ d3.time.day, 1 ], [ d3.time.day, 2 ], [ d3.time.week, 1 ], [ d3.time.month, 1 ], [ d3.time.month, 3 ], [ d3.time.year, 1 ] ]; var d3_time_scaleLocalFormats = [ [ d3.time.format("%Y"), function(d) { return true; } ], [ d3.time.format("%B"), function(d) { return d.getMonth(); } ], [ d3.time.format("%b %d"), function(d) { return d.getDate() != 1; } ], [ d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; } ], [ d3.time.format("%I %p"), function(d) { return d.getHours(); } ], [ d3.time.format("%I:%M"), function(d) { return d.getMinutes(); } ], [ d3.time.format(":%S"), function(d) { return d.getSeconds(); } ], [ d3.time.format(".%L"), function(d) { return d.getMilliseconds(); } ] ]; var d3_time_scaleLinear = d3.scale.linear(), d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats); d3_time_scaleLocalMethods.year = function(extent, m) { return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear); }; d3.time.scale = function() { return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); }; var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) { return [ m[0].utc, m[1] ]; }); var d3_time_scaleUTCFormats = [ [ d3.time.format.utc("%Y"), function(d) { return true; } ], [ d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); } ], [ d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; } ], [ d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; } ], [ d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); } ], [ d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); } ], [ d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds(); } ], [ d3.time.format.utc(".%L"), function(d) { return d.getUTCMilliseconds(); } ] ]; var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats); d3_time_scaleUTCMethods.year = function(extent, m) { return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear); }; d3.time.scale.utc = function() { return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat); }; })();ceilometer-2014.1/ceilometer/api/v1/static/LICENSE.d3.v2.min.js0000664000175300017540000000262012323717130024640 0ustar jenkinsjenkins00000000000000Copyright (c) 2012, Michael Bostock All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * The name Michael Bostock may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/0000775000175300017540000000000012323717426023630 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/img/0000775000175300017540000000000012323717426024404 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/img/glyphicons-halflings.png0000664000175300017540000003077712323717130031244 0ustar jenkinsjenkins00000000000000PNG  IHDRtEXtSoftwareAdobe ImageReadyqe<1IDATx}ml\EW^ɺD$|nw';vю8m0kQSnSV;1KGsԩ>UoTU1cƖYuּca&#C,pؚ>kں ULW -sn3Vq~NocI~L{- H8%_M£wB6EW,ĢpY2+(Y@&A/3kXhߍ-aA<>P'\J;(}#Qz:4%m?nfntK*l9J+DIYu1YZ^(]YYEf@ОlXz]Ut u &5-PW}@t|#LY=s܂,w#+R+?Ƌax X0"ea)tG*ԡwVwV^rf%xB(qּ4>WG#lWU<ЁXJVѶlR$kDVrI7:X%X1NEzw;y9z9O%~~uɗ*=Ixcy}Y(ou ±N$^j e\iX񝜬];Y-rѲ&>!zlYaVHVN԰9=]=mRMdOUC JUiT}rWW'ڹu)ʢF"YU#P׾&ܑЅROwyzm$Os? +^FTIEq%&~ >M}]ԖwA? [Nteexn(措BdMTpʥnqqS?bWXmW6x*{V_!VjΧsVL^j XkQjU6sk̩n~[qǸ-` O:G7l"ksRe2vQ=QƼJUX`gQy~ ďKȰE]#P:td\T/u;س:Jc-%'e q ?j"/yh48Zi1|JUu>_N;hxwNU JQU7\j̮bT:B?6oJ1Ί%I UY-Ii4{=rǤ7@)HKJ+f4X8Cd?'j1 N< 39EWo VTGzg# %D0#ܠ3[tiآ( U,]125|Ṋfw7w u+Š]Db]K xbW ՛7|ВX㕛{UcGXk¬|(h)IUa)lp 3luPU]D)/7~4Wt5J}V X0z VM;>Gԙ^|gF:jaZ^)74C#jwr,еSlGu;1vm><)}ZQՖ&mZ:1UMB~ a:/᜗:KWWOҠ&Y2f7cƌ3f̘1cƌ3f̘1cƌ3f̘1cƌ3f̘g*3fF5LbN2#Tf=C`!ZGUe꣇e2V<1mkS4iϗ*.{N8Xaj~ڀnAx,%fE:|YDVj ¢lg6(:k~MM5?4 ]WO>诋WZiG|QGJeK[YcյpmjE\f/ǎ8&OQ3 .3tt2'-V8pXSrY#J!Q ",ub@FK:u^iy[]<.Cw+W\)b kr-.MtڀMqʄ۰#$^X$"V`T4m~w%Pp1|+&UxY8*r8:k7QЃҀT$Ўƙ S>~Sjs:5q.w&_Z.X=:ވbw` _kd{'0:ds#qi!224nq\9-KUTsSUuVo@;Uz>^=Np>oPO @I@'Gj5o*U>^*ew>ͫʧ᫠Q5 ̈́<$#5Jٻj6e)_ d]2B:^(*:8JYS鬆Kݗ ]U4_rj{5ׇaǑ/yV?GtGb@xPU7O3|鍪 IQ5QGw *(;wf0*PUU<YƔvbt5{2!,}Ҧ:)j2OkΪ' ֊0I.q\(%ojQĖՇa<ԍexAgt'[d;׸`rcdjPFU$UeJI6T&Z}z(z vfuz {}ۿߝݞlxUZ謊.Y岟b%nw@ǩS9|źs%>_o#9\EU~/ځt(r[QZuOo;!MrU]0TcpDő?.cPuF;L_Sb}R/J_+h2$ai UǩS9>Є}76rzu~国4oĨ 1J ^̘~iC޸55G׹]gwsn zTuO=?/zƲc>Οb#7ֻcgkޛTUj*-T=]uu}>ݨNЭ [ ]:%/_ Sz]6D.mD7Uƌ3f̘1cƌ3f̘1cƌ3f̘1cƌ3f̘1cƌ3f̘1c>J4hPP+A;'G_XKmL5I.},wFFum$S-E-;Õ C3I-`BRx1ғTJݕ;hΊ8 DYJo;Yš5MKɰM;%Pd9KhnD[zgVh,'C p!^M(WK2X>UQ%^p8 ˽^#Ζ؄+.@gCz%ɔ-Pr KX n>=ՔѨeSvRLz5%9UQS \WիK'hp)ô Jrh M0F (f_R5///G+x 1"eS 5 :Tf=+7Qɧ\TEs༬rYs8&k#pSՊ5MTbD܊[Ng5Q\s5PB@[8ɨV1&4Wsy[Ǿ wU2V77jމd^~YfC_h;a.&M i UWpzs`>/"'OI۲y:BzdTq£=йb:"m/-/PWDQǴ͐57m`H%AV!Hԛ׿@"Qzދ|ߒT-*OU^Ҧ6!Cwk|h&Hd5LEYy'ƣ7%*{=)Z%ٝP *G]/8Lw$?8M)\į/#7Ufd7'6\h1 vIfEIr=1w\WKVZHKgZ͡$mx % `j}TuTQJZ*H>*QxkLFTyU-)ôbiA|q`F'+ 4^Qy xH)#t^?@]^`ARSqjgB:rK۷l<2-4YKhgQLxVwP~M Φ0l 3ƅaŊITȀhwJmxIMչ|U7xˆS~2ߕ?kW1kC3];YnSґAeXYz8,'x< k7Kx]$x$vgT#w;o@ z_Vmn|HֵhZg-^TAn- )@4[*9xKƋj>!,Vt:eqn8%ohS(2\Q^aigF3vTUDVlQꅧWc%Ueq4ҝº/U $_Q!>t| ,țG<tC[xTXmf|Q%d#jUՆ|; H[bά#,Ws7NT1~m&ǻ{' \㟾 bBKJo8%!$Qj:/RX)$Sy޳ 䍧RDUg_D軦J\jN֖SU;~?Ohssdƣ}6(T <_4b5 ^N N%8QejF7toMyө`)g[/|?өJuGL坕/=CTܠhdifHcǞG4,`D՞{'xG_p/5@m +$jVH3a"*ũ,,HJҵȸT^Qyo&IÉJUVwWLeM~3tA6rwɤ6տ \0HL%LX5c@HHÃZ|NV+7WM{cig*ȸU7iÉбzd * ?gtX8̝OX:]2ɍ]p^++>AVڛE{ DB.&/56ArxY#ܕy)cKQtȪ~! ;C}ʃtf{6$NVsj wupZ)zŁ|-wg+nMVj/d+U~ͯi:_ix whqr>駃-x뼬)ݷyR=! ì:J/lIkV@n74758Z KJ(Uxz1w)^\ԣzȪ󲦨c2f؍v+6f̘1cƌ3f̘1cƌ3f̘1cƌ3f̘1cƌ3f̘2N oC\F1ִ UZJV̚\4Mgq1z{&YT ,HX~D u\g}x>+YdN̮ol ZX+F[/j+S~2/jV8Jr^ԉ]J}J*ۏ<2԰&JݣjOM@ѯ#0O[SXB^ uze\]dd./xXE f'vO_H${%;kt7ށmő|d{aފ^ǛڎE5ʋBr]W=_SAf(0 oU5q ,_\luz˪uz㻲o=Yi~| 0+=VJت /ލzM\zCL[U:|k*^8"\Wٚ\ .XTjX5 SkFu\1 q'mģ/QUؕ*AɽDNZ׮?_[# ˍ4:^j|5LG ||øBW{6[uQF.1$qF9IHg)\5>C#uXZ$#*<ߐsRv1Tj>Jm>*#( [Fhsש5*jQʼ&&&P犛L[Q1* ;X}Iΰ[Q?qQZ Hݙ֞VEsBCZ9JTK tup˷ /O,.kUdsOHMg4=-)+ؿh2Nw/r|WQn=GIU;'j,vfdzpe$V GTYsBZO1pj:r"nTUSCgr veAۘ˜FC+Ֆ#[JTe'v9-3 Dmӻuuz?0 o hxuY &_54=f07kלU0]D:jdw/+PGUVS<\2uatc^zYRąmC+7#,|:iNw*|^sm|X>Ъ^1\#͹ &%{,2U>ݎ.c05z# ogNO+Q쓭 ,˗-%K\[S_`y+b_94"U+Ύap}I[M,B.NtwHj漬E L߀ 0DX(kڵ NoU{gquz RwkէRx'uZ[3'zyyד%sƕ3jYF\s=m1&VAɼ?k\+]6yモ1gtOIW7al|1 >$]e 7؝WIe?ަL#>| ҭ] pM5MUdI61ԠeǼYGhOn3խR:^k_'Yuuq#p# J2xl>OjcY馃!ڡ+sZ/ D}2AY mpc#<'xSKx`*W[,e|6BH)㶤kjpDU(2qzx9*tqa/, Z[ 0>Ө֜xN)fă@qըFU՝w(a;ˋ>|Tc|w2eiT]*!_\WG{ ]^݅Z5t|6oYHaO@= my^akE.uz]#٥hWv(:,6A߉JFa\ wWex>vetuMYA>).,;ɦCbwjE)W Fӫ@s4e6^Q9oI}4x<.B?B߫#$Hx.x9,a!RTpgd5xBe.L7@* AsduttSVUaRU|I xG߃$T񭟬#_IFMŒ_X@foQIDII?|%$r {ENĸwޕqq?Dؽ}}o/`ӣCTi /ywO rD 9YUD] Ή@s]+'UaL} hrU'7:sU|k)H@hNq#ϵ8y˭Xű#w 1!흉R'7fuד0p!WÖW+Nmp\-ioD$g٠˅%%ÐmV]̱rw*Z}y+L Nouj}xt)lStuqxmNyKUOnDbhf}k>6ufT%{ <񐮸mjFcmUïc;w8@dGFUA& =nq5]iP}z:k⼶-ʓ Κl*'UzaxWFdZzTNRs+# wzgi:MBqtM l#^'Gߣ*^t{=rERnQ$adJl02%Tڊ^<~g?Of*U^?:N+o[PUs|QR']V-L)H K䐞 mYn\4}YVD hR;g-'3aסM Dh}1cƌ3f̘1cƌ3f̘1cƌ3f̘1cƌ3f̘1cƌk*Ț4`L$b U4\dt'>HȄ|.+Y+/Gy2OCWv3v,'kia W O6߯E=Hv $LlxI躍/}^]x\3 ɮ5 QT&G9Ay^i}O[5ޱwq4,s JJI.myE^%'VB~dׯ}*j* ~uTk\fKЬ*Y]_v'I˨鑩6Xo'j&uɧngT]oڌ9\*wVHӖ| >:5EF'J ɝ`!A e~_;5ױϊ镋m_&OVi<}"靍hW9X6KPƣ G"ƭ?/O^hCHLciPj)}QQզ#tMg9 xGw~d;_J+RỲ<;e 5/Qs/5N[!a+NPb+ѺI}-t_qU=MKʞY5no*vvbʊ{]| ~ Z{-끇^FVviϵ3Ya=6ndS;-ʹ^;uꪪ^ |=_w+"i&4l#wir|W3U$"J~O@]~tRJVMHw:̦@?>O?vdrtS*$&~1>Z}^nL(]f*&*QaIꝄ|3*O?r?*4Gyz[k/tkQϖWCCKk/x5|S*`ϹγQEwy o KYqTb$-/PtsZNKQ*>ݢU@Џ"JQ;¹& Lx;+T /+O赟> (T?ķD^N*'p$IW֐W~ =J|_UTe7ְP`;CYjk=sU[mߙ-;};2|wo1p0~>0m @Jrǟcٷ4͜?q\UUIV?2L/+Шꄾ< ܇^T ?tj\JrҀB*=km X,n}aՒIadp׷ll{\6v8RꅟҲf1F|Տ;e=\D ,D:ψrxQT◎*|{nS 9~=}ӕG~%j:Dj<ឫ:jO% $T8!jvm|'OЗ¹➱z\vsIv`Ȕʨj-^$-^G Q{m`T#c֞㸝|n.ߪN$O JUVʼt,jg-mסּNV z:(Ι*|1Ux=Yk*t MNNDUhK ؞X(刄Rv!#B_cxRŹoE5Dg>?fXQQ˔|@"աMveC>mO$H#]Y I=)_`k* :a>!X!W^wҒl'<;vwgIt_?Jh`#E:fdx=6Wu<Ӌd2di˂c#h¬c4?<HFYoVpN;ݷJ\ >` (t3{>⦊;;qFx4YcS$w.da*k|Q,+xs^K߫P^nO֮L5mIwl?-.ʲJ8 F B.-:2Ȕ!/A#b_m%I($|PZ[1G{^#o>3mw?'cx[^:Wk/`'=~֥W(gQbfv7UzM3+؍K:4|GCtA+Kʨ{@Ɩ [05E|yn4MIENDB`ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/img/glyphicons-halflings-white.png0000664000175300017540000002111112323717130032340 0ustar jenkinsjenkins00000000000000PNG  IHDRӳ{PLTEmmmⰰᒒttt󻻻bbbeeeggg𶶶xxx󛛛Ƽ몪֢UUU鿿rOtRNS#_ /oS?C kDOS_6>4!~a @1_'onҋM3BQjp&%!l"Xqr; A[<`am}43/0IPCM!6(*gK&YQGDP,`{VP-x)h7e1]W$1bzSܕcO]U;Zi'y"؆K 64Y*.v@c.};tN%DI !ZЏ5LH26 ɯ" -bE,,)ʏ B>mn6pmRO wm@V#?'CȑZ#qb|$:)/E%nRqChn%i̓}lm ?idd",`H"r.z~(bQU&)5X#EMR<*p[[%.Ọk7lIoJF lV!̡ăuH`&,zRk$|$lXbjߪdU?Σ$HW$U'HE3*խU\}( zhVk}guRk$%|T|ck獳"D_W+.Q)@ƽHbslTDR2Xm#a 3lYzj㒚#! 4J8(cvt]aT D ΅Q?^-_^$:\V $N|=(vZ'q6Z׆B5V!y3K㱿bv4xR]al!IoP@tVyL٪mlڿIUb|[*lke'*WddDӝ}\W_WߝrN?vޫ۲X%0uoui*JVƦb%}i5IYlNE-wςf_W3mI-mQ)S kTC7m<"܌bT|'$ҘR&>O p6tSN\ׯLm\r@3uT b7t.5.q3r0=8TiJ\6uF R32^'ŪxI F8O{%8kJMSȴdBEdWCYO:/ON/I_=xFE! =i:o~ y?''[͓[͓[͓[͓[ͭ.U>$PƦc%]\c:| ,eSZ,oXrX!R@Zv 0>?* <|N60;{ad2v+D^t[q!۞V}fۨϏYeॗ)Vyl|" fUq@Ǽ4Y-Y-!6aB:o%JIUQ|UKO`=\ :0x Pau@!KPdxhw1>$j΍vZdxSUA&[URd7øzk/rU^w:I.VǮc>q.!zSr&2)Wg R -iQ 8Pa\ОU%iݡU_=p Lu(N?0?Æ:]άtB%U|NsorNf ,P !v" Y6hL_@@bscqgv4||0lϟ$S9bʱj#~?o}}7sAPm:IV=n !{{hEࢪ8suoLT$;VscqD3 ༂3.DBB4&V' T `D6Ϸqyj8V*X%@s\jrN$|=5Ά 'mUiKi%CI:ssaƅ`*`=l)>u՘MeuSI_OL_}o&jzp{lu:O)s%Q@$<]f xO%PCbhr2PKpf5Në3^o]eJiB464^tuٲU֌:G4'22YpuG'/Py4?.SBP_>I 1t3ΓBɭɭɭɭVVVVVs]!67(g y@ 4>Q VF}^Xׇڼje26 L%YGh lC})< !EEPZWZV+@†R 5{@ouɐ4&H6ey V݀VťcqZޒrJyByFzFN$Hb*+jՏqэ ګkݿUXle1d0d^-B%} {Y%r*j5Ak5u",:~ҸY~ hSA~6 fulՇf{ȵQtATHZkƭ/_Sn u']b]|m`BāJ,O$du]Zs FL:aǙT4o~by?wpj滥A(x]†f~an֧/^dڲcՇ,!1i&xi_VK@ip̓9Vi%a; L?0J*Ū5U'x^6V[^ {eU|:0=0d۫o*Jq%[YN.sQLud[29I:WnmXlڃ6!lNlVէKUjV\J%UߊBLcKfb>a=b~R]aG%[js@/9MطݘU>yɲX@} Ftg^vO\Ӹwvpz3K5i!$P>ā'VƛL2r@UMKZ6tw맟¦bm1h||]}~0MjA(JJP68C&yr׉e}j_cJ?I0k>šW |Bޝ."TEXd 8!cw*E(J)![W"j_ТeX_XB;oO0~?:PC (.[!Wq%*leY)E<^KZT60.#A\5;Rmtkd/8)5~^0 #Ckgey)ͶԺ6ĥ<(?&uAVm0^h.txR*a':,H|ō l5z;8+e#b'#|}2w(|KcJ l6 w^Տoi3H R ̔9,YgPְ:N [5SR![)]i}`mN4Хv`|;f(FltL8÷Z#AO%Y)NU5YedJE3dZذݣHT1 ;8MjnʏӤqp 1h^<<>yt{?|'j)}YUU{@V/J1F+7䀉[OWO[ yUY!?BD%DWj>-Ai6xz)U R7 d@g\so)a4zf[W+> P> |qLG8vȣlj2Zt+VA6gT *ʆUz(m)CD `He/.:zN9pgo &NC׃އ>Wհ_Hj)Xe6F7pm-`'c.AZ=^e8F;{Rtn(z!S7o Iew3]bܗ85|iϠRJkʱZRO+8U&:]ZieR(JMޗ7Z@5a^\GzsρU*rMezT^:ɬͦX=>$ bi>U&XQoybbGk8 Ҙn).Սo ^MmdZi$soo*{4eLbLٳ""mx:`:mk[geTެ)'0*TB{!I ''''[͓[͓[͓[͓[]Zj Q.e '/yvQ71(Z&X?(_Z){tڀmZWϏ)-C jqn,̋"IvUL!h꛿skAcrN佚фVE40yX~4zʸV㳰%,)fqtpu~  *^0:ܲ33JO(ZB?K^ v]unlWi0p6[착C_5X#[wX3b廫R{NKAe Se|wxso>P\儔ԕ6;nVmfI$V͓J-J%֌0UwYЎSnum藮xz˗VƫIvnW_qLZ"_Xz 8]Ap?C543zw({7e*Ȳ`۰!AQ:KUnz]1yVGaCm0PY ٚUx6TT&hV9V ӬzÑ 1[XzZ9erqJND/gX*9oN6D` {I%Mz9—TQ7f\"j_3~xB'ܷY]*KЌ%"5"qxq~ƕ=jS>jV&~]2xzF1X_yD<#NRB}K/iy !V^˿eJ}/FkA7 S+.(ecJ:zWZ몖wQ~ä́p6,e5,+,tv%O^OO}ן -O7>ekC6wa_C |9*WA)UJg8=:mjUvqysܒLglC6+[FSWg9wV31A ND<$5e(s[ ۨbaF.]KIENDB`ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/css/0000775000175300017540000000000012323717426024420 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/css/bootstrap-responsive.css0000664000175300017540000005231512323717130031340 0ustar jenkinsjenkins00000000000000/*! * Bootstrap Responsive v2.2.1 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ .clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; line-height: 0; content: ""; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 30px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .hidden { display: none; visibility: hidden; } .visible-phone { display: none !important; } .visible-tablet { display: none !important; } .hidden-desktop { display: none !important; } .visible-desktop { display: inherit !important; } @media (min-width: 768px) and (max-width: 979px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important ; } .visible-tablet { display: inherit !important; } .hidden-tablet { display: none !important; } } @media (max-width: 767px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-phone { display: inherit !important; } .hidden-phone { display: none !important; } } @media (min-width: 1200px) { .row { margin-left: -30px; *zoom: 1; } .row:before, .row:after { display: table; line-height: 0; content: ""; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 30px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 1170px; } .span12 { width: 1170px; } .span11 { width: 1070px; } .span10 { width: 970px; } .span9 { width: 870px; } .span8 { width: 770px; } .span7 { width: 670px; } .span6 { width: 570px; } .span5 { width: 470px; } .span4 { width: 370px; } .span3 { width: 270px; } .span2 { width: 170px; } .span1 { width: 70px; } .offset12 { margin-left: 1230px; } .offset11 { margin-left: 1130px; } .offset10 { margin-left: 1030px; } .offset9 { margin-left: 930px; } .offset8 { margin-left: 830px; } .offset7 { margin-left: 730px; } .offset6 { margin-left: 630px; } .offset5 { margin-left: 530px; } .offset4 { margin-left: 430px; } .offset3 { margin-left: 330px; } .offset2 { margin-left: 230px; } .offset1 { margin-left: 130px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; line-height: 0; content: ""; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 30px; margin-left: 2.564102564102564%; *margin-left: 2.5109110747408616%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.564102564102564%; } .row-fluid .span12 { width: 100%; *width: 99.94680851063829%; } .row-fluid .span11 { width: 91.45299145299145%; *width: 91.39979996362975%; } .row-fluid .span10 { width: 82.90598290598291%; *width: 82.8527914166212%; } .row-fluid .span9 { width: 74.35897435897436%; *width: 74.30578286961266%; } .row-fluid .span8 { width: 65.81196581196582%; *width: 65.75877432260411%; } .row-fluid .span7 { width: 57.26495726495726%; *width: 57.21176577559556%; } .row-fluid .span6 { width: 48.717948717948715%; *width: 48.664757228587014%; } .row-fluid .span5 { width: 40.17094017094017%; *width: 40.11774868157847%; } .row-fluid .span4 { width: 31.623931623931625%; *width: 31.570740134569924%; } .row-fluid .span3 { width: 23.076923076923077%; *width: 23.023731587561375%; } .row-fluid .span2 { width: 14.52991452991453%; *width: 14.476723040552828%; } .row-fluid .span1 { width: 5.982905982905983%; *width: 5.929714493544281%; } .row-fluid .offset12 { margin-left: 105.12820512820512%; *margin-left: 105.02182214948171%; } .row-fluid .offset12:first-child { margin-left: 102.56410256410257%; *margin-left: 102.45771958537915%; } .row-fluid .offset11 { margin-left: 96.58119658119658%; *margin-left: 96.47481360247316%; } .row-fluid .offset11:first-child { margin-left: 94.01709401709402%; *margin-left: 93.91071103837061%; } .row-fluid .offset10 { margin-left: 88.03418803418803%; *margin-left: 87.92780505546462%; } .row-fluid .offset10:first-child { margin-left: 85.47008547008548%; *margin-left: 85.36370249136206%; } .row-fluid .offset9 { margin-left: 79.48717948717949%; *margin-left: 79.38079650845607%; } .row-fluid .offset9:first-child { margin-left: 76.92307692307693%; *margin-left: 76.81669394435352%; } .row-fluid .offset8 { margin-left: 70.94017094017094%; *margin-left: 70.83378796144753%; } .row-fluid .offset8:first-child { margin-left: 68.37606837606839%; *margin-left: 68.26968539734497%; } .row-fluid .offset7 { margin-left: 62.393162393162385%; *margin-left: 62.28677941443899%; } .row-fluid .offset7:first-child { margin-left: 59.82905982905982%; *margin-left: 59.72267685033642%; } .row-fluid .offset6 { margin-left: 53.84615384615384%; *margin-left: 53.739770867430444%; } .row-fluid .offset6:first-child { margin-left: 51.28205128205128%; *margin-left: 51.175668303327875%; } .row-fluid .offset5 { margin-left: 45.299145299145295%; *margin-left: 45.1927623204219%; } .row-fluid .offset5:first-child { margin-left: 42.73504273504273%; *margin-left: 42.62865975631933%; } .row-fluid .offset4 { margin-left: 36.75213675213675%; *margin-left: 36.645753773413354%; } .row-fluid .offset4:first-child { margin-left: 34.18803418803419%; *margin-left: 34.081651209310785%; } .row-fluid .offset3 { margin-left: 28.205128205128204%; *margin-left: 28.0987452264048%; } .row-fluid .offset3:first-child { margin-left: 25.641025641025642%; *margin-left: 25.53464266230224%; } .row-fluid .offset2 { margin-left: 19.65811965811966%; *margin-left: 19.551736679396257%; } .row-fluid .offset2:first-child { margin-left: 17.094017094017094%; *margin-left: 16.98763411529369%; } .row-fluid .offset1 { margin-left: 11.11111111111111%; *margin-left: 11.004728132387708%; } .row-fluid .offset1:first-child { margin-left: 8.547008547008547%; *margin-left: 8.440625568285142%; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 30px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 1156px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 1056px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 956px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 856px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 756px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 656px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 556px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 456px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 356px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 256px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 156px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 56px; } .thumbnails { margin-left: -30px; } .thumbnails > li { margin-left: 30px; } .row-fluid .thumbnails { margin-left: 0; } } @media (min-width: 768px) and (max-width: 979px) { .row { margin-left: -20px; *zoom: 1; } .row:before, .row:after { display: table; line-height: 0; content: ""; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 724px; } .span12 { width: 724px; } .span11 { width: 662px; } .span10 { width: 600px; } .span9 { width: 538px; } .span8 { width: 476px; } .span7 { width: 414px; } .span6 { width: 352px; } .span5 { width: 290px; } .span4 { width: 228px; } .span3 { width: 166px; } .span2 { width: 104px; } .span1 { width: 42px; } .offset12 { margin-left: 764px; } .offset11 { margin-left: 702px; } .offset10 { margin-left: 640px; } .offset9 { margin-left: 578px; } .offset8 { margin-left: 516px; } .offset7 { margin-left: 454px; } .offset6 { margin-left: 392px; } .offset5 { margin-left: 330px; } .offset4 { margin-left: 268px; } .offset3 { margin-left: 206px; } .offset2 { margin-left: 144px; } .offset1 { margin-left: 82px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; line-height: 0; content: ""; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 30px; margin-left: 2.7624309392265194%; *margin-left: 2.709239449864817%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.7624309392265194%; } .row-fluid .span12 { width: 100%; *width: 99.94680851063829%; } .row-fluid .span11 { width: 91.43646408839778%; *width: 91.38327259903608%; } .row-fluid .span10 { width: 82.87292817679558%; *width: 82.81973668743387%; } .row-fluid .span9 { width: 74.30939226519337%; *width: 74.25620077583166%; } .row-fluid .span8 { width: 65.74585635359117%; *width: 65.69266486422946%; } .row-fluid .span7 { width: 57.18232044198895%; *width: 57.12912895262725%; } .row-fluid .span6 { width: 48.61878453038674%; *width: 48.56559304102504%; } .row-fluid .span5 { width: 40.05524861878453%; *width: 40.00205712942283%; } .row-fluid .span4 { width: 31.491712707182323%; *width: 31.43852121782062%; } .row-fluid .span3 { width: 22.92817679558011%; *width: 22.87498530621841%; } .row-fluid .span2 { width: 14.3646408839779%; *width: 14.311449394616199%; } .row-fluid .span1 { width: 5.801104972375691%; *width: 5.747913483013988%; } .row-fluid .offset12 { margin-left: 105.52486187845304%; *margin-left: 105.41847889972962%; } .row-fluid .offset12:first-child { margin-left: 102.76243093922652%; *margin-left: 102.6560479605031%; } .row-fluid .offset11 { margin-left: 96.96132596685082%; *margin-left: 96.8549429881274%; } .row-fluid .offset11:first-child { margin-left: 94.1988950276243%; *margin-left: 94.09251204890089%; } .row-fluid .offset10 { margin-left: 88.39779005524862%; *margin-left: 88.2914070765252%; } .row-fluid .offset10:first-child { margin-left: 85.6353591160221%; *margin-left: 85.52897613729868%; } .row-fluid .offset9 { margin-left: 79.8342541436464%; *margin-left: 79.72787116492299%; } .row-fluid .offset9:first-child { margin-left: 77.07182320441989%; *margin-left: 76.96544022569647%; } .row-fluid .offset8 { margin-left: 71.2707182320442%; *margin-left: 71.16433525332079%; } .row-fluid .offset8:first-child { margin-left: 68.50828729281768%; *margin-left: 68.40190431409427%; } .row-fluid .offset7 { margin-left: 62.70718232044199%; *margin-left: 62.600799341718584%; } .row-fluid .offset7:first-child { margin-left: 59.94475138121547%; *margin-left: 59.838368402492065%; } .row-fluid .offset6 { margin-left: 54.14364640883978%; *margin-left: 54.037263430116376%; } .row-fluid .offset6:first-child { margin-left: 51.38121546961326%; *margin-left: 51.27483249088986%; } .row-fluid .offset5 { margin-left: 45.58011049723757%; *margin-left: 45.47372751851417%; } .row-fluid .offset5:first-child { margin-left: 42.81767955801105%; *margin-left: 42.71129657928765%; } .row-fluid .offset4 { margin-left: 37.01657458563536%; *margin-left: 36.91019160691196%; } .row-fluid .offset4:first-child { margin-left: 34.25414364640884%; *margin-left: 34.14776066768544%; } .row-fluid .offset3 { margin-left: 28.45303867403315%; *margin-left: 28.346655695309746%; } .row-fluid .offset3:first-child { margin-left: 25.69060773480663%; *margin-left: 25.584224756083227%; } .row-fluid .offset2 { margin-left: 19.88950276243094%; *margin-left: 19.783119783707537%; } .row-fluid .offset2:first-child { margin-left: 17.12707182320442%; *margin-left: 17.02068884448102%; } .row-fluid .offset1 { margin-left: 11.32596685082873%; *margin-left: 11.219583872105325%; } .row-fluid .offset1:first-child { margin-left: 8.56353591160221%; *margin-left: 8.457152932878806%; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 710px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 648px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 586px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 524px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 462px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 400px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 338px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 276px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 214px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 152px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 90px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 28px; } } @media (max-width: 767px) { body { padding-right: 20px; padding-left: 20px; } .navbar-fixed-top, .navbar-fixed-bottom, .navbar-static-top { margin-right: -20px; margin-left: -20px; } .container-fluid { padding: 0; } .dl-horizontal dt { float: none; width: auto; clear: none; text-align: left; } .dl-horizontal dd { margin-left: 0; } .container { width: auto; } .row-fluid { width: 100%; } .row, .thumbnails { margin-left: 0; } .thumbnails > li { float: none; margin-left: 0; } [class*="span"], .uneditable-input[class*="span"], .row-fluid [class*="span"] { display: block; float: none; width: 100%; margin-left: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .span12, .row-fluid .span12 { width: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .row-fluid [class*="offset"]:first-child { margin-left: 0; } .input-large, .input-xlarge, .input-xxlarge, input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input { display: block; width: 100%; min-height: 30px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .input-prepend input, .input-append input, .input-prepend input[class*="span"], .input-append input[class*="span"] { display: inline-block; width: auto; } .controls-row [class*="span"] + [class*="span"] { margin-left: 0; } .modal { position: fixed; top: 20px; right: 20px; left: 20px; width: auto; margin: 0; } .modal.fade { top: -100px; } .modal.fade.in { top: 20px; } } @media (max-width: 480px) { .nav-collapse { -webkit-transform: translate3d(0, 0, 0); } .page-header h1 small { display: block; line-height: 20px; } input[type="checkbox"], input[type="radio"] { border: 1px solid #ccc; } .form-horizontal .control-label { float: none; width: auto; padding-top: 0; text-align: left; } .form-horizontal .controls { margin-left: 0; } .form-horizontal .control-list { padding-top: 0; } .form-horizontal .form-actions { padding-right: 10px; padding-left: 10px; } .media .pull-left, .media .pull-right { display: block; float: none; margin-bottom: 10px; } .media-object { margin-right: 0; margin-left: 0; } .modal { top: 10px; right: 10px; left: 10px; } .modal-header .close { padding: 10px; margin: -10px; } .carousel-caption { position: static; } } @media (max-width: 979px) { body { padding-top: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: static; } .navbar-fixed-top { margin-bottom: 20px; } .navbar-fixed-bottom { margin-top: 20px; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding: 5px; } .navbar .container { width: auto; padding: 0; } .navbar .brand { padding-right: 10px; padding-left: 10px; margin: 0 0 0 -5px; } .nav-collapse { clear: both; } .nav-collapse .nav { float: none; margin: 0 0 10px; } .nav-collapse .nav > li { float: none; } .nav-collapse .nav > li > a { margin-bottom: 2px; } .nav-collapse .nav > .divider-vertical { display: none; } .nav-collapse .nav .nav-header { color: #777777; text-shadow: none; } .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { padding: 9px 15px; font-weight: bold; color: #777777; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .nav-collapse .btn { padding: 4px 10px 4px; font-weight: normal; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .nav-collapse .dropdown-menu li + li a { margin-bottom: 2px; } .nav-collapse .nav > li > a:hover, .nav-collapse .dropdown-menu a:hover { background-color: #f2f2f2; } .navbar-inverse .nav-collapse .nav > li > a, .navbar-inverse .nav-collapse .dropdown-menu a { color: #999999; } .navbar-inverse .nav-collapse .nav > li > a:hover, .navbar-inverse .nav-collapse .dropdown-menu a:hover { background-color: #111111; } .nav-collapse.in .btn-group { padding: 0; margin-top: 5px; } .nav-collapse .dropdown-menu { position: static; top: auto; left: auto; display: none; float: none; max-width: none; padding: 0; margin: 0 15px; background-color: transparent; border: none; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .nav-collapse .open > .dropdown-menu { display: block; } .nav-collapse .dropdown-menu:before, .nav-collapse .dropdown-menu:after { display: none; } .nav-collapse .dropdown-menu .divider { display: none; } .nav-collapse .nav > li > .dropdown-menu:before, .nav-collapse .nav > li > .dropdown-menu:after { display: none; } .nav-collapse .navbar-form, .nav-collapse .navbar-search { float: none; padding: 10px 15px; margin: 10px 0; border-top: 1px solid #f2f2f2; border-bottom: 1px solid #f2f2f2; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } .navbar-inverse .nav-collapse .navbar-form, .navbar-inverse .nav-collapse .navbar-search { border-top-color: #111111; border-bottom-color: #111111; } .navbar .nav-collapse .nav.pull-right { float: none; margin-left: 0; } .nav-collapse, .nav-collapse.collapse { height: 0; overflow: hidden; } .navbar .btn-navbar { display: block; } .navbar-static .navbar-inner { padding-right: 10px; padding-left: 10px; } } @media (min-width: 980px) { .nav-collapse.collapse { height: auto !important; overflow: visible !important; } } ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/css/bootstrap.css0000664000175300017540000035547712323717130027164 0ustar jenkinsjenkins00000000000000/*! * Bootstrap v2.2.1 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; } audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } audio:not([controls]) { display: none; } html { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } a:hover, a:active { outline: 0; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { width: auto\9; height: auto; max-width: 100%; vertical-align: middle; border: 0; -ms-interpolation-mode: bicubic; } #map_canvas img, .google-maps img { max-width: none; } button, input, select, textarea { margin: 0; font-size: 100%; vertical-align: middle; } button, input { *overflow: visible; line-height: normal; } button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } button, html input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; } input[type="search"] { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; } textarea { overflow: auto; vertical-align: top; } .clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; line-height: 0; content: ""; } .clearfix:after { clear: both; } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 30px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } body { margin: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; color: #333333; background-color: #ffffff; } a { color: #0088cc; text-decoration: none; } a:hover { color: #005580; text-decoration: underline; } .img-rounded { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .img-polaroid { padding: 4px; background-color: #fff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .img-circle { -webkit-border-radius: 500px; -moz-border-radius: 500px; border-radius: 500px; } .row { margin-left: -20px; *zoom: 1; } .row:before, .row:after { display: table; line-height: 0; content: ""; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .span12 { width: 940px; } .span11 { width: 860px; } .span10 { width: 780px; } .span9 { width: 700px; } .span8 { width: 620px; } .span7 { width: 540px; } .span6 { width: 460px; } .span5 { width: 380px; } .span4 { width: 300px; } .span3 { width: 220px; } .span2 { width: 140px; } .span1 { width: 60px; } .offset12 { margin-left: 980px; } .offset11 { margin-left: 900px; } .offset10 { margin-left: 820px; } .offset9 { margin-left: 740px; } .offset8 { margin-left: 660px; } .offset7 { margin-left: 580px; } .offset6 { margin-left: 500px; } .offset5 { margin-left: 420px; } .offset4 { margin-left: 340px; } .offset3 { margin-left: 260px; } .offset2 { margin-left: 180px; } .offset1 { margin-left: 100px; } .row-fluid { width: 100%; *zoom: 1; } .row-fluid:before, .row-fluid:after { display: table; line-height: 0; content: ""; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 30px; margin-left: 2.127659574468085%; *margin-left: 2.074468085106383%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.127659574468085%; } .row-fluid .span12 { width: 100%; *width: 99.94680851063829%; } .row-fluid .span11 { width: 91.48936170212765%; *width: 91.43617021276594%; } .row-fluid .span10 { width: 82.97872340425532%; *width: 82.92553191489361%; } .row-fluid .span9 { width: 74.46808510638297%; *width: 74.41489361702126%; } .row-fluid .span8 { width: 65.95744680851064%; *width: 65.90425531914893%; } .row-fluid .span7 { width: 57.44680851063829%; *width: 57.39361702127659%; } .row-fluid .span6 { width: 48.93617021276595%; *width: 48.88297872340425%; } .row-fluid .span5 { width: 40.42553191489362%; *width: 40.37234042553192%; } .row-fluid .span4 { width: 31.914893617021278%; *width: 31.861702127659576%; } .row-fluid .span3 { width: 23.404255319148934%; *width: 23.351063829787233%; } .row-fluid .span2 { width: 14.893617021276595%; *width: 14.840425531914894%; } .row-fluid .span1 { width: 6.382978723404255%; *width: 6.329787234042553%; } .row-fluid .offset12 { margin-left: 104.25531914893617%; *margin-left: 104.14893617021275%; } .row-fluid .offset12:first-child { margin-left: 102.12765957446808%; *margin-left: 102.02127659574467%; } .row-fluid .offset11 { margin-left: 95.74468085106382%; *margin-left: 95.6382978723404%; } .row-fluid .offset11:first-child { margin-left: 93.61702127659574%; *margin-left: 93.51063829787232%; } .row-fluid .offset10 { margin-left: 87.23404255319149%; *margin-left: 87.12765957446807%; } .row-fluid .offset10:first-child { margin-left: 85.1063829787234%; *margin-left: 84.99999999999999%; } .row-fluid .offset9 { margin-left: 78.72340425531914%; *margin-left: 78.61702127659572%; } .row-fluid .offset9:first-child { margin-left: 76.59574468085106%; *margin-left: 76.48936170212764%; } .row-fluid .offset8 { margin-left: 70.2127659574468%; *margin-left: 70.10638297872339%; } .row-fluid .offset8:first-child { margin-left: 68.08510638297872%; *margin-left: 67.9787234042553%; } .row-fluid .offset7 { margin-left: 61.70212765957446%; *margin-left: 61.59574468085106%; } .row-fluid .offset7:first-child { margin-left: 59.574468085106375%; *margin-left: 59.46808510638297%; } .row-fluid .offset6 { margin-left: 53.191489361702125%; *margin-left: 53.085106382978715%; } .row-fluid .offset6:first-child { margin-left: 51.063829787234035%; *margin-left: 50.95744680851063%; } .row-fluid .offset5 { margin-left: 44.68085106382979%; *margin-left: 44.57446808510638%; } .row-fluid .offset5:first-child { margin-left: 42.5531914893617%; *margin-left: 42.4468085106383%; } .row-fluid .offset4 { margin-left: 36.170212765957444%; *margin-left: 36.06382978723405%; } .row-fluid .offset4:first-child { margin-left: 34.04255319148936%; *margin-left: 33.93617021276596%; } .row-fluid .offset3 { margin-left: 27.659574468085104%; *margin-left: 27.5531914893617%; } .row-fluid .offset3:first-child { margin-left: 25.53191489361702%; *margin-left: 25.425531914893618%; } .row-fluid .offset2 { margin-left: 19.148936170212764%; *margin-left: 19.04255319148936%; } .row-fluid .offset2:first-child { margin-left: 17.02127659574468%; *margin-left: 16.914893617021278%; } .row-fluid .offset1 { margin-left: 10.638297872340425%; *margin-left: 10.53191489361702%; } .row-fluid .offset1:first-child { margin-left: 8.51063829787234%; *margin-left: 8.404255319148938%; } [class*="span"].hide, .row-fluid [class*="span"].hide { display: none; } [class*="span"].pull-right, .row-fluid [class*="span"].pull-right { float: right; } .container { margin-right: auto; margin-left: auto; *zoom: 1; } .container:before, .container:after { display: table; line-height: 0; content: ""; } .container:after { clear: both; } .container-fluid { padding-right: 20px; padding-left: 20px; *zoom: 1; } .container-fluid:before, .container-fluid:after { display: table; line-height: 0; content: ""; } .container-fluid:after { clear: both; } p { margin: 0 0 10px; } .lead { margin-bottom: 20px; font-size: 21px; font-weight: 200; line-height: 30px; } small { font-size: 85%; } strong { font-weight: bold; } em { font-style: italic; } cite { font-style: normal; } .muted { color: #999999; } .text-warning { color: #c09853; } a.text-warning:hover { color: #a47e3c; } .text-error { color: #b94a48; } a.text-error:hover { color: #953b39; } .text-info { color: #3a87ad; } a.text-info:hover { color: #2d6987; } .text-success { color: #468847; } a.text-success:hover { color: #356635; } h1, h2, h3, h4, h5, h6 { margin: 10px 0; font-family: inherit; font-weight: bold; line-height: 20px; color: inherit; text-rendering: optimizelegibility; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { font-weight: normal; line-height: 1; color: #999999; } h1, h2, h3 { line-height: 40px; } h1 { font-size: 38.5px; } h2 { font-size: 31.5px; } h3 { font-size: 24.5px; } h4 { font-size: 17.5px; } h5 { font-size: 14px; } h6 { font-size: 11.9px; } h1 small { font-size: 24.5px; } h2 small { font-size: 17.5px; } h3 small { font-size: 14px; } h4 small { font-size: 14px; } .page-header { padding-bottom: 9px; margin: 20px 0 30px; border-bottom: 1px solid #eeeeee; } ul, ol { padding: 0; margin: 0 0 10px 25px; } ul ul, ul ol, ol ol, ol ul { margin-bottom: 0; } li { line-height: 20px; } ul.unstyled, ol.unstyled { margin-left: 0; list-style: none; } dl { margin-bottom: 20px; } dt, dd { line-height: 20px; } dt { font-weight: bold; } dd { margin-left: 10px; } .dl-horizontal { *zoom: 1; } .dl-horizontal:before, .dl-horizontal:after { display: table; line-height: 0; content: ""; } .dl-horizontal:after { clear: both; } .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } hr { margin: 20px 0; border: 0; border-top: 1px solid #eeeeee; border-bottom: 1px solid #ffffff; } abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999999; } abbr.initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 0 0 0 15px; margin: 0 0 20px; border-left: 5px solid #eeeeee; } blockquote p { margin-bottom: 0; font-size: 16px; font-weight: 300; line-height: 25px; } blockquote small { display: block; line-height: 20px; color: #999999; } blockquote small:before { content: '\2014 \00A0'; } blockquote.pull-right { float: right; padding-right: 15px; padding-left: 0; border-right: 5px solid #eeeeee; border-left: 0; } blockquote.pull-right p, blockquote.pull-right small { text-align: right; } blockquote.pull-right small:before { content: ''; } blockquote.pull-right small:after { content: '\00A0 \2014'; } q:before, q:after, blockquote:before, blockquote:after { content: ""; } address { display: block; margin-bottom: 20px; font-style: normal; line-height: 20px; } code, pre { padding: 0 3px 2px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; color: #333333; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } code { padding: 2px 4px; color: #d14; background-color: #f7f7f9; border: 1px solid #e1e1e8; } pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 13px; line-height: 20px; word-break: break-all; word-wrap: break-word; white-space: pre; white-space: pre-wrap; background-color: #f5f5f5; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.15); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } pre.prettyprint { margin-bottom: 20px; } pre code { padding: 0; color: inherit; background-color: transparent; border: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } form { margin: 0 0 20px; } fieldset { padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 20px; font-size: 21px; line-height: 40px; color: #333333; border: 0; border-bottom: 1px solid #e5e5e5; } legend small { font-size: 15px; color: #999999; } label, input, button, select, textarea { font-size: 14px; font-weight: normal; line-height: 20px; } input, button, select, textarea { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } label { display: block; margin-bottom: 5px; } select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { display: inline-block; height: 20px; padding: 4px 6px; margin-bottom: 10px; font-size: 14px; line-height: 20px; color: #555555; vertical-align: middle; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } input, textarea, .uneditable-input { width: 206px; } textarea { height: auto; } textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { background-color: #ffffff; border: 1px solid #cccccc; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; -moz-transition: border linear 0.2s, box-shadow linear 0.2s; -o-transition: border linear 0.2s, box-shadow linear 0.2s; transition: border linear 0.2s, box-shadow linear 0.2s; } textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { border-color: rgba(82, 168, 236, 0.8); outline: 0; outline: thin dotted \9; /* IE6-9 */ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; *margin-top: 0; line-height: normal; cursor: pointer; } input[type="file"], input[type="image"], input[type="submit"], input[type="reset"], input[type="button"], input[type="radio"], input[type="checkbox"] { width: auto; } select, input[type="file"] { height: 30px; /* In IE7, the height of the select element cannot be changed by height, only font-size */ *margin-top: 4px; /* For IE7, add top margin to align select with labels */ line-height: 30px; } select { width: 220px; background-color: #ffffff; border: 1px solid #cccccc; } select[multiple], select[size] { height: auto; } select:focus, input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .uneditable-input, .uneditable-textarea { color: #999999; cursor: not-allowed; background-color: #fcfcfc; border-color: #cccccc; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); } .uneditable-input { overflow: hidden; white-space: nowrap; } .uneditable-textarea { width: auto; height: auto; } input:-moz-placeholder, textarea:-moz-placeholder { color: #999999; } input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #999999; } input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #999999; } .radio, .checkbox { min-height: 20px; padding-left: 20px; } .radio input[type="radio"], .checkbox input[type="checkbox"] { float: left; margin-left: -20px; } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 5px; } .radio.inline, .checkbox.inline { display: inline-block; padding-top: 5px; margin-bottom: 0; vertical-align: middle; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 10px; } .input-mini { width: 60px; } .input-small { width: 90px; } .input-medium { width: 150px; } .input-large { width: 210px; } .input-xlarge { width: 270px; } .input-xxlarge { width: 530px; } input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"] { float: none; margin-left: 0; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } input, textarea, .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 926px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 846px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 766px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 686px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 606px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 526px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 446px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 366px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 286px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 206px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 126px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 46px; } .controls-row { *zoom: 1; } .controls-row:before, .controls-row:after { display: table; line-height: 0; content: ""; } .controls-row:after { clear: both; } .controls-row [class*="span"], .row-fluid .controls-row [class*="span"] { float: left; } .controls-row .checkbox[class*="span"], .controls-row .radio[class*="span"] { padding-top: 5px; } input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] { cursor: not-allowed; background-color: #eeeeee; } input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"][readonly], input[type="checkbox"][readonly] { background-color: transparent; } .control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { color: #c09853; } .control-group.warning .checkbox, .control-group.warning .radio, .control-group.warning input, .control-group.warning select, .control-group.warning textarea { color: #c09853; } .control-group.warning input, .control-group.warning select, .control-group.warning textarea { border-color: #c09853; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { border-color: #a47e3c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; } .control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { color: #c09853; background-color: #fcf8e3; border-color: #c09853; } .control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { color: #b94a48; } .control-group.error .checkbox, .control-group.error .radio, .control-group.error input, .control-group.error select, .control-group.error textarea { color: #b94a48; } .control-group.error input, .control-group.error select, .control-group.error textarea { border-color: #b94a48; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { border-color: #953b39; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; } .control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { color: #b94a48; background-color: #f2dede; border-color: #b94a48; } .control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { color: #468847; } .control-group.success .checkbox, .control-group.success .radio, .control-group.success input, .control-group.success select, .control-group.success textarea { color: #468847; } .control-group.success input, .control-group.success select, .control-group.success textarea { border-color: #468847; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { border-color: #356635; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; } .control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { color: #468847; background-color: #dff0d8; border-color: #468847; } .control-group.info > label, .control-group.info .help-block, .control-group.info .help-inline { color: #3a87ad; } .control-group.info .checkbox, .control-group.info .radio, .control-group.info input, .control-group.info select, .control-group.info textarea { color: #3a87ad; } .control-group.info input, .control-group.info select, .control-group.info textarea { border-color: #3a87ad; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .control-group.info input:focus, .control-group.info select:focus, .control-group.info textarea:focus { border-color: #2d6987; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; } .control-group.info .input-prepend .add-on, .control-group.info .input-append .add-on { color: #3a87ad; background-color: #d9edf7; border-color: #3a87ad; } input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid { color: #b94a48; border-color: #ee5f5b; } input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus { border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; -moz-box-shadow: 0 0 6px #f8b9b7; box-shadow: 0 0 6px #f8b9b7; } .form-actions { padding: 19px 20px 20px; margin-top: 20px; margin-bottom: 20px; background-color: #f5f5f5; border-top: 1px solid #e5e5e5; *zoom: 1; } .form-actions:before, .form-actions:after { display: table; line-height: 0; content: ""; } .form-actions:after { clear: both; } .help-block, .help-inline { color: #595959; } .help-block { display: block; margin-bottom: 10px; } .help-inline { display: inline-block; *display: inline; padding-left: 5px; vertical-align: middle; *zoom: 1; } .input-append, .input-prepend { margin-bottom: 5px; font-size: 0; white-space: nowrap; } .input-append input, .input-prepend input, .input-append select, .input-prepend select, .input-append .uneditable-input, .input-prepend .uneditable-input, .input-append .dropdown-menu, .input-prepend .dropdown-menu { font-size: 14px; } .input-append input, .input-prepend input, .input-append select, .input-prepend select, .input-append .uneditable-input, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; *margin-left: 0; vertical-align: top; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .input-append input:focus, .input-prepend input:focus, .input-append select:focus, .input-prepend select:focus, .input-append .uneditable-input:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; width: auto; height: 20px; min-width: 16px; padding: 4px 5px; font-size: 14px; font-weight: normal; line-height: 20px; text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #eeeeee; border: 1px solid #ccc; } .input-append .add-on, .input-prepend .add-on, .input-append .btn, .input-prepend .btn { vertical-align: top; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-append .active, .input-prepend .active { background-color: #a9dba9; border-color: #46a546; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .input-append input, .input-append select, .input-append .uneditable-input { -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .input-append input + .btn-group .btn, .input-append select + .btn-group .btn, .input-append .uneditable-input + .btn-group .btn { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .input-append .add-on, .input-append .btn, .input-append .btn-group { margin-left: -1px; } .input-append .add-on:last-child, .input-append .btn:last-child { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .input-prepend.input-append input + .btn-group .btn, .input-prepend.input-append select + .btn-group .btn, .input-prepend.input-append .uneditable-input + .btn-group .btn { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { margin-left: -1px; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .input-prepend.input-append .btn-group:first-child { margin-left: 0; } input.search-query { padding-right: 14px; padding-right: 4px \9; padding-left: 14px; padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */ margin-bottom: 0; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } /* Allow for input prepend/append in search forms */ .form-search .input-append .search-query, .form-search .input-prepend .search-query { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .form-search .input-append .search-query { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search .input-append .btn { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .search-query { -webkit-border-radius: 0 14px 14px 0; -moz-border-radius: 0 14px 14px 0; border-radius: 0 14px 14px 0; } .form-search .input-prepend .btn { -webkit-border-radius: 14px 0 0 14px; -moz-border-radius: 14px 0 0 14px; border-radius: 14px 0 0 14px; } .form-search input, .form-inline input, .form-horizontal input, .form-search textarea, .form-inline textarea, .form-horizontal textarea, .form-search select, .form-inline select, .form-horizontal select, .form-search .help-inline, .form-inline .help-inline, .form-horizontal .help-inline, .form-search .uneditable-input, .form-inline .uneditable-input, .form-horizontal .uneditable-input, .form-search .input-prepend, .form-inline .input-prepend, .form-horizontal .input-prepend, .form-search .input-append, .form-inline .input-append, .form-horizontal .input-append { display: inline-block; *display: inline; margin-bottom: 0; vertical-align: middle; *zoom: 1; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search label, .form-inline label, .form-search .btn-group, .form-inline .btn-group { display: inline-block; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .form-search .radio, .form-search .checkbox, .form-inline .radio, .form-inline .checkbox { padding-left: 0; margin-bottom: 0; vertical-align: middle; } .form-search .radio input[type="radio"], .form-search .checkbox input[type="checkbox"], .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: left; margin-right: 3px; margin-left: 0; } .control-group { margin-bottom: 10px; } legend + .control-group { margin-top: 20px; -webkit-margin-top-collapse: separate; } .form-horizontal .control-group { margin-bottom: 20px; *zoom: 1; } .form-horizontal .control-group:before, .form-horizontal .control-group:after { display: table; line-height: 0; content: ""; } .form-horizontal .control-group:after { clear: both; } .form-horizontal .control-label { float: left; width: 160px; padding-top: 5px; text-align: right; } .form-horizontal .controls { *display: inline-block; *padding-left: 20px; margin-left: 180px; *margin-left: 0; } .form-horizontal .controls:first-child { *padding-left: 180px; } .form-horizontal .help-block { margin-bottom: 0; } .form-horizontal input + .help-block, .form-horizontal select + .help-block, .form-horizontal textarea + .help-block { margin-top: 10px; } .form-horizontal .form-actions { padding-left: 180px; } table { max-width: 100%; background-color: transparent; border-collapse: collapse; border-spacing: 0; } .table { width: 100%; margin-bottom: 20px; } .table th, .table td { padding: 8px; line-height: 20px; text-align: left; vertical-align: top; border-top: 1px solid #dddddd; } .table th { font-weight: bold; } .table thead th { vertical-align: bottom; } .table caption + thead tr:first-child th, .table caption + thead tr:first-child td, .table colgroup + thead tr:first-child th, .table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child th, .table thead:first-child tr:first-child td { border-top: 0; } .table tbody + tbody { border-top: 2px solid #dddddd; } .table-condensed th, .table-condensed td { padding: 4px 5px; } .table-bordered { border: 1px solid #dddddd; border-collapse: separate; *border-collapse: collapse; border-left: 0; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .table-bordered th, .table-bordered td { border-left: 1px solid #dddddd; } .table-bordered caption + thead tr:first-child th, .table-bordered caption + tbody tr:first-child th, .table-bordered caption + tbody tr:first-child td, .table-bordered colgroup + thead tr:first-child th, .table-bordered colgroup + tbody tr:first-child th, .table-bordered colgroup + tbody tr:first-child td, .table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { border-top: 0; } .table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child { -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; } .table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-topright: 4px; } .table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child, .table-bordered tfoot:last-child tr:last-child td:first-child { -webkit-border-radius: 0 0 0 4px; -moz-border-radius: 0 0 0 4px; border-radius: 0 0 0 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; } .table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child, .table-bordered tfoot:last-child tr:last-child td:last-child { -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; } .table-bordered caption + thead tr:first-child th:first-child, .table-bordered caption + tbody tr:first-child td:first-child, .table-bordered colgroup + thead tr:first-child th:first-child, .table-bordered colgroup + tbody tr:first-child td:first-child { -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; } .table-bordered caption + thead tr:first-child th:last-child, .table-bordered caption + tbody tr:first-child td:last-child, .table-bordered colgroup + thead tr:first-child th:last-child, .table-bordered colgroup + tbody tr:first-child td:last-child { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-topright: 4px; } .table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { background-color: #f9f9f9; } .table-hover tbody tr:hover td, .table-hover tbody tr:hover th { background-color: #f5f5f5; } table td[class*="span"], table th[class*="span"], .row-fluid table td[class*="span"], .row-fluid table th[class*="span"] { display: table-cell; float: none; margin-left: 0; } .table td.span1, .table th.span1 { float: none; width: 44px; margin-left: 0; } .table td.span2, .table th.span2 { float: none; width: 124px; margin-left: 0; } .table td.span3, .table th.span3 { float: none; width: 204px; margin-left: 0; } .table td.span4, .table th.span4 { float: none; width: 284px; margin-left: 0; } .table td.span5, .table th.span5 { float: none; width: 364px; margin-left: 0; } .table td.span6, .table th.span6 { float: none; width: 444px; margin-left: 0; } .table td.span7, .table th.span7 { float: none; width: 524px; margin-left: 0; } .table td.span8, .table th.span8 { float: none; width: 604px; margin-left: 0; } .table td.span9, .table th.span9 { float: none; width: 684px; margin-left: 0; } .table td.span10, .table th.span10 { float: none; width: 764px; margin-left: 0; } .table td.span11, .table th.span11 { float: none; width: 844px; margin-left: 0; } .table td.span12, .table th.span12 { float: none; width: 924px; margin-left: 0; } .table tbody tr.success td { background-color: #dff0d8; } .table tbody tr.error td { background-color: #f2dede; } .table tbody tr.warning td { background-color: #fcf8e3; } .table tbody tr.info td { background-color: #d9edf7; } .table-hover tbody tr.success:hover td { background-color: #d0e9c6; } .table-hover tbody tr.error:hover td { background-color: #ebcccc; } .table-hover tbody tr.warning:hover td { background-color: #faf2cc; } .table-hover tbody tr.info:hover td { background-color: #c4e3f3; } [class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; margin-top: 1px; *margin-right: .3em; line-height: 14px; vertical-align: text-top; background-image: url("../img/glyphicons-halflings.png"); background-position: 14px 14px; background-repeat: no-repeat; } /* White icons with optional class, or on hover/active states of certain elements */ .icon-white, .nav-pills > .active > a > [class^="icon-"], .nav-pills > .active > a > [class*=" icon-"], .nav-list > .active > a > [class^="icon-"], .nav-list > .active > a > [class*=" icon-"], .navbar-inverse .nav > .active > a > [class^="icon-"], .navbar-inverse .nav > .active > a > [class*=" icon-"], .dropdown-menu > li > a:hover > [class^="icon-"], .dropdown-menu > li > a:hover > [class*=" icon-"], .dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class^="icon-"], .dropdown-submenu:hover > a > [class*=" icon-"] { background-image: url("../img/glyphicons-halflings-white.png"); } .icon-glass { background-position: 0 0; } .icon-music { background-position: -24px 0; } .icon-search { background-position: -48px 0; } .icon-envelope { background-position: -72px 0; } .icon-heart { background-position: -96px 0; } .icon-star { background-position: -120px 0; } .icon-star-empty { background-position: -144px 0; } .icon-user { background-position: -168px 0; } .icon-film { background-position: -192px 0; } .icon-th-large { background-position: -216px 0; } .icon-th { background-position: -240px 0; } .icon-th-list { background-position: -264px 0; } .icon-ok { background-position: -288px 0; } .icon-remove { background-position: -312px 0; } .icon-zoom-in { background-position: -336px 0; } .icon-zoom-out { background-position: -360px 0; } .icon-off { background-position: -384px 0; } .icon-signal { background-position: -408px 0; } .icon-cog { background-position: -432px 0; } .icon-trash { background-position: -456px 0; } .icon-home { background-position: 0 -24px; } .icon-file { background-position: -24px -24px; } .icon-time { background-position: -48px -24px; } .icon-road { background-position: -72px -24px; } .icon-download-alt { background-position: -96px -24px; } .icon-download { background-position: -120px -24px; } .icon-upload { background-position: -144px -24px; } .icon-inbox { background-position: -168px -24px; } .icon-play-circle { background-position: -192px -24px; } .icon-repeat { background-position: -216px -24px; } .icon-refresh { background-position: -240px -24px; } .icon-list-alt { background-position: -264px -24px; } .icon-lock { background-position: -287px -24px; } .icon-flag { background-position: -312px -24px; } .icon-headphones { background-position: -336px -24px; } .icon-volume-off { background-position: -360px -24px; } .icon-volume-down { background-position: -384px -24px; } .icon-volume-up { background-position: -408px -24px; } .icon-qrcode { background-position: -432px -24px; } .icon-barcode { background-position: -456px -24px; } .icon-tag { background-position: 0 -48px; } .icon-tags { background-position: -25px -48px; } .icon-book { background-position: -48px -48px; } .icon-bookmark { background-position: -72px -48px; } .icon-print { background-position: -96px -48px; } .icon-camera { background-position: -120px -48px; } .icon-font { background-position: -144px -48px; } .icon-bold { background-position: -167px -48px; } .icon-italic { background-position: -192px -48px; } .icon-text-height { background-position: -216px -48px; } .icon-text-width { background-position: -240px -48px; } .icon-align-left { background-position: -264px -48px; } .icon-align-center { background-position: -288px -48px; } .icon-align-right { background-position: -312px -48px; } .icon-align-justify { background-position: -336px -48px; } .icon-list { background-position: -360px -48px; } .icon-indent-left { background-position: -384px -48px; } .icon-indent-right { background-position: -408px -48px; } .icon-facetime-video { background-position: -432px -48px; } .icon-picture { background-position: -456px -48px; } .icon-pencil { background-position: 0 -72px; } .icon-map-marker { background-position: -24px -72px; } .icon-adjust { background-position: -48px -72px; } .icon-tint { background-position: -72px -72px; } .icon-edit { background-position: -96px -72px; } .icon-share { background-position: -120px -72px; } .icon-check { background-position: -144px -72px; } .icon-move { background-position: -168px -72px; } .icon-step-backward { background-position: -192px -72px; } .icon-fast-backward { background-position: -216px -72px; } .icon-backward { background-position: -240px -72px; } .icon-play { background-position: -264px -72px; } .icon-pause { background-position: -288px -72px; } .icon-stop { background-position: -312px -72px; } .icon-forward { background-position: -336px -72px; } .icon-fast-forward { background-position: -360px -72px; } .icon-step-forward { background-position: -384px -72px; } .icon-eject { background-position: -408px -72px; } .icon-chevron-left { background-position: -432px -72px; } .icon-chevron-right { background-position: -456px -72px; } .icon-plus-sign { background-position: 0 -96px; } .icon-minus-sign { background-position: -24px -96px; } .icon-remove-sign { background-position: -48px -96px; } .icon-ok-sign { background-position: -72px -96px; } .icon-question-sign { background-position: -96px -96px; } .icon-info-sign { background-position: -120px -96px; } .icon-screenshot { background-position: -144px -96px; } .icon-remove-circle { background-position: -168px -96px; } .icon-ok-circle { background-position: -192px -96px; } .icon-ban-circle { background-position: -216px -96px; } .icon-arrow-left { background-position: -240px -96px; } .icon-arrow-right { background-position: -264px -96px; } .icon-arrow-up { background-position: -289px -96px; } .icon-arrow-down { background-position: -312px -96px; } .icon-share-alt { background-position: -336px -96px; } .icon-resize-full { background-position: -360px -96px; } .icon-resize-small { background-position: -384px -96px; } .icon-plus { background-position: -408px -96px; } .icon-minus { background-position: -433px -96px; } .icon-asterisk { background-position: -456px -96px; } .icon-exclamation-sign { background-position: 0 -120px; } .icon-gift { background-position: -24px -120px; } .icon-leaf { background-position: -48px -120px; } .icon-fire { background-position: -72px -120px; } .icon-eye-open { background-position: -96px -120px; } .icon-eye-close { background-position: -120px -120px; } .icon-warning-sign { background-position: -144px -120px; } .icon-plane { background-position: -168px -120px; } .icon-calendar { background-position: -192px -120px; } .icon-random { width: 16px; background-position: -216px -120px; } .icon-comment { background-position: -240px -120px; } .icon-magnet { background-position: -264px -120px; } .icon-chevron-up { background-position: -288px -120px; } .icon-chevron-down { background-position: -313px -119px; } .icon-retweet { background-position: -336px -120px; } .icon-shopping-cart { background-position: -360px -120px; } .icon-folder-close { background-position: -384px -120px; } .icon-folder-open { width: 16px; background-position: -408px -120px; } .icon-resize-vertical { background-position: -432px -119px; } .icon-resize-horizontal { background-position: -456px -118px; } .icon-hdd { background-position: 0 -144px; } .icon-bullhorn { background-position: -24px -144px; } .icon-bell { background-position: -48px -144px; } .icon-certificate { background-position: -72px -144px; } .icon-thumbs-up { background-position: -96px -144px; } .icon-thumbs-down { background-position: -120px -144px; } .icon-hand-right { background-position: -144px -144px; } .icon-hand-left { background-position: -168px -144px; } .icon-hand-up { background-position: -192px -144px; } .icon-hand-down { background-position: -216px -144px; } .icon-circle-arrow-right { background-position: -240px -144px; } .icon-circle-arrow-left { background-position: -264px -144px; } .icon-circle-arrow-up { background-position: -288px -144px; } .icon-circle-arrow-down { background-position: -312px -144px; } .icon-globe { background-position: -336px -144px; } .icon-wrench { background-position: -360px -144px; } .icon-tasks { background-position: -384px -144px; } .icon-filter { background-position: -408px -144px; } .icon-briefcase { background-position: -432px -144px; } .icon-fullscreen { background-position: -456px -144px; } .dropup, .dropdown { position: relative; } .dropdown-toggle { *margin-bottom: -3px; } .dropdown-toggle:active, .open .dropdown-toggle { outline: 0; } .caret { display: inline-block; width: 0; height: 0; vertical-align: top; border-top: 4px solid #000000; border-right: 4px solid transparent; border-left: 4px solid transparent; content: ""; } .dropdown .caret { margin-top: 8px; margin-left: 2px; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; list-style: none; background-color: #ffffff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); *border-right-width: 2px; *border-bottom-width: 2px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { *width: 100%; height: 1px; margin: 9px 1px; *margin: -5px 0 5px; overflow: hidden; background-color: #e5e5e5; border-bottom: 1px solid #ffffff; } .dropdown-menu li > a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 20px; color: #333333; white-space: nowrap; } .dropdown-menu li > a:hover, .dropdown-menu li > a:focus, .dropdown-submenu:hover > a { color: #ffffff; text-decoration: none; background-color: #0081c2; background-image: -moz-linear-gradient(top, #0088cc, #0077b3); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); background-image: -o-linear-gradient(top, #0088cc, #0077b3); background-image: linear-gradient(to bottom, #0088cc, #0077b3); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); } .dropdown-menu .active > a, .dropdown-menu .active > a:hover { color: #333333; text-decoration: none; background-color: #0081c2; background-image: -moz-linear-gradient(top, #0088cc, #0077b3); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); background-image: -o-linear-gradient(top, #0088cc, #0077b3); background-image: linear-gradient(to bottom, #0088cc, #0077b3); background-repeat: repeat-x; outline: 0; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); } .dropdown-menu .disabled > a, .dropdown-menu .disabled > a:hover { color: #999999; } .dropdown-menu .disabled > a:hover { text-decoration: none; cursor: default; background-color: transparent; background-image: none; } .open { *z-index: 1000; } .open > .dropdown-menu { display: block; } .pull-right > .dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid #000000; content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { top: 0; left: 100%; margin-top: -6px; margin-left: -1px; -webkit-border-radius: 0 6px 6px 6px; -moz-border-radius: 0 6px 6px 6px; border-radius: 0 6px 6px 6px; } .dropdown-submenu:hover > .dropdown-menu { display: block; } .dropup .dropdown-submenu > .dropdown-menu { top: auto; bottom: 0; margin-top: 0; margin-bottom: -2px; -webkit-border-radius: 5px 5px 5px 0; -moz-border-radius: 5px 5px 5px 0; border-radius: 5px 5px 5px 0; } .dropdown-submenu > a:after { display: block; float: right; width: 0; height: 0; margin-top: 5px; margin-right: -10px; border-color: transparent; border-left-color: #cccccc; border-style: solid; border-width: 5px 0 5px 5px; content: " "; } .dropdown-submenu:hover > a:after { border-left-color: #ffffff; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left > .dropdown-menu { left: -100%; margin-left: 10px; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; } .dropdown .dropdown-menu .nav-header { padding-right: 20px; padding-left: 20px; } .typeahead { margin-top: 2px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #e3e3e3; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } .well-large { padding: 24px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .well-small { padding: 9px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; -moz-transition: opacity 0.15s linear; -o-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } .fade.in { opacity: 1; } .collapse { position: relative; height: 0; overflow: hidden; -webkit-transition: height 0.35s ease; -moz-transition: height 0.35s ease; -o-transition: height 0.35s ease; transition: height 0.35s ease; } .collapse.in { height: auto; } .close { float: right; font-size: 20px; font-weight: bold; line-height: 20px; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .close:hover { color: #000000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .btn { display: inline-block; *display: inline; padding: 4px 12px; margin-bottom: 0; *margin-left: .3em; font-size: 14px; line-height: 20px; *line-height: 20px; color: #333333; text-align: center; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); vertical-align: middle; cursor: pointer; background-color: #f5f5f5; *background-color: #e6e6e6; background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); background-repeat: repeat-x; border: 1px solid #bbbbbb; *border: 0; border-color: #e6e6e6 #e6e6e6 #bfbfbf; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-bottom-color: #a2a2a2; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); *zoom: 1; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] { color: #333333; background-color: #e6e6e6; *background-color: #d9d9d9; } .btn:active, .btn.active { background-color: #cccccc \9; } .btn:first-child { *margin-left: 0; } .btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; *background-color: #d9d9d9; /* Buttons in IE7 don't get borders, so darken on hover */ background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } .btn:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn.active, .btn:active { background-color: #e6e6e6; background-color: #d9d9d9 \9; background-image: none; outline: 0; -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled, .btn[disabled] { cursor: default; background-color: #e6e6e6; background-image: none; opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-large { padding: 11px 19px; font-size: 17.5px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .btn-large [class^="icon-"], .btn-large [class*=" icon-"] { margin-top: 2px; } .btn-small { padding: 2px 10px; font-size: 11.9px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .btn-small [class^="icon-"], .btn-small [class*=" icon-"] { margin-top: 0; } .btn-mini { padding: 1px 6px; font-size: 10.5px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .btn-block { display: block; width: 100%; padding-right: 0; padding-left: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .btn-primary.active, .btn-warning.active, .btn-danger.active, .btn-success.active, .btn-info.active, .btn-inverse.active { color: rgba(255, 255, 255, 0.75); } .btn { border-color: #c5c5c5; border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); } .btn-primary { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #006dcc; *background-color: #0044cc; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(to bottom, #0088cc, #0044cc); background-repeat: repeat-x; border-color: #0044cc #0044cc #002a80; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { color: #ffffff; background-color: #0044cc; *background-color: #003bb3; } .btn-primary:active, .btn-primary.active { background-color: #003399 \9; } .btn-warning { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #faa732; *background-color: #f89406; background-image: -moz-linear-gradient(top, #fbb450, #f89406); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); background-image: -webkit-linear-gradient(top, #fbb450, #f89406); background-image: -o-linear-gradient(top, #fbb450, #f89406); background-image: linear-gradient(to bottom, #fbb450, #f89406); background-repeat: repeat-x; border-color: #f89406 #f89406 #ad6704; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .btn-warning:hover, .btn-warning:active, .btn-warning.active, .btn-warning.disabled, .btn-warning[disabled] { color: #ffffff; background-color: #f89406; *background-color: #df8505; } .btn-warning:active, .btn-warning.active { background-color: #c67605 \9; } .btn-danger { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #da4f49; *background-color: #bd362f; background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); background-repeat: repeat-x; border-color: #bd362f #bd362f #802420; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .btn-danger:hover, .btn-danger:active, .btn-danger.active, .btn-danger.disabled, .btn-danger[disabled] { color: #ffffff; background-color: #bd362f; *background-color: #a9302a; } .btn-danger:active, .btn-danger.active { background-color: #942a25 \9; } .btn-success { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #5bb75b; *background-color: #51a351; background-image: -moz-linear-gradient(top, #62c462, #51a351); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); background-image: -webkit-linear-gradient(top, #62c462, #51a351); background-image: -o-linear-gradient(top, #62c462, #51a351); background-image: linear-gradient(to bottom, #62c462, #51a351); background-repeat: repeat-x; border-color: #51a351 #51a351 #387038; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .btn-success:hover, .btn-success:active, .btn-success.active, .btn-success.disabled, .btn-success[disabled] { color: #ffffff; background-color: #51a351; *background-color: #499249; } .btn-success:active, .btn-success.active { background-color: #408140 \9; } .btn-info { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #49afcd; *background-color: #2f96b4; background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); background-repeat: repeat-x; border-color: #2f96b4 #2f96b4 #1f6377; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .btn-info:hover, .btn-info:active, .btn-info.active, .btn-info.disabled, .btn-info[disabled] { color: #ffffff; background-color: #2f96b4; *background-color: #2a85a0; } .btn-info:active, .btn-info.active { background-color: #24748c \9; } .btn-inverse { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #363636; *background-color: #222222; background-image: -moz-linear-gradient(top, #444444, #222222); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); background-image: -webkit-linear-gradient(top, #444444, #222222); background-image: -o-linear-gradient(top, #444444, #222222); background-image: linear-gradient(to bottom, #444444, #222222); background-repeat: repeat-x; border-color: #222222 #222222 #000000; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .btn-inverse:hover, .btn-inverse:active, .btn-inverse.active, .btn-inverse.disabled, .btn-inverse[disabled] { color: #ffffff; background-color: #222222; *background-color: #151515; } .btn-inverse:active, .btn-inverse.active { background-color: #080808 \9; } button.btn, input[type="submit"].btn { *padding-top: 3px; *padding-bottom: 3px; } button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { padding: 0; border: 0; } button.btn.btn-large, input[type="submit"].btn.btn-large { *padding-top: 7px; *padding-bottom: 7px; } button.btn.btn-small, input[type="submit"].btn.btn-small { *padding-top: 3px; *padding-bottom: 3px; } button.btn.btn-mini, input[type="submit"].btn.btn-mini { *padding-top: 1px; *padding-bottom: 1px; } .btn-link, .btn-link:active, .btn-link[disabled] { background-color: transparent; background-image: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .btn-link { color: #0088cc; cursor: pointer; border-color: transparent; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-link:hover { color: #005580; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover { color: #333333; text-decoration: none; } .btn-group { position: relative; display: inline-block; *display: inline; *margin-left: .3em; font-size: 0; white-space: nowrap; vertical-align: middle; *zoom: 1; } .btn-group:first-child { *margin-left: 0; } .btn-group + .btn-group { margin-left: 5px; } .btn-toolbar { margin-top: 10px; margin-bottom: 10px; font-size: 0; } .btn-toolbar .btn + .btn, .btn-toolbar .btn-group + .btn, .btn-toolbar .btn + .btn-group { margin-left: 5px; } .btn-group > .btn { position: relative; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-group > .btn + .btn { margin-left: -1px; } .btn-group > .btn, .btn-group > .dropdown-menu { font-size: 14px; } .btn-group > .btn-mini { font-size: 11px; } .btn-group > .btn-small { font-size: 12px; } .btn-group > .btn-large { font-size: 16px; } .btn-group > .btn:first-child { margin-left: 0; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; } .btn-group > .btn:last-child, .btn-group > .dropdown-toggle { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px; } .btn-group > .btn.large:first-child { margin-left: 0; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -moz-border-radius-topleft: 6px; } .btn-group > .btn.large:last-child, .btn-group > .large.dropdown-toggle { -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; -moz-border-radius-topright: 6px; -moz-border-radius-bottomright: 6px; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { z-index: 2; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { *padding-top: 5px; padding-right: 8px; *padding-bottom: 5px; padding-left: 8px; -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn-group > .btn-mini + .dropdown-toggle { *padding-top: 2px; padding-right: 5px; *padding-bottom: 2px; padding-left: 5px; } .btn-group > .btn-small + .dropdown-toggle { *padding-top: 5px; *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-toggle { *padding-top: 7px; padding-right: 12px; *padding-bottom: 7px; padding-left: 12px; } .btn-group.open .dropdown-toggle { background-image: none; -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn-group.open .btn.dropdown-toggle { background-color: #e6e6e6; } .btn-group.open .btn-primary.dropdown-toggle { background-color: #0044cc; } .btn-group.open .btn-warning.dropdown-toggle { background-color: #f89406; } .btn-group.open .btn-danger.dropdown-toggle { background-color: #bd362f; } .btn-group.open .btn-success.dropdown-toggle { background-color: #51a351; } .btn-group.open .btn-info.dropdown-toggle { background-color: #2f96b4; } .btn-group.open .btn-inverse.dropdown-toggle { background-color: #222222; } .btn .caret { margin-top: 8px; margin-left: 0; } .btn-mini .caret, .btn-small .caret, .btn-large .caret { margin-top: 6px; } .btn-large .caret { border-top-width: 5px; border-right-width: 5px; border-left-width: 5px; } .dropup .btn-large .caret { border-bottom-width: 5px; } .btn-primary .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret, .btn-success .caret, .btn-inverse .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; } .btn-group-vertical { display: inline-block; *display: inline; /* IE7 inline-block hack */ *zoom: 1; } .btn-group-vertical .btn { display: block; float: none; width: 100%; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .btn-group-vertical .btn + .btn { margin-top: -1px; margin-left: 0; } .btn-group-vertical .btn:first-child { -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .btn-group-vertical .btn:last-child { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .btn-group-vertical .btn-large:first-child { -webkit-border-radius: 6px 6px 0 0; -moz-border-radius: 6px 6px 0 0; border-radius: 6px 6px 0 0; } .btn-group-vertical .btn-large:last-child { -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; } .alert { padding: 8px 35px 8px 14px; margin-bottom: 20px; color: #c09853; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); background-color: #fcf8e3; border: 1px solid #fbeed5; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .alert h4 { margin: 0; } .alert .close { position: relative; top: -2px; right: -21px; line-height: 20px; } .alert-success { color: #468847; background-color: #dff0d8; border-color: #d6e9c6; } .alert-danger, .alert-error { color: #b94a48; background-color: #f2dede; border-color: #eed3d7; } .alert-info { color: #3a87ad; background-color: #d9edf7; border-color: #bce8f1; } .alert-block { padding-top: 14px; padding-bottom: 14px; } .alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { margin-top: 5px; } .nav { margin-bottom: 20px; margin-left: 0; list-style: none; } .nav > li > a { display: block; } .nav > li > a:hover { text-decoration: none; background-color: #eeeeee; } .nav > .pull-right { float: right; } .nav-header { display: block; padding: 3px 15px; font-size: 11px; font-weight: bold; line-height: 20px; color: #999999; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); text-transform: uppercase; } .nav li + .nav-header { margin-top: 9px; } .nav-list { padding-right: 15px; padding-left: 15px; margin-bottom: 0; } .nav-list > li > a, .nav-list .nav-header { margin-right: -15px; margin-left: -15px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .nav-list > li > a { padding: 3px 15px; } .nav-list > .active > a, .nav-list > .active > a:hover { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); background-color: #0088cc; } .nav-list [class^="icon-"], .nav-list [class*=" icon-"] { margin-right: 2px; } .nav-list .divider { *width: 100%; height: 1px; margin: 9px 1px; *margin: -5px 0 5px; overflow: hidden; background-color: #e5e5e5; border-bottom: 1px solid #ffffff; } .nav-tabs, .nav-pills { *zoom: 1; } .nav-tabs:before, .nav-pills:before, .nav-tabs:after, .nav-pills:after { display: table; line-height: 0; content: ""; } .nav-tabs:after, .nav-pills:after { clear: both; } .nav-tabs > li, .nav-pills > li { float: left; } .nav-tabs > li > a, .nav-pills > li > a { padding-right: 12px; padding-left: 12px; margin-right: 2px; line-height: 14px; } .nav-tabs { border-bottom: 1px solid #ddd; } .nav-tabs > li { margin-bottom: -1px; } .nav-tabs > li > a { padding-top: 8px; padding-bottom: 8px; line-height: 20px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #dddddd; } .nav-tabs > .active > a, .nav-tabs > .active > a:hover { color: #555555; cursor: default; background-color: #ffffff; border: 1px solid #ddd; border-bottom-color: transparent; } .nav-pills > li > a { padding-top: 8px; padding-bottom: 8px; margin-top: 2px; margin-bottom: 2px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .nav-pills > .active > a, .nav-pills > .active > a:hover { color: #ffffff; background-color: #0088cc; } .nav-stacked > li { float: none; } .nav-stacked > li > a { margin-right: 0; } .nav-tabs.nav-stacked { border-bottom: 0; } .nav-tabs.nav-stacked > li > a { border: 1px solid #ddd; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .nav-tabs.nav-stacked > li:first-child > a { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-topleft: 4px; } .nav-tabs.nav-stacked > li:last-child > a { -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -moz-border-radius-bottomleft: 4px; } .nav-tabs.nav-stacked > li > a:hover { z-index: 2; border-color: #ddd; } .nav-pills.nav-stacked > li > a { margin-bottom: 3px; } .nav-pills.nav-stacked > li:last-child > a { margin-bottom: 1px; } .nav-tabs .dropdown-menu { -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; } .nav-pills .dropdown-menu { -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .nav .dropdown-toggle .caret { margin-top: 6px; border-top-color: #0088cc; border-bottom-color: #0088cc; } .nav .dropdown-toggle:hover .caret { border-top-color: #005580; border-bottom-color: #005580; } /* move down carets for tabs */ .nav-tabs .dropdown-toggle .caret { margin-top: 8px; } .nav .active .dropdown-toggle .caret { border-top-color: #fff; border-bottom-color: #fff; } .nav-tabs .active .dropdown-toggle .caret { border-top-color: #555555; border-bottom-color: #555555; } .nav > .dropdown.active > a:hover { cursor: pointer; } .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > li.dropdown.open.active > a:hover { color: #ffffff; background-color: #999999; border-color: #999999; } .nav li.dropdown.open .caret, .nav li.dropdown.open.active .caret, .nav li.dropdown.open a:hover .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; opacity: 1; filter: alpha(opacity=100); } .tabs-stacked .open > a:hover { border-color: #999999; } .tabbable { *zoom: 1; } .tabbable:before, .tabbable:after { display: table; line-height: 0; content: ""; } .tabbable:after { clear: both; } .tab-content { overflow: auto; } .tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } .tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } .tab-content > .active, .pill-content > .active { display: block; } .tabs-below > .nav-tabs { border-top: 1px solid #ddd; } .tabs-below > .nav-tabs > li { margin-top: -1px; margin-bottom: 0; } .tabs-below > .nav-tabs > li > a { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .tabs-below > .nav-tabs > li > a:hover { border-top-color: #ddd; border-bottom-color: transparent; } .tabs-below > .nav-tabs > .active > a, .tabs-below > .nav-tabs > .active > a:hover { border-color: transparent #ddd #ddd #ddd; } .tabs-left > .nav-tabs > li, .tabs-right > .nav-tabs > li { float: none; } .tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; } .tabs-left > .nav-tabs { float: left; margin-right: 19px; border-right: 1px solid #ddd; } .tabs-left > .nav-tabs > li > a { margin-right: -1px; -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } .tabs-left > .nav-tabs > li > a:hover { border-color: #eeeeee #dddddd #eeeeee #eeeeee; } .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover { border-color: #ddd transparent #ddd #ddd; *border-right-color: #ffffff; } .tabs-right > .nav-tabs { float: right; margin-left: 19px; border-left: 1px solid #ddd; } .tabs-right > .nav-tabs > li > a { margin-left: -1px; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } .tabs-right > .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #eeeeee #dddddd; } .tabs-right > .nav-tabs .active > a, .tabs-right > .nav-tabs .active > a:hover { border-color: #ddd #ddd #ddd transparent; *border-left-color: #ffffff; } .nav > .disabled > a { color: #999999; } .nav > .disabled > a:hover { text-decoration: none; cursor: default; background-color: transparent; } .navbar { *position: relative; *z-index: 2; margin-bottom: 20px; overflow: visible; color: #777777; } .navbar-inner { min-height: 40px; padding-right: 20px; padding-left: 20px; background-color: #fafafa; background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); background-repeat: repeat-x; border: 1px solid #d4d4d4; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); *zoom: 1; -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); } .navbar-inner:before, .navbar-inner:after { display: table; line-height: 0; content: ""; } .navbar-inner:after { clear: both; } .navbar .container { width: auto; } .nav-collapse.collapse { height: auto; overflow: visible; } .navbar .brand { display: block; float: left; padding: 10px 20px 10px; margin-left: -20px; font-size: 20px; font-weight: 200; color: #777777; text-shadow: 0 1px 0 #ffffff; } .navbar .brand:hover { text-decoration: none; } .navbar-text { margin-bottom: 0; line-height: 40px; } .navbar-link { color: #777777; } .navbar-link:hover { color: #333333; } .navbar .divider-vertical { height: 40px; margin: 0 9px; border-right: 1px solid #ffffff; border-left: 1px solid #f2f2f2; } .navbar .btn, .navbar .btn-group { margin-top: 5px; } .navbar .btn-group .btn, .navbar .input-prepend .btn, .navbar .input-append .btn { margin-top: 0; } .navbar-form { margin-bottom: 0; *zoom: 1; } .navbar-form:before, .navbar-form:after { display: table; line-height: 0; content: ""; } .navbar-form:after { clear: both; } .navbar-form input, .navbar-form select, .navbar-form .radio, .navbar-form .checkbox { margin-top: 5px; } .navbar-form input, .navbar-form select, .navbar-form .btn { display: inline-block; margin-bottom: 0; } .navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { margin-top: 3px; } .navbar-form .input-append, .navbar-form .input-prepend { margin-top: 6px; white-space: nowrap; } .navbar-form .input-append input, .navbar-form .input-prepend input { margin-top: 0; } .navbar-search { position: relative; float: left; margin-top: 5px; margin-bottom: 0; } .navbar-search .search-query { padding: 4px 14px; margin-bottom: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; font-weight: normal; line-height: 1; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .navbar-static-top { position: static; margin-bottom: 0; } .navbar-static-top .navbar-inner { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; margin-bottom: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { border-width: 0 0 1px; } .navbar-fixed-bottom .navbar-inner { border-width: 1px 0 0; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding-right: 0; padding-left: 0; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .navbar-fixed-top { top: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); } .navbar-fixed-bottom { bottom: 0; } .navbar-fixed-bottom .navbar-inner { -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); } .navbar .nav { position: relative; left: 0; display: block; float: left; margin: 0 10px 0 0; } .navbar .nav.pull-right { float: right; margin-right: 0; } .navbar .nav > li { float: left; } .navbar .nav > li > a { float: none; padding: 10px 15px 10px; color: #777777; text-decoration: none; text-shadow: 0 1px 0 #ffffff; } .navbar .nav .dropdown-toggle .caret { margin-top: 8px; } .navbar .nav > li > a:focus, .navbar .nav > li > a:hover { color: #333333; text-decoration: none; background-color: transparent; } .navbar .nav > .active > a, .navbar .nav > .active > a:hover, .navbar .nav > .active > a:focus { color: #555555; text-decoration: none; background-color: #e5e5e5; -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); } .navbar .btn-navbar { display: none; float: right; padding: 7px 10px; margin-right: 5px; margin-left: 5px; color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #ededed; *background-color: #e5e5e5; background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); background-repeat: repeat-x; border-color: #e5e5e5 #e5e5e5 #bfbfbf; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); } .navbar .btn-navbar:hover, .navbar .btn-navbar:active, .navbar .btn-navbar.active, .navbar .btn-navbar.disabled, .navbar .btn-navbar[disabled] { color: #ffffff; background-color: #e5e5e5; *background-color: #d9d9d9; } .navbar .btn-navbar:active, .navbar .btn-navbar.active { background-color: #cccccc \9; } .navbar .btn-navbar .icon-bar { display: block; width: 18px; height: 2px; background-color: #f5f5f5; -webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); } .btn-navbar .icon-bar + .icon-bar { margin-top: 3px; } .navbar .nav > li > .dropdown-menu:before { position: absolute; top: -7px; left: 9px; display: inline-block; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-left: 7px solid transparent; border-bottom-color: rgba(0, 0, 0, 0.2); content: ''; } .navbar .nav > li > .dropdown-menu:after { position: absolute; top: -6px; left: 10px; display: inline-block; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; border-left: 6px solid transparent; content: ''; } .navbar-fixed-bottom .nav > li > .dropdown-menu:before { top: auto; bottom: -7px; border-top: 7px solid #ccc; border-bottom: 0; border-top-color: rgba(0, 0, 0, 0.2); } .navbar-fixed-bottom .nav > li > .dropdown-menu:after { top: auto; bottom: -6px; border-top: 6px solid #ffffff; border-bottom: 0; } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { color: #555555; background-color: #e5e5e5; } .navbar .nav li.dropdown > .dropdown-toggle .caret { border-top-color: #777777; border-bottom-color: #777777; } .navbar .nav li.dropdown.open > .dropdown-toggle .caret, .navbar .nav li.dropdown.active > .dropdown-toggle .caret, .navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: #555555; border-bottom-color: #555555; } .navbar .pull-right > li > .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right { right: 0; left: auto; } .navbar .pull-right > li > .dropdown-menu:before, .navbar .nav > li > .dropdown-menu.pull-right:before { right: 12px; left: auto; } .navbar .pull-right > li > .dropdown-menu:after, .navbar .nav > li > .dropdown-menu.pull-right:after { right: 13px; left: auto; } .navbar .pull-right > li > .dropdown-menu .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { right: 100%; left: auto; margin-right: -1px; margin-left: 0; -webkit-border-radius: 6px 0 6px 6px; -moz-border-radius: 6px 0 6px 6px; border-radius: 6px 0 6px 6px; } .navbar-inverse { color: #999999; } .navbar-inverse .navbar-inner { background-color: #1b1b1b; background-image: -moz-linear-gradient(top, #222222, #111111); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); background-image: -webkit-linear-gradient(top, #222222, #111111); background-image: -o-linear-gradient(top, #222222, #111111); background-image: linear-gradient(to bottom, #222222, #111111); background-repeat: repeat-x; border-color: #252525; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); } .navbar-inverse .brand, .navbar-inverse .nav > li > a { color: #999999; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .navbar-inverse .brand:hover, .navbar-inverse .nav > li > a:hover { color: #ffffff; } .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover { color: #ffffff; background-color: transparent; } .navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:hover, .navbar-inverse .nav .active > a:focus { color: #ffffff; background-color: #111111; } .navbar-inverse .navbar-link { color: #999999; } .navbar-inverse .navbar-link:hover { color: #ffffff; } .navbar-inverse .divider-vertical { border-right-color: #222222; border-left-color: #111111; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { color: #ffffff; background-color: #111111; } .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { border-top-color: #999999; border-bottom-color: #999999; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; } .navbar-inverse .navbar-search .search-query { color: #ffffff; background-color: #515151; border-color: #111111; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); -webkit-transition: none; -moz-transition: none; -o-transition: none; transition: none; } .navbar-inverse .navbar-search .search-query:-moz-placeholder { color: #cccccc; } .navbar-inverse .navbar-search .search-query:-ms-input-placeholder { color: #cccccc; } .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { color: #cccccc; } .navbar-inverse .navbar-search .search-query:focus, .navbar-inverse .navbar-search .search-query.focused { padding: 5px 15px; color: #333333; text-shadow: 0 1px 0 #ffffff; background-color: #ffffff; border: 0; outline: 0; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); } .navbar-inverse .btn-navbar { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #0e0e0e; *background-color: #040404; background-image: -moz-linear-gradient(top, #151515, #040404); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); background-image: -webkit-linear-gradient(top, #151515, #040404); background-image: -o-linear-gradient(top, #151515, #040404); background-image: linear-gradient(to bottom, #151515, #040404); background-repeat: repeat-x; border-color: #040404 #040404 #000000; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .navbar-inverse .btn-navbar:hover, .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active, .navbar-inverse .btn-navbar.disabled, .navbar-inverse .btn-navbar[disabled] { color: #ffffff; background-color: #040404; *background-color: #000000; } .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active { background-color: #000000 \9; } .breadcrumb { padding: 8px 15px; margin: 0 0 20px; list-style: none; background-color: #f5f5f5; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .breadcrumb li { display: inline-block; *display: inline; text-shadow: 0 1px 0 #ffffff; *zoom: 1; } .breadcrumb .divider { padding: 0 5px; color: #ccc; } .breadcrumb .active { color: #999999; } .pagination { margin: 20px 0; } .pagination ul { display: inline-block; *display: inline; margin-bottom: 0; margin-left: 0; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; *zoom: 1; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .pagination ul > li { display: inline; } .pagination ul > li > a, .pagination ul > li > span { float: left; padding: 4px 12px; line-height: 20px; text-decoration: none; background-color: #ffffff; border: 1px solid #dddddd; border-left-width: 0; } .pagination ul > li > a:hover, .pagination ul > .active > a, .pagination ul > .active > span { background-color: #f5f5f5; } .pagination ul > .active > a, .pagination ul > .active > span { color: #999999; cursor: default; } .pagination ul > .disabled > span, .pagination ul > .disabled > a, .pagination ul > .disabled > a:hover { color: #999999; cursor: default; background-color: transparent; } .pagination ul > li:first-child > a, .pagination ul > li:first-child > span { border-left-width: 1px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-topleft: 4px; } .pagination ul > li:last-child > a, .pagination ul > li:last-child > span { -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px; } .pagination-centered { text-align: center; } .pagination-right { text-align: right; } .pagination-large ul > li > a, .pagination-large ul > li > span { padding: 11px 19px; font-size: 17.5px; } .pagination-large ul > li:first-child > a, .pagination-large ul > li:first-child > span { -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -moz-border-radius-topleft: 6px; } .pagination-large ul > li:last-child > a, .pagination-large ul > li:last-child > span { -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; -moz-border-radius-topright: 6px; -moz-border-radius-bottomright: 6px; } .pagination-mini ul > li:first-child > a, .pagination-small ul > li:first-child > a, .pagination-mini ul > li:first-child > span, .pagination-small ul > li:first-child > span { -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -moz-border-radius-topleft: 3px; } .pagination-mini ul > li:last-child > a, .pagination-small ul > li:last-child > a, .pagination-mini ul > li:last-child > span, .pagination-small ul > li:last-child > span { -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 3px; } .pagination-small ul > li > a, .pagination-small ul > li > span { padding: 2px 10px; font-size: 11.9px; } .pagination-mini ul > li > a, .pagination-mini ul > li > span { padding: 1px 6px; font-size: 10.5px; } .pager { margin: 20px 0; text-align: center; list-style: none; *zoom: 1; } .pager:before, .pager:after { display: table; line-height: 0; content: ""; } .pager:after { clear: both; } .pager li { display: inline; } .pager li > a, .pager li > span { display: inline-block; padding: 5px 14px; background-color: #fff; border: 1px solid #ddd; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; } .pager li > a:hover { text-decoration: none; background-color: #f5f5f5; } .pager .next > a, .pager .next > span { float: right; } .pager .previous > a, .pager .previous > span { float: left; } .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > span { color: #999999; cursor: default; background-color: #fff; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.8; filter: alpha(opacity=80); } .modal { position: fixed; top: 50%; left: 50%; z-index: 1050; width: 560px; margin: -250px 0 0 -280px; background-color: #ffffff; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; outline: none; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; } .modal.fade { top: -25%; -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; -moz-transition: opacity 0.3s linear, top 0.3s ease-out; -o-transition: opacity 0.3s linear, top 0.3s ease-out; transition: opacity 0.3s linear, top 0.3s ease-out; } .modal.fade.in { top: 50%; } .modal-header { padding: 9px 15px; border-bottom: 1px solid #eee; } .modal-header .close { margin-top: 2px; } .modal-header h3 { margin: 0; line-height: 30px; } .modal-body { max-height: 400px; padding: 15px; overflow-y: auto; } .modal-form { margin-bottom: 0; } .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; text-align: right; background-color: #f5f5f5; border-top: 1px solid #ddd; -webkit-border-radius: 0 0 6px 6px; -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; *zoom: 1; -webkit-box-shadow: inset 0 1px 0 #ffffff; -moz-box-shadow: inset 0 1px 0 #ffffff; box-shadow: inset 0 1px 0 #ffffff; } .modal-footer:before, .modal-footer:after { display: table; line-height: 0; content: ""; } .modal-footer:after { clear: both; } .modal-footer .btn + .btn { margin-bottom: 0; margin-left: 5px; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; } .modal-footer .btn-block + .btn-block { margin-left: 0; } .tooltip { position: absolute; z-index: 1030; display: block; padding: 5px; font-size: 11px; opacity: 0; filter: alpha(opacity=0); visibility: visible; } .tooltip.in { opacity: 0.8; filter: alpha(opacity=80); } .tooltip.top { margin-top: -3px; } .tooltip.right { margin-left: 3px; } .tooltip.bottom { margin-top: 3px; } .tooltip.left { margin-left: -3px; } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #ffffff; text-align: center; text-decoration: none; background-color: #000000; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-color: #000000; border-width: 5px 5px 0; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-right-color: #000000; border-width: 5px 5px 5px 0; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-left-color: #000000; border-width: 5px 0 5px 5px; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-bottom-color: #000000; border-width: 0 5px 5px; } .popover { position: absolute; top: 0; left: 0; z-index: 1010; display: none; width: 236px; padding: 1px; background-color: #ffffff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { padding: 8px 14px; margin: 0; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .popover-content { padding: 9px 14px; } .popover-content p, .popover-content ul, .popover-content ol { margin-bottom: 0; } .popover .arrow, .popover .arrow:after { position: absolute; display: inline-block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow:after { z-index: -1; content: ""; } .popover.top .arrow { bottom: -10px; left: 50%; margin-left: -10px; border-top-color: #ffffff; border-width: 10px 10px 0; } .popover.top .arrow:after { bottom: -1px; left: -11px; border-top-color: rgba(0, 0, 0, 0.25); border-width: 11px 11px 0; } .popover.right .arrow { top: 50%; left: -10px; margin-top: -10px; border-right-color: #ffffff; border-width: 10px 10px 10px 0; } .popover.right .arrow:after { bottom: -11px; left: -1px; border-right-color: rgba(0, 0, 0, 0.25); border-width: 11px 11px 11px 0; } .popover.bottom .arrow { top: -10px; left: 50%; margin-left: -10px; border-bottom-color: #ffffff; border-width: 0 10px 10px; } .popover.bottom .arrow:after { top: -1px; left: -11px; border-bottom-color: rgba(0, 0, 0, 0.25); border-width: 0 11px 11px; } .popover.left .arrow { top: 50%; right: -10px; margin-top: -10px; border-left-color: #ffffff; border-width: 10px 0 10px 10px; } .popover.left .arrow:after { right: -1px; bottom: -11px; border-left-color: rgba(0, 0, 0, 0.25); border-width: 11px 0 11px 11px; } .thumbnails { margin-left: -20px; list-style: none; *zoom: 1; } .thumbnails:before, .thumbnails:after { display: table; line-height: 0; content: ""; } .thumbnails:after { clear: both; } .row-fluid .thumbnails { margin-left: 0; } .thumbnails > li { float: left; margin-bottom: 20px; margin-left: 20px; } .thumbnail { display: block; padding: 4px; line-height: 20px; border: 1px solid #ddd; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } a.thumbnail:hover { border-color: #0088cc; -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); } .thumbnail > img { display: block; max-width: 100%; margin-right: auto; margin-left: auto; } .thumbnail .caption { padding: 9px; color: #555555; } .media, .media-body { overflow: hidden; *overflow: visible; zoom: 1; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media .pull-left { margin-right: 10px; } .media .pull-right { margin-left: 10px; } .media-list { margin-left: 0; list-style: none; } .label, .badge { display: inline-block; padding: 2px 4px; font-size: 11.844px; font-weight: bold; line-height: 14px; color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); white-space: nowrap; vertical-align: baseline; background-color: #999999; } .label { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .badge { padding-right: 9px; padding-left: 9px; -webkit-border-radius: 9px; -moz-border-radius: 9px; border-radius: 9px; } a.label:hover, a.badge:hover { color: #ffffff; text-decoration: none; cursor: pointer; } .label-important, .badge-important { background-color: #b94a48; } .label-important[href], .badge-important[href] { background-color: #953b39; } .label-warning, .badge-warning { background-color: #f89406; } .label-warning[href], .badge-warning[href] { background-color: #c67605; } .label-success, .badge-success { background-color: #468847; } .label-success[href], .badge-success[href] { background-color: #356635; } .label-info, .badge-info { background-color: #3a87ad; } .label-info[href], .badge-info[href] { background-color: #2d6987; } .label-inverse, .badge-inverse { background-color: #333333; } .label-inverse[href], .badge-inverse[href] { background-color: #1a1a1a; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-moz-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-ms-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @-o-keyframes progress-bar-stripes { from { background-position: 0 0; } to { background-position: 40px 0; } } @keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } .progress { height: 20px; margin-bottom: 20px; overflow: hidden; background-color: #f7f7f7; background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); background-repeat: repeat-x; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } .progress .bar { float: left; width: 0; height: 100%; font-size: 12px; color: #ffffff; text-align: center; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #0e90d2; background-image: -moz-linear-gradient(top, #149bdf, #0480be); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); background-image: -webkit-linear-gradient(top, #149bdf, #0480be); background-image: -o-linear-gradient(top, #149bdf, #0480be); background-image: linear-gradient(to bottom, #149bdf, #0480be); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition: width 0.6s ease; -moz-transition: width 0.6s ease; -o-transition: width 0.6s ease; transition: width 0.6s ease; } .progress .bar + .bar { -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); } .progress-striped .bar { background-color: #149bdf; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -webkit-background-size: 40px 40px; -moz-background-size: 40px 40px; -o-background-size: 40px 40px; background-size: 40px 40px; } .progress.active .bar { -webkit-animation: progress-bar-stripes 2s linear infinite; -moz-animation: progress-bar-stripes 2s linear infinite; -ms-animation: progress-bar-stripes 2s linear infinite; -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-danger .bar, .progress .bar-danger { background-color: #dd514c; background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); } .progress-danger.progress-striped .bar, .progress-striped .bar-danger { background-color: #ee5f5b; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-success .bar, .progress .bar-success { background-color: #5eb95e; background-image: -moz-linear-gradient(top, #62c462, #57a957); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); background-image: -webkit-linear-gradient(top, #62c462, #57a957); background-image: -o-linear-gradient(top, #62c462, #57a957); background-image: linear-gradient(to bottom, #62c462, #57a957); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); } .progress-success.progress-striped .bar, .progress-striped .bar-success { background-color: #62c462; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-info .bar, .progress .bar-info { background-color: #4bb1cf; background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); background-image: -o-linear-gradient(top, #5bc0de, #339bb9); background-image: linear-gradient(to bottom, #5bc0de, #339bb9); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); } .progress-info.progress-striped .bar, .progress-striped .bar-info { background-color: #5bc0de; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-warning .bar, .progress .bar-warning { background-color: #faa732; background-image: -moz-linear-gradient(top, #fbb450, #f89406); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); background-image: -webkit-linear-gradient(top, #fbb450, #f89406); background-image: -o-linear-gradient(top, #fbb450, #f89406); background-image: linear-gradient(to bottom, #fbb450, #f89406); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); } .progress-warning.progress-striped .bar, .progress-striped .bar-warning { background-color: #fbb450; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .accordion { margin-bottom: 20px; } .accordion-group { margin-bottom: 2px; border: 1px solid #e5e5e5; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .accordion-heading { border-bottom: 0; } .accordion-heading .accordion-toggle { display: block; padding: 8px 15px; } .accordion-toggle { cursor: pointer; } .accordion-inner { padding: 9px 15px; border-top: 1px solid #e5e5e5; } .carousel { position: relative; margin-bottom: 20px; line-height: 1; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel .item { position: relative; display: none; -webkit-transition: 0.6s ease-in-out left; -moz-transition: 0.6s ease-in-out left; -o-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } .carousel .item > img { display: block; line-height: 1; } .carousel .active, .carousel .next, .carousel .prev { display: block; } .carousel .active { left: 0; } .carousel .next, .carousel .prev { position: absolute; top: 0; width: 100%; } .carousel .next { left: 100%; } .carousel .prev { left: -100%; } .carousel .next.left, .carousel .prev.right { left: 0; } .carousel .active.left { left: -100%; } .carousel .active.right { left: 100%; } .carousel-control { position: absolute; top: 40%; left: 15px; width: 40px; height: 40px; margin-top: -20px; font-size: 60px; font-weight: 100; line-height: 30px; color: #ffffff; text-align: center; background: #222222; border: 3px solid #ffffff; -webkit-border-radius: 23px; -moz-border-radius: 23px; border-radius: 23px; opacity: 0.5; filter: alpha(opacity=50); } .carousel-control.right { right: 15px; left: auto; } .carousel-control:hover { color: #ffffff; text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } .carousel-caption { position: absolute; right: 0; bottom: 0; left: 0; padding: 15px; background: #333333; background: rgba(0, 0, 0, 0.75); } .carousel-caption h4, .carousel-caption p { line-height: 20px; color: #ffffff; } .carousel-caption h4 { margin: 0 0 5px; } .carousel-caption p { margin-bottom: 0; } .hero-unit { padding: 60px; margin-bottom: 30px; font-size: 18px; font-weight: 200; line-height: 30px; color: inherit; background-color: #eeeeee; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .hero-unit h1 { margin-bottom: 0; font-size: 60px; line-height: 1; letter-spacing: -1px; color: inherit; } .hero-unit li { line-height: 30px; } .pull-right { float: right; } .pull-left { float: left; } .hide { display: none; } .show { display: block; } .invisible { visibility: hidden; } .affix { position: fixed; } ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/js/0000775000175300017540000000000012323717426024244 5ustar jenkinsjenkins00000000000000ceilometer-2014.1/ceilometer/api/v1/static/bootstrap/js/bootstrap.js0000664000175300017540000015623612323717130026624 0ustar jenkinsjenkins00000000000000/* =================================================== * bootstrap-transition.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#transitions * =================================================== * Copyright 2012 Twitter, Inc. * * 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. * ========================================================== */ !function ($) { "use strict"; // jshint ;_; /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) * ======================================================= */ $(function () { $.support.transition = (function () { var transitionEnd = (function () { var el = document.createElement('bootstrap') , transEndEventNames = { 'WebkitTransition' : 'webkitTransitionEnd' , 'MozTransition' : 'transitionend' , 'OTransition' : 'oTransitionEnd otransitionend' , 'transition' : 'transitionend' } , name for (name in transEndEventNames){ if (el.style[name] !== undefined) { return transEndEventNames[name] } } }()) return transitionEnd && { end: transitionEnd } })() }) }(window.jQuery);/* ========================================================== * bootstrap-alert.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#alerts * ========================================================== * Copyright 2012 Twitter, Inc. * * 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. * ========================================================== */ !function ($) { "use strict"; // jshint ;_; /* ALERT CLASS DEFINITION * ====================== */ var dismiss = '[data-dismiss="alert"]' , Alert = function (el) { $(el).on('click', dismiss, this.close) } Alert.prototype.close = function (e) { var $this = $(this) , selector = $this.attr('data-target') , $parent if (!selector) { selector = $this.attr('href') selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } $parent = $(selector) e && e.preventDefault() $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) $parent.trigger(e = $.Event('close')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { $parent .trigger('closed') .remove() } $.support.transition && $parent.hasClass('fade') ? $parent.on($.support.transition.end, removeElement) : removeElement() } /* ALERT PLUGIN DEFINITION * ======================= */ $.fn.alert = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('alert') if (!data) $this.data('alert', (data = new Alert(this))) if (typeof option == 'string') data[option].call($this) }) } $.fn.alert.Constructor = Alert /* ALERT DATA-API * ============== */ $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) }(window.jQuery);/* ============================================================ * bootstrap-button.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#buttons * ============================================================ * Copyright 2012 Twitter, Inc. * * 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. * ============================================================ */ !function ($) { "use strict"; // jshint ;_; /* BUTTON PUBLIC CLASS DEFINITION * ============================== */ var Button = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.button.defaults, options) } Button.prototype.setState = function (state) { var d = 'disabled' , $el = this.$element , data = $el.data() , val = $el.is('input') ? 'val' : 'html' state = state + 'Text' data.resetText || $el.data('resetText', $el[val]()) $el[val](data[state] || this.options[state]) // push to event loop to allow forms to submit setTimeout(function () { state == 'loadingText' ? $el.addClass(d).attr(d, d) : $el.removeClass(d).removeAttr(d) }, 0) } Button.prototype.toggle = function () { var $parent = this.$element.closest('[data-toggle="buttons-radio"]') $parent && $parent .find('.active') .removeClass('active') this.$element.toggleClass('active') } /* BUTTON PLUGIN DEFINITION * ======================== */ $.fn.button = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('button') , options = typeof option == 'object' && option if (!data) $this.data('button', (data = new Button(this, options))) if (option == 'toggle') data.toggle() else if (option) data.setState(option) }) } $.fn.button.defaults = { loadingText: 'loading...' } $.fn.button.Constructor = Button /* BUTTON DATA-API * =============== */ $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') }) }(window.jQuery);/* ========================================================== * bootstrap-carousel.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#carousel * ========================================================== * Copyright 2012 Twitter, Inc. * * 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. * ========================================================== */ !function ($) { "use strict"; // jshint ;_; /* CAROUSEL CLASS DEFINITION * ========================= */ var Carousel = function (element, options) { this.$element = $(element) this.options = options this.options.slide && this.slide(this.options.slide) this.options.pause == 'hover' && this.$element .on('mouseenter', $.proxy(this.pause, this)) .on('mouseleave', $.proxy(this.cycle, this)) } Carousel.prototype = { cycle: function (e) { if (!e) this.paused = false this.options.interval && !this.paused && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) return this } , to: function (pos) { var $active = this.$element.find('.item.active') , children = $active.parent().children() , activePos = children.index($active) , that = this if (pos > (children.length - 1) || pos < 0) return if (this.sliding) { return this.$element.one('slid', function () { that.to(pos) }) } if (activePos == pos) { return this.pause().cycle() } return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) } , pause: function (e) { if (!e) this.paused = true if (this.$element.find('.next, .prev').length && $.support.transition.end) { this.$element.trigger($.support.transition.end) this.cycle() } clearInterval(this.interval) this.interval = null return this } , next: function () { if (this.sliding) return return this.slide('next') } , prev: function () { if (this.sliding) return return this.slide('prev') } , slide: function (type, next) { var $active = this.$element.find('.item.active') , $next = next || $active[type]() , isCycling = this.interval , direction = type == 'next' ? 'left' : 'right' , fallback = type == 'next' ? 'first' : 'last' , that = this , e this.sliding = true isCycling && this.pause() $next = $next.length ? $next : this.$element.find('.item')[fallback]() e = $.Event('slide', { relatedTarget: $next[0] }) if ($next.hasClass('active')) return if ($.support.transition && this.$element.hasClass('slide')) { this.$element.trigger(e) if (e.isDefaultPrevented()) return $next.addClass(type) $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) this.$element.one($.support.transition.end, function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false setTimeout(function () { that.$element.trigger('slid') }, 0) }) } else { this.$element.trigger(e) if (e.isDefaultPrevented()) return $active.removeClass('active') $next.addClass('active') this.sliding = false this.$element.trigger('slid') } isCycling && this.cycle() return this } } /* CAROUSEL PLUGIN DEFINITION * ========================== */ $.fn.carousel = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('carousel') , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) , action = typeof option == 'string' ? option : options.slide if (!data) $this.data('carousel', (data = new Carousel(this, options))) if (typeof option == 'number') data.to(option) else if (action) data[action]() else if (options.interval) data.cycle() }) } $.fn.carousel.defaults = { interval: 5000 , pause: 'hover' } $.fn.carousel.Constructor = Carousel /* CAROUSEL DATA-API * ================= */ $(document).on('click.carousel.data-api', '[data-slide]', function (e) { var $this = $(this), href , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 , options = $.extend({}, $target.data(), $this.data()) $target.carousel(options) e.preventDefault() }) }(window.jQuery);/* ============================================================= * bootstrap-collapse.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. * * 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. * ============================================================ */ !function ($) { "use strict"; // jshint ;_; /* COLLAPSE PUBLIC CLASS DEFINITION * ================================ */ var Collapse = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.collapse.defaults, options) if (this.options.parent) { this.$parent = $(this.options.parent) } this.options.toggle && this.toggle() } Collapse.prototype = { constructor: Collapse , dimension: function () { var hasWidth = this.$element.hasClass('width') return hasWidth ? 'width' : 'height' } , show: function () { var dimension , scroll , actives , hasData if (this.transitioning) return dimension = this.dimension() scroll = $.camelCase(['scroll', dimension].join('-')) actives = this.$parent && this.$parent.find('> .accordion-group > .in') if (actives && actives.length) { hasData = actives.data('collapse') if (hasData && hasData.transitioning) return actives.collapse('hide') hasData || actives.data('collapse', null) } this.$element[dimension](0) this.transition('addClass', $.Event('show'), 'shown') $.support.transition && this.$element[dimension](this.$element[0][scroll]) } , hide: function () { var dimension if (this.transitioning) return dimension = this.dimension() this.reset(this.$element[dimension]()) this.transition('removeClass', $.Event('hide'), 'hidden') this.$element[dimension](0) } , reset: function (size) { var dimension = this.dimension() this.$element .removeClass('collapse') [dimension](size || 'auto') [0].offsetWidth this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') return this } , transition: function (method, startEvent, completeEvent) { var that = this , complete = function () { if (startEvent.type == 'show') that.reset() that.transitioning = 0 that.$element.trigger(completeEvent) } this.$element.trigger(startEvent) if (startEvent.isDefaultPrevented()) return this.transitioning = 1 this.$element[method]('in') $.support.transition && this.$element.hasClass('collapse') ? this.$element.one($.support.transition.end, complete) : complete() } , toggle: function () { this[this.$element.hasClass('in') ? 'hide' : 'show']() } } /* COLLAPSIBLE PLUGIN DEFINITION * ============================== */ $.fn.collapse = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('collapse') , options = typeof option == 'object' && option if (!data) $this.data('collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) } $.fn.collapse.defaults = { toggle: true } $.fn.collapse.Constructor = Collapse /* COLLAPSIBLE DATA-API * ==================== */ $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { var $this = $(this), href , target = $this.attr('data-target') || e.preventDefault() || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 , option = $(target).data('collapse') ? 'toggle' : $this.data() $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') $(target).collapse(option) }) }(window.jQuery);/* ============================================================ * bootstrap-dropdown.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. * * 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. * ============================================================ */ !function ($) { "use strict"; // jshint ;_; /* DROPDOWN CLASS DEFINITION * ========================= */ var toggle = '[data-toggle=dropdown]' , Dropdown = function (element) { var $el = $(element).on('click.dropdown.data-api', this.toggle) $('html').on('click.dropdown.data-api', function () { $el.parent().removeClass('open') }) } Dropdown.prototype = { constructor: Dropdown , toggle: function (e) { var $this = $(this) , $parent , isActive if ($this.is('.disabled, :disabled')) return $parent = getParent($this) isActive = $parent.hasClass('open') clearMenus() if (!isActive) { $parent.toggleClass('open') $this.focus() } return false } , keydown: function (e) { var $this , $items , $active , $parent , isActive , index if (!/(38|40|27)/.test(e.keyCode)) return $this = $(this) e.preventDefault() e.stopPropagation() if ($this.is('.disabled, :disabled')) return $parent = getParent($this) isActive = $parent.hasClass('open') if (!isActive || (isActive && e.keyCode == 27)) return $this.click() $items = $('[role=menu] li:not(.divider) a', $parent) if (!$items.length) return index = $items.index($items.filter(':focus')) if (e.keyCode == 38 && index > 0) index-- // up if (e.keyCode == 40 && index < $items.length - 1) index++ // down if (!~index) index = 0 $items .eq(index) .focus() } } function clearMenus() { $(toggle).each(function () { getParent($(this)).removeClass('open') }) } function getParent($this) { var selector = $this.attr('data-target') , $parent if (!selector) { selector = $this.attr('href') selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } $parent = $(selector) $parent.length || ($parent = $this.parent()) return $parent } /* DROPDOWN PLUGIN DEFINITION * ========================== */ $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('dropdown') if (!data) $this.data('dropdown', (data = new Dropdown(this))) if (typeof option == 'string') data[option].call($this) }) } $.fn.dropdown.Constructor = Dropdown /* APPLY TO STANDARD DROPDOWN ELEMENTS * =================================== */ $(document) .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) }(window.jQuery);/* ========================================================= * bootstrap-modal.js v2.2.1 * http://twitter.github.com/bootstrap/javascript.html#modals * ========================================================= * Copyright 2012 Twitter, Inc. * * 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. * ========================================================= */ !function ($) { "use strict"; // jshint ;_; /* MODAL CLASS DEFINITION * ====================== */ var Modal = function (element, options) { this.options = options this.$element = $(element) .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) this.options.remote && this.$element.find('.modal-body').load(this.options.remote) } Modal.prototype = { constructor: Modal , toggle: function () { return this[!this.isShown ? 'show' : 'hide']() } , show: function () { var that = this , e = $.Event('show') this.$element.trigger(e) if (this.isShown || e.isDefaultPrevented()) return this.isShown = true this.escape() this.backdrop(function () { var transition = $.support.transition && that.$element.hasClass('fade') if (!that.$element.parent().length) { that.$element.appendTo(document.body) //don't move modals dom position } that.$element .show() if (transition) { that.$element[0].offsetWidth // force reflow } that.$element .addClass('in') .attr('aria-hidden', false) that.enforceFocus() transition ? that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : that.$element.focus().trigger('shown') }) } , hide: function (e) { e && e.preventDefault() var that = this e = $.Event('hide') this.$element.trigger(e) if (!this.isShown || e.isDefaultPrevented()) return this.isShown = false this.escape() $(document).off('focusin.modal') this.$element .removeClass('in') .attr('aria-hidden', true) $.support.transition && this.$element.hasClass('fade') ? this.hideWithTransition() : this.hideModal() } , enforceFocus: function () { var that = this $(document).on('focusin.modal', function (e) { if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { that.$element.focus() } }) } , escape: function () { var that = this if (this.isShown && this.options.keyboard) { this.$element.on('keyup.dismiss.modal', function ( e ) { e.which == 27 && that.hide() }) } else if (!this.isShown) { this.$element.off('keyup.dismiss.modal') } } , hideWithTransition: function () { var that = this , timeout = setTimeout(function () { that.$element.off($.support.transition.end) that.hideModal() }, 500) this.$element.one($.support.transition.end, function () { clearTimeout(timeout) that.hideModal() }) } , hideModal: function (that) { this.$element .hide() .trigger('hidden') this.backdrop() } , removeBackdrop: function () { this.$backdrop.remove() this.$backdrop = null } , backdrop: function (callback) { var that = this , animate = this.$element.hasClass('fade') ? 'fade' : '' if (this.isShown && this.options.backdrop) { var doAnimate = $.support.transition && animate this.$backdrop = $('