Add i18n warpping for all LOG messages
Add i18n wrapping for all LOG messages Change-Id: I7f9c71a3aa76364b291f7e21a1737b927cbdc300 Fixes: bug #1199678
This commit is contained in:
parent
1fe8e8b300
commit
7f542e3ac8
@ -18,6 +18,7 @@
|
||||
"""Log alarm notifier."""
|
||||
|
||||
from ceilometer.alarm import notifier
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
@ -28,5 +29,9 @@ class LogAlarmNotifier(notifier.AlarmNotifier):
|
||||
|
||||
@staticmethod
|
||||
def notify(action, alarm_id, previous, current, reason):
|
||||
LOG.info("Notifying alarm %s from %s to %s with action %s because %s",
|
||||
alarm_id, previous, current, action, reason)
|
||||
LOG.info(_(
|
||||
"Notifying alarm %(alarm_id)s from %(previous)s "
|
||||
"to %(current)s with action %(action)s because "
|
||||
"%(reason)s") % ({'alarm_id': alarm_id, 'previous': previous,
|
||||
'current': current, 'action': action,
|
||||
'reason': reason}))
|
||||
|
@ -24,6 +24,7 @@ import urlparse
|
||||
from oslo.config import cfg
|
||||
|
||||
from ceilometer.alarm import notifier
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import jsonutils
|
||||
from ceilometer.openstack.common import log
|
||||
|
||||
@ -54,8 +55,12 @@ class RestAlarmNotifier(notifier.AlarmNotifier):
|
||||
|
||||
@staticmethod
|
||||
def notify(action, alarm_id, previous, current, reason):
|
||||
LOG.info("Notifying alarm %s from %s to %s with action %s because %s",
|
||||
alarm_id, previous, current, action, reason)
|
||||
LOG.info(_(
|
||||
"Notifying alarm %(alarm_id)s from %(previous)s "
|
||||
"to %(current)s with action %(action)s because "
|
||||
"%(reason)s") % ({'alarm_id': alarm_id, 'previous': previous,
|
||||
'current': current, 'action': action,
|
||||
'reason': reason}))
|
||||
body = {'alarm_id': alarm_id, 'previous': previous,
|
||||
'current': current, 'reason': reason}
|
||||
kwargs = {'data': jsonutils.dumps(body)}
|
||||
|
@ -240,8 +240,8 @@ class PartitionCoordinator(object):
|
||||
# nothing to distribute, but check anyway if overtaken
|
||||
still_ahead = self.this < self.oldest
|
||||
self.last_alarms = set(alarms)
|
||||
LOG.info('%(this)s not overtaken as master? %(still_ahead)s' %
|
||||
dict(this=self.this, still_ahead=still_ahead))
|
||||
LOG.info(_('%(this)s not overtaken as master? %(still_ahead)s') %
|
||||
({'this': self.this, 'still_ahead': still_ahead}))
|
||||
return still_ahead
|
||||
|
||||
def check_mastership(self, eval_interval, api_client):
|
||||
|
@ -160,7 +160,7 @@ class PartitionedAlarmService(AlarmService, rpc_service.Service):
|
||||
self.partition_coordinator = coordination.PartitionCoordinator()
|
||||
|
||||
def initialize_service_hook(self, service):
|
||||
LOG.debug('initialize_service_hooks')
|
||||
LOG.debug(_('initialize_service_hooks'))
|
||||
self.conn.create_worker(
|
||||
cfg.CONF.alarm.partition_rpc_topic,
|
||||
rpc_dispatcher.RpcDispatcher([self]),
|
||||
@ -218,7 +218,7 @@ class AlarmNotifierService(rpc_service.Service):
|
||||
self.tg.add_timer(604800, lambda: None)
|
||||
|
||||
def initialize_service_hook(self, service):
|
||||
LOG.debug('initialize_service_hooks')
|
||||
LOG.debug(_('initialize_service_hooks'))
|
||||
self.conn.create_worker(
|
||||
cfg.CONF.alarm.notifier_rpc_topic,
|
||||
rpc_dispatcher.RpcDispatcher([self]),
|
||||
@ -245,8 +245,8 @@ class AlarmNotifierService(rpc_service.Service):
|
||||
return
|
||||
|
||||
try:
|
||||
LOG.debug("Notifying alarm %s with action %s",
|
||||
alarm_id, action)
|
||||
LOG.debug(_("Notifying alarm %(id)s with action %(act)s") % (
|
||||
{'id': alarm_id, 'act': action}))
|
||||
notifier.notify(action, alarm_id, previous, current, reason)
|
||||
except Exception:
|
||||
LOG.exception(_("Unable to notify alarm %s"), alarm_id)
|
||||
|
@ -117,14 +117,16 @@ def start():
|
||||
host, port = cfg.CONF.api.host, cfg.CONF.api.port
|
||||
srv = simple_server.make_server(host, port, root)
|
||||
|
||||
LOG.info('Starting server in PID %s' % os.getpid())
|
||||
LOG.info("Configuration:")
|
||||
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:%s, view at http://127.0.0.1:%s' %
|
||||
(port, port))
|
||||
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://%s:%s" % (host, port))
|
||||
LOG.info(_("serving on http://%(host)s:%(port)s") % (
|
||||
{'host': host, 'port': port}))
|
||||
|
||||
srv.serve_forever()
|
||||
|
@ -654,12 +654,12 @@ class Statistics(_Base):
|
||||
self.duration_start and
|
||||
self.duration_start < start_timestamp):
|
||||
self.duration_start = start_timestamp
|
||||
LOG.debug('clamping min timestamp to range')
|
||||
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')
|
||||
LOG.debug(_('clamping max timestamp to range'))
|
||||
|
||||
# If we got valid timestamps back, compute a duration in seconds.
|
||||
#
|
||||
@ -800,7 +800,8 @@ class MeterController(rest.RestController):
|
||||
computed = pecan.request.storage_conn.get_meter_statistics(f,
|
||||
period,
|
||||
g)
|
||||
LOG.debug('computed value coming from %r', pecan.request.storage_conn)
|
||||
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
|
||||
@ -1347,7 +1348,7 @@ class AlarmController(rest.RestController):
|
||||
try:
|
||||
alarm_in = storage.models.Alarm(**updated_alarm)
|
||||
except Exception:
|
||||
LOG.exception("Error while putting alarm: %s" % updated_alarm)
|
||||
LOG.exception(_("Error while putting alarm: %s") % updated_alarm)
|
||||
raise ClientSideError(_("Alarm incorrect"))
|
||||
|
||||
alarm = self.conn.update_alarm(alarm_in)
|
||||
@ -1486,7 +1487,7 @@ class AlarmsController(rest.RestController):
|
||||
try:
|
||||
alarm_in = storage.models.Alarm(**change)
|
||||
except Exception:
|
||||
LOG.exception("Error while posting alarm: %s" % change)
|
||||
LOG.exception(_("Error while posting alarm: %s") % change)
|
||||
raise ClientSideError(_("Alarm incorrect"))
|
||||
|
||||
alarm = conn.create_alarm(alarm_in)
|
||||
|
@ -29,6 +29,7 @@ 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__)
|
||||
@ -108,7 +109,7 @@ class ParsableErrorMiddleware(object):
|
||||
body = ['<error_message>' + etree.tostring(fault)
|
||||
+ '</error_message>']
|
||||
except etree.XMLSyntaxError as err:
|
||||
LOG.error('Error parsing HTTP response: %s' % err)
|
||||
LOG.error(_('Error parsing HTTP response: %s') % err)
|
||||
body = ['<error_message>%s' % state['status_code']
|
||||
+ '</error_message>']
|
||||
state['headers'].append(('Content-Type', 'application/xml'))
|
||||
|
@ -89,6 +89,7 @@ import datetime
|
||||
|
||||
import flask
|
||||
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
from ceilometer.openstack.common import timeutils
|
||||
|
||||
@ -565,14 +566,20 @@ def compute_duration_by_resource(resource, meter):
|
||||
|
||||
# "Clamp" the timestamps we return to the original time
|
||||
# range, excluding the offset.
|
||||
LOG.debug('start_timestamp %s, end_timestamp %s, min_ts %s, max_ts %s',
|
||||
start_timestamp, end_timestamp, min_ts, max_ts)
|
||||
LOG.debug(_('start_timestamp %(start_timestamp)s, '
|
||||
'end_timestamp %(end_timestamp)s, '
|
||||
'min_ts %(min_ts)s, '
|
||||
'max_ts %(max_ts)s') % (
|
||||
{'start_timestamp': start_timestamp,
|
||||
'end_timestamp': end_timestamp,
|
||||
'min_ts': min_ts,
|
||||
'max_ts': max_ts}))
|
||||
if start_timestamp and min_ts and min_ts < start_timestamp:
|
||||
min_ts = start_timestamp
|
||||
LOG.debug('clamping min timestamp to range')
|
||||
LOG.debug(_('clamping min timestamp to range'))
|
||||
if end_timestamp and max_ts and max_ts > end_timestamp:
|
||||
max_ts = end_timestamp
|
||||
LOG.debug('clamping max timestamp to range')
|
||||
LOG.debug(_('clamping max timestamp to range'))
|
||||
|
||||
# If we got valid timestamps back, compute a duration in minutes.
|
||||
#
|
||||
|
@ -21,6 +21,7 @@ from oslo.config import cfg
|
||||
from stevedore import extension
|
||||
|
||||
from ceilometer import agent
|
||||
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.openstack.common import service as os_service
|
||||
@ -40,15 +41,16 @@ class PollingTask(agent.PollingTask):
|
||||
cache = {}
|
||||
for pollster in self.pollsters:
|
||||
try:
|
||||
LOG.info("Polling pollster %s", pollster.name)
|
||||
LOG.info(_("Polling pollster %s"), pollster.name)
|
||||
samples = list(pollster.obj.get_samples(
|
||||
self.manager,
|
||||
cache,
|
||||
))
|
||||
publisher(samples)
|
||||
except Exception as err:
|
||||
LOG.warning('Continue after error from %s: %s',
|
||||
pollster.name, err)
|
||||
LOG.warning(_(
|
||||
'Continue after error from %(name)s: %(error)s')
|
||||
% ({'name': pollster.name, 'error': err}))
|
||||
LOG.exception(err)
|
||||
|
||||
|
||||
|
@ -79,7 +79,7 @@ class CollectorService(service.DispatchedService, rpc_service.Service):
|
||||
sample['counter_volume'] = sample['volume']
|
||||
sample['counter_unit'] = sample['unit']
|
||||
sample['counter_type'] = sample['type']
|
||||
LOG.debug("UDP: Storing %s", str(sample))
|
||||
LOG.debug(_("UDP: Storing %s"), str(sample))
|
||||
self.dispatcher_manager.map_method('record_metering_data',
|
||||
sample)
|
||||
except Exception:
|
||||
|
@ -22,6 +22,7 @@ from stevedore import extension
|
||||
from ceilometer import agent
|
||||
from ceilometer.compute.virt import inspector as virt_inspector
|
||||
from ceilometer import nova_client
|
||||
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.openstack.common import service as os_service
|
||||
@ -39,7 +40,7 @@ class PollingTask(agent.PollingTask):
|
||||
cache = {}
|
||||
for pollster in self.pollsters:
|
||||
try:
|
||||
LOG.info("Polling pollster %s", pollster.name)
|
||||
LOG.info(_("Polling pollster %s"), pollster.name)
|
||||
samples = list(pollster.obj.get_samples(
|
||||
self.manager,
|
||||
cache,
|
||||
@ -47,15 +48,16 @@ class PollingTask(agent.PollingTask):
|
||||
))
|
||||
publisher(samples)
|
||||
except Exception as err:
|
||||
LOG.warning('Continue after error from %s: %s',
|
||||
pollster.name, err)
|
||||
LOG.warning(_(
|
||||
'Continue after error from %(name)s: %(error)s')
|
||||
% ({'name': pollster.name, 'error': err}))
|
||||
LOG.exception(err)
|
||||
|
||||
def poll_and_publish(self):
|
||||
try:
|
||||
instances = self.manager.nv.instance_get_all_by_host(cfg.CONF.host)
|
||||
except Exception as err:
|
||||
LOG.exception('Unable to retrieve instances: %s', err)
|
||||
LOG.exception(_('Unable to retrieve instances: %s') % err)
|
||||
else:
|
||||
self.poll_and_publish_instances(instances)
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
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
|
||||
|
||||
@ -30,12 +31,12 @@ LOG = log.getLogger(__name__)
|
||||
class CPUPollster(plugin.ComputePollster):
|
||||
|
||||
def get_samples(self, manager, cache, instance):
|
||||
LOG.info('checking instance %s', instance.id)
|
||||
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: %s %d",
|
||||
instance.__dict__, cpu_info.time)
|
||||
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,
|
||||
@ -47,8 +48,8 @@ class CPUPollster(plugin.ComputePollster):
|
||||
)
|
||||
except virt_inspector.InstanceNotFoundException as err:
|
||||
# Instance was deleted while getting samples. Ignore it.
|
||||
LOG.debug('Exception while getting samples %s', err)
|
||||
LOG.debug(_('Exception while getting samples %s'), err)
|
||||
except Exception as err:
|
||||
LOG.error('could not get CPU time for %s: %s',
|
||||
instance.id, err)
|
||||
LOG.error(_('could not get CPU time for %(id)s: %(e)s') % (
|
||||
{'id': instance.id, 'e': err}))
|
||||
LOG.exception(err)
|
||||
|
@ -24,6 +24,7 @@ import collections
|
||||
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
|
||||
|
||||
@ -89,10 +90,10 @@ class _Base(plugin.ComputePollster):
|
||||
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)
|
||||
LOG.debug(_('Exception while getting samples %s'), err)
|
||||
except Exception as err:
|
||||
LOG.warning('Ignoring instance %s: %s',
|
||||
instance_name, err)
|
||||
LOG.warning(_('Ignoring instance %(name)s: %(error)s') % (
|
||||
{'name': instance_name, 'error': err}))
|
||||
LOG.exception(err)
|
||||
|
||||
|
||||
|
@ -23,6 +23,7 @@ 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
|
||||
@ -73,7 +74,7 @@ class _Base(plugin.ComputePollster):
|
||||
|
||||
def get_samples(self, manager, cache, instance):
|
||||
instance_name = util.instance_name(instance)
|
||||
LOG.info('checking instance %s', instance.id)
|
||||
LOG.info(_('checking instance %s'), instance.id)
|
||||
try:
|
||||
vnics = self._get_vnics_for_instance(
|
||||
cache,
|
||||
@ -86,10 +87,10 @@ class _Base(plugin.ComputePollster):
|
||||
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)
|
||||
LOG.debug(_('Exception while getting samples %s'), err)
|
||||
except Exception as err:
|
||||
LOG.warning('Ignoring instance %s: %s',
|
||||
instance_name, err)
|
||||
LOG.warning(_('Ignoring instance %(name)s: %(error)s') % (
|
||||
{'name': instance_name, 'error': err}))
|
||||
LOG.exception(err)
|
||||
|
||||
|
||||
|
@ -23,6 +23,7 @@ import collections
|
||||
from oslo.config import cfg
|
||||
from stevedore import driver
|
||||
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
|
||||
|
||||
@ -151,5 +152,5 @@ def get_hypervisor_inspector():
|
||||
invoke_on_load=True)
|
||||
return mgr.driver
|
||||
except ImportError as e:
|
||||
LOG.error("Unable to load the hypervisor inspector: %s" % (e))
|
||||
LOG.error(_("Unable to load the hypervisor inspector: %s") % (e))
|
||||
return Inspector()
|
||||
|
@ -21,6 +21,7 @@ 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
|
||||
@ -60,7 +61,7 @@ class LibvirtInspector(virt_inspector.Inspector):
|
||||
if libvirt is None:
|
||||
libvirt = __import__('libvirt')
|
||||
|
||||
LOG.debug('Connecting to libvirt: %s', self.uri)
|
||||
LOG.debug(_('Connecting to libvirt: %s'), self.uri)
|
||||
self.connection = libvirt.openReadOnly(self.uri)
|
||||
|
||||
return self.connection
|
||||
@ -73,7 +74,7 @@ class LibvirtInspector(virt_inspector.Inspector):
|
||||
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')
|
||||
LOG.debug(_('Connection to libvirt broke'))
|
||||
return False
|
||||
raise
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
# under the License.
|
||||
|
||||
from ceilometer import dispatcher
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
from ceilometer.openstack.common import timeutils
|
||||
from ceilometer.publisher import rpc as publisher_rpc
|
||||
@ -46,11 +47,13 @@ class DatabaseDispatcher(dispatcher.Base):
|
||||
data = [data]
|
||||
|
||||
for meter in data:
|
||||
LOG.debug('metering data %s for %s @ %s: %s',
|
||||
meter['counter_name'],
|
||||
meter['resource_id'],
|
||||
meter.get('timestamp', 'NO TIMESTAMP'),
|
||||
meter['counter_volume'])
|
||||
LOG.debug(_(
|
||||
'metering data %(counter_name)s '
|
||||
'for %(resource_id)s @ %(timestamp)s: %(counter_volume)s')
|
||||
% ({'counter_name': meter['counter_name'],
|
||||
'resource_id': meter['resource_id'],
|
||||
'timestamp': meter.get('timestamp', 'NO TIMESTAMP'),
|
||||
'counter_volume': meter['counter_volume']}))
|
||||
if publisher_rpc.verify_signature(
|
||||
meter,
|
||||
self.conf.publisher_rpc.metering_secret):
|
||||
@ -63,10 +66,11 @@ class DatabaseDispatcher(dispatcher.Base):
|
||||
meter['timestamp'] = timeutils.normalize_time(ts)
|
||||
self.storage_conn.record_metering_data(meter)
|
||||
except Exception as err:
|
||||
LOG.exception('Failed to record metering data: %s', err)
|
||||
LOG.exception(_('Failed to record metering data: %s'),
|
||||
err)
|
||||
else:
|
||||
LOG.warning(
|
||||
'message signature invalid, discarding message: %r',
|
||||
LOG.warning(_(
|
||||
'message signature invalid, discarding message: %r'),
|
||||
meter)
|
||||
|
||||
def record_events(self, events):
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
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
|
||||
@ -41,7 +42,7 @@ class FloatingIPPollster(plugin.CentralPollster):
|
||||
|
||||
def get_samples(self, manager, cache):
|
||||
for ip in self._iter_floating_ips(cache):
|
||||
self.LOG.info("FLOATING IP USAGE: %s" % ip.ip)
|
||||
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.
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
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
|
||||
@ -75,7 +76,7 @@ class NetworkNotificationBase(plugin.NotificationBase):
|
||||
]
|
||||
|
||||
def process_notification(self, message):
|
||||
LOG.info('network notification %r', 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)
|
||||
|
@ -20,6 +20,7 @@ from oslo.config import cfg
|
||||
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.rpc import service as rpc_service
|
||||
from ceilometer.openstack.common import service as os_service
|
||||
@ -79,7 +80,7 @@ class NotificationService(service.DispatchedService, rpc_service.Service):
|
||||
)
|
||||
|
||||
if not list(self.notification_manager):
|
||||
LOG.warning('Failed to load any notification handlers for %s',
|
||||
LOG.warning(_('Failed to load any notification handlers for %s'),
|
||||
self.NOTIFICATION_NAMESPACE)
|
||||
self.notification_manager.map(self._setup_subscription)
|
||||
|
||||
@ -97,9 +98,11 @@ class NotificationService(service.DispatchedService, rpc_service.Service):
|
||||
"""
|
||||
handler = ext.obj
|
||||
ack_on_error = cfg.CONF.notification.ack_on_event_error
|
||||
LOG.debug('Event types from %s: %s (ack_on_error=%s)',
|
||||
ext.name, ', '.join(handler.event_types),
|
||||
ack_on_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:
|
||||
@ -111,8 +114,10 @@ class NotificationService(service.DispatchedService, rpc_service.Service):
|
||||
exchange_name=exchange_topic.exchange,
|
||||
ack_on_error=ack_on_error)
|
||||
except Exception:
|
||||
LOG.exception('Could not join consumer pool %s/%s' %
|
||||
(topic, exchange_topic.exchange))
|
||||
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
|
||||
@ -121,7 +126,7 @@ class NotificationService(service.DispatchedService, rpc_service.Service):
|
||||
bus, this method receives it. See _setup_subscription().
|
||||
|
||||
"""
|
||||
LOG.debug('notification %r', notification.get('event_type'))
|
||||
LOG.debug(_('notification %r'), notification.get('event_type'))
|
||||
self.notification_manager.map(self._process_notification_for_ext,
|
||||
notification=notification)
|
||||
|
||||
@ -151,7 +156,7 @@ class NotificationService(service.DispatchedService, rpc_service.Service):
|
||||
message_id = body.get('message_id')
|
||||
event_type = body['event_type']
|
||||
when = self._extract_when(body)
|
||||
LOG.debug('Saving event "%s"', event_type)
|
||||
LOG.debug(_('Saving event "%s"'), event_type)
|
||||
|
||||
publisher = body.get('publisher_id')
|
||||
request_id = body.get('_context_request_id')
|
||||
|
@ -21,6 +21,7 @@ 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
|
||||
|
||||
|
||||
@ -36,14 +37,14 @@ def _load_notification_manager():
|
||||
|
||||
namespace = 'ceilometer.notification'
|
||||
|
||||
LOG.debug('loading notification handlers from %s', namespace)
|
||||
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',
|
||||
LOG.warning(_('Failed to load any notification handlers for %s'),
|
||||
namespace)
|
||||
|
||||
|
||||
|
@ -24,6 +24,7 @@ import os
|
||||
from oslo.config import cfg
|
||||
import yaml
|
||||
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
from ceilometer import publisher
|
||||
|
||||
@ -125,7 +126,7 @@ class Pipeline(object):
|
||||
try:
|
||||
self.publishers.append(publisher.get_publisher(p))
|
||||
except Exception:
|
||||
LOG.exception("Unable to load publisher %s", p)
|
||||
LOG.exception(_("Unable to load publisher %s"), p)
|
||||
|
||||
self.transformers = self._setup_transformers(cfg, transformer_manager)
|
||||
|
||||
@ -168,11 +169,11 @@ class Pipeline(object):
|
||||
"No transformer named %s loaded" % transformer['name'],
|
||||
cfg)
|
||||
transformers.append(ext.plugin(**parameter))
|
||||
LOG.info("Pipeline %s: Setup transformer instance %s "
|
||||
"with parameter %s",
|
||||
self,
|
||||
transformer['name'],
|
||||
parameter)
|
||||
LOG.info(_(
|
||||
"Pipeline %(pipeline)s: Setup transformer instance %(name)s "
|
||||
"with parameter %(param)s") % ({'pipeline': self,
|
||||
'name': transformer['name'],
|
||||
'param': parameter}))
|
||||
|
||||
return transformers
|
||||
|
||||
@ -181,14 +182,18 @@ class Pipeline(object):
|
||||
for transformer in self.transformers[start:]:
|
||||
sample = transformer.handle_sample(ctxt, sample)
|
||||
if not sample:
|
||||
LOG.debug("Pipeline %s: Sample dropped by transformer %s",
|
||||
self, transformer)
|
||||
LOG.debug(_(
|
||||
"Pipeline %(pipeline)s: Sample dropped by "
|
||||
"transformer %(trans)s") % ({'pipeline': self,
|
||||
'trans': transformer}))
|
||||
return
|
||||
return sample
|
||||
except Exception as err:
|
||||
LOG.warning("Pipeline %s: Exit after error from transformer"
|
||||
"%s for %s",
|
||||
self, transformer, sample)
|
||||
LOG.warning(_("Pipeline %(pipeline)s: "
|
||||
"Exit after error from transformer "
|
||||
"%(trans)s for %(smp)s") % ({'pipeline': self,
|
||||
'trans': transformer,
|
||||
'smp': sample}))
|
||||
LOG.exception(err)
|
||||
|
||||
def _publish_samples(self, start, ctxt, samples):
|
||||
@ -204,21 +209,26 @@ class Pipeline(object):
|
||||
|
||||
transformed_samples = []
|
||||
for sample in samples:
|
||||
LOG.debug("Pipeline %s: Transform sample %s from %s transformer",
|
||||
self, sample, start)
|
||||
LOG.debug(_(
|
||||
"Pipeline %(pipeline)s: Transform sample "
|
||||
"%(smp)s from %(trans)s transformer") % ({'pipeline': self,
|
||||
'smp': sample,
|
||||
'trans': start}))
|
||||
sample = self._transform_sample(start, ctxt, sample)
|
||||
if sample:
|
||||
transformed_samples.append(sample)
|
||||
|
||||
if transformed_samples:
|
||||
LOG.audit("Pipeline %s: Publishing samples", self)
|
||||
LOG.audit(_("Pipeline %s: Publishing samples"), self)
|
||||
for p in self.publishers:
|
||||
try:
|
||||
p.publish_samples(ctxt, transformed_samples)
|
||||
except Exception:
|
||||
LOG.exception("Pipeline %s: Continue after error "
|
||||
"from publisher %s", self, p)
|
||||
LOG.audit("Pipeline %s: Published samples", self)
|
||||
LOG.exception(_(
|
||||
"Pipeline %(pipeline)s: Continue after error "
|
||||
"from publisher %(pub)s") % ({'pipeline': self,
|
||||
'pub': p}))
|
||||
LOG.audit(_("Pipeline %s: Published samples") % self)
|
||||
|
||||
def publish_sample(self, ctxt, sample):
|
||||
self.publish_samples(ctxt, [sample])
|
||||
@ -267,16 +277,16 @@ class Pipeline(object):
|
||||
def flush(self, ctxt):
|
||||
"""Flush data after all samples have been injected to pipeline."""
|
||||
|
||||
LOG.audit("Flush pipeline %s", self)
|
||||
LOG.audit(_("Flush pipeline %s"), self)
|
||||
for (i, transformer) in enumerate(self.transformers):
|
||||
try:
|
||||
self._publish_samples(i + 1, ctxt,
|
||||
list(transformer.flush(ctxt)))
|
||||
except Exception as err:
|
||||
LOG.warning(
|
||||
"Pipeline %s: Error flushing "
|
||||
"transformer %s",
|
||||
self, transformer)
|
||||
LOG.warning(_(
|
||||
"Pipeline %(pipeline)s: Error flushing "
|
||||
"transformer %(trans)s") % ({'pipeline': self,
|
||||
'trans': transformer}))
|
||||
LOG.exception(err)
|
||||
|
||||
def get_interval(self):
|
||||
@ -351,13 +361,13 @@ def setup_pipeline(transformer_manager):
|
||||
if not os.path.exists(cfg_file):
|
||||
cfg_file = cfg.CONF.find_file(cfg_file)
|
||||
|
||||
LOG.debug("Pipeline config file: %s", cfg_file)
|
||||
LOG.debug(_("Pipeline config file: %s"), cfg_file)
|
||||
|
||||
with open(cfg_file) as fap:
|
||||
data = fap.read()
|
||||
|
||||
pipeline_cfg = yaml.safe_load(data)
|
||||
LOG.info("Pipeline config: %s", pipeline_cfg)
|
||||
LOG.info(_("Pipeline config: %s"), pipeline_cfg)
|
||||
|
||||
return PipelineManager(pipeline_cfg,
|
||||
transformer_manager)
|
||||
|
@ -20,6 +20,7 @@ import logging
|
||||
import logging.handlers
|
||||
import urlparse
|
||||
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
from ceilometer import publisher
|
||||
|
||||
@ -58,7 +59,7 @@ class FilePublisher(publisher.PublisherBase):
|
||||
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')
|
||||
LOG.error(_('The path for the file publisher is required'))
|
||||
return
|
||||
|
||||
rfh = None
|
||||
@ -72,8 +73,8 @@ class FilePublisher(publisher.PublisherBase):
|
||||
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.')
|
||||
LOG.error(_('max_bytes and backup_count should be '
|
||||
'numbers.'))
|
||||
return
|
||||
# create rotating file handler
|
||||
rfh = logging.handlers.RotatingFileHandler(
|
||||
|
@ -26,6 +26,7 @@ import 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
|
||||
@ -154,14 +155,14 @@ class RPCPublisher(publisher.PublisherBase):
|
||||
self.local_queue = []
|
||||
|
||||
if self.policy in ['queue', 'drop']:
|
||||
LOG.info('Publishing policy set to %s, \
|
||||
override backend retry config to 1' % self.policy)
|
||||
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)
|
||||
LOG.info(_('Publishing policy set to %s') % self.policy)
|
||||
else:
|
||||
LOG.warn('Publishing policy is unknown (%s) force to default'
|
||||
LOG.warn(_('Publishing policy is unknown (%s) force to default')
|
||||
% self.policy)
|
||||
self.policy = 'default'
|
||||
|
||||
@ -186,8 +187,8 @@ class RPCPublisher(publisher.PublisherBase):
|
||||
'version': '1.0',
|
||||
'args': {'data': meters},
|
||||
}
|
||||
LOG.audit('Publishing %d samples on %s',
|
||||
len(msg['args']['data']), topic)
|
||||
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:
|
||||
@ -200,8 +201,8 @@ class RPCPublisher(publisher.PublisherBase):
|
||||
'args': {'data': list(meter_list)},
|
||||
}
|
||||
topic_name = topic + '.' + meter_name
|
||||
LOG.audit('Publishing %d samples on %s',
|
||||
len(msg['args']['data']), topic_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()
|
||||
@ -225,8 +226,8 @@ class RPCPublisher(publisher.PublisherBase):
|
||||
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)
|
||||
LOG.warn(_("Publisher max local_queue length is exceeded, "
|
||||
"dropping %d oldest samples") % count)
|
||||
|
||||
@staticmethod
|
||||
def _process_queue(queue, policy):
|
||||
|
@ -26,6 +26,7 @@ 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
|
||||
|
||||
@ -96,7 +97,7 @@ class DispatchedService(object):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(DispatchedService, self).__init__(*args, **kwargs)
|
||||
LOG.debug('loading dispatchers from %s',
|
||||
LOG.debug(_('loading dispatchers from %s'),
|
||||
self.DISPATCHER_NAMESPACE)
|
||||
self.dispatcher_manager = named.NamedExtensionManager(
|
||||
namespace=self.DISPATCHER_NAMESPACE,
|
||||
@ -104,7 +105,7 @@ class DispatchedService(object):
|
||||
invoke_on_load=True,
|
||||
invoke_args=[cfg.CONF])
|
||||
if not list(self.dispatcher_manager):
|
||||
LOG.warning('Failed to load any dispatchers for %s',
|
||||
LOG.warning(_('Failed to load any dispatchers for %s'),
|
||||
self.DISPATCHER_NAMESPACE)
|
||||
|
||||
|
||||
|
@ -23,6 +23,7 @@ import urlparse
|
||||
from oslo.config import cfg
|
||||
from stevedore import driver
|
||||
|
||||
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||
from ceilometer.openstack.common import log
|
||||
from ceilometer import service
|
||||
from ceilometer import utils
|
||||
@ -67,8 +68,9 @@ def get_engine(conf):
|
||||
conf.set_override('connection', conf.database_connection,
|
||||
group='database')
|
||||
engine_name = urlparse.urlparse(conf.database.connection).scheme
|
||||
LOG.debug('looking for %r driver in %r',
|
||||
engine_name, STORAGE_ENGINE_NAMESPACE)
|
||||
LOG.debug(_('looking for %(name)r driver in %(namespace)r') % (
|
||||
{'name': engine_name,
|
||||
'namespace': STORAGE_ENGINE_NAMESPACE}))
|
||||
mgr = driver.DriverManager(STORAGE_ENGINE_NAMESPACE,
|
||||
engine_name,
|
||||
invoke_on_load=True)
|
||||
@ -140,7 +142,7 @@ def dbsync():
|
||||
|
||||
def expirer():
|
||||
service.prepare_service()
|
||||
LOG.debug("Clearing expired metering data")
|
||||
LOG.debug(_("Clearing expired metering data"))
|
||||
storage_conn = get_connection(cfg.CONF)
|
||||
storage_conn.clear_expired_metering_data(
|
||||
cfg.CONF.database.time_to_live)
|
||||
|
@ -96,8 +96,8 @@ class Connection(base.Connection):
|
||||
else:
|
||||
# This is a in-memory usage for unit tests
|
||||
if Connection._memory_instance is None:
|
||||
LOG.debug('Creating a new in-memory HBase '
|
||||
'Connection object')
|
||||
LOG.debug(_('Creating a new in-memory HBase '
|
||||
'Connection object'))
|
||||
Connection._memory_instance = MConnection()
|
||||
self.conn = Connection._memory_instance
|
||||
else:
|
||||
@ -111,7 +111,7 @@ class Connection(base.Connection):
|
||||
self.conn.create_table(self.METER_TABLE, {'f': dict()})
|
||||
|
||||
def clear(self):
|
||||
LOG.debug('Dropping HBase schema...')
|
||||
LOG.debug(_('Dropping HBase schema...'))
|
||||
for table in [self.PROJECT_TABLE,
|
||||
self.USER_TABLE,
|
||||
self.RESOURCE_TABLE,
|
||||
@ -119,11 +119,11 @@ class Connection(base.Connection):
|
||||
try:
|
||||
self.conn.disable_table(table)
|
||||
except Exception:
|
||||
LOG.debug('Cannot disable table but ignoring error')
|
||||
LOG.debug(_('Cannot disable table but ignoring error'))
|
||||
try:
|
||||
self.conn.delete_table(table)
|
||||
except Exception:
|
||||
LOG.debug('Cannot delete table but ignoring error')
|
||||
LOG.debug(_('Cannot delete table but ignoring error'))
|
||||
|
||||
@staticmethod
|
||||
def _get_connection(conf):
|
||||
@ -134,7 +134,8 @@ class Connection(base.Connection):
|
||||
The tests use a subclass to override this and return an
|
||||
in-memory connection.
|
||||
"""
|
||||
LOG.debug('connecting to HBase on %s:%s', conf['host'], conf['port'])
|
||||
LOG.debug(_('connecting to HBase on %(host)s:%(port)s') % (
|
||||
{'host': conf['host'], 'port': conf['port']}))
|
||||
return happybase.Connection(host=conf['host'], port=conf['port'],
|
||||
table_prefix=conf['table_prefix'])
|
||||
|
||||
@ -269,7 +270,7 @@ class Connection(base.Connection):
|
||||
:param source: Optional source filter.
|
||||
"""
|
||||
user_table = self.conn.table(self.USER_TABLE)
|
||||
LOG.debug("source: %s" % source)
|
||||
LOG.debug(_("source: %s") % source)
|
||||
scan_args = {}
|
||||
if source:
|
||||
scan_args['columns'] = ['f:s_%s' % source]
|
||||
@ -281,7 +282,7 @@ class Connection(base.Connection):
|
||||
:param source: Optional source filter.
|
||||
"""
|
||||
project_table = self.conn.table(self.PROJECT_TABLE)
|
||||
LOG.debug("source: %s" % source)
|
||||
LOG.debug(_("source: %s") % source)
|
||||
scan_args = {}
|
||||
if source:
|
||||
scan_args['columns'] = ['f:s_%s' % source]
|
||||
@ -338,7 +339,7 @@ class Connection(base.Connection):
|
||||
end_op=end_timestamp_op,
|
||||
require_meter=False,
|
||||
query_only=False)
|
||||
LOG.debug("Query Meter table: %s" % q)
|
||||
LOG.debug(_("Query Meter table: %s") % q)
|
||||
meters = meter_table.scan(filter=q, row_start=start_row,
|
||||
row_stop=stop_row)
|
||||
|
||||
@ -395,7 +396,7 @@ class Connection(base.Connection):
|
||||
resource_table = self.conn.table(self.RESOURCE_TABLE)
|
||||
q = make_query(user=user, project=project, resource=resource,
|
||||
source=source, require_meter=False, query_only=True)
|
||||
LOG.debug("Query Resource table: %s" % q)
|
||||
LOG.debug(_("Query Resource table: %s") % q)
|
||||
|
||||
# handle metaquery
|
||||
if len(metaquery) > 0:
|
||||
@ -451,7 +452,7 @@ class Connection(base.Connection):
|
||||
|
||||
q, start, stop = make_query_from_filter(sample_filter,
|
||||
require_meter=False)
|
||||
LOG.debug("Query Meter Table: %s" % q)
|
||||
LOG.debug(_("Query Meter Table: %s") % q)
|
||||
|
||||
gen = meter_table.scan(filter=q, row_start=start, row_stop=stop)
|
||||
|
||||
@ -760,7 +761,7 @@ class MConnection(object):
|
||||
self.tables = {}
|
||||
|
||||
def open(self):
|
||||
LOG.debug("Opening in-memory HBase connection")
|
||||
LOG.debug(_("Opening in-memory HBase connection"))
|
||||
|
||||
def create_table(self, n, families={}):
|
||||
if n in self.tables:
|
||||
|
@ -53,10 +53,11 @@ class Connection(base.Connection):
|
||||
:param data: a dictionary such as returned by
|
||||
ceilometer.meter.meter_message_from_counter
|
||||
"""
|
||||
LOG.info('metering data %s for %s: %s',
|
||||
data['counter_name'],
|
||||
data['resource_id'],
|
||||
data['counter_volume'])
|
||||
LOG.info(_('metering data %(counter_name)s for %(resource_id)s: '
|
||||
'%(counter_volume)s')
|
||||
% ({'counter_name': data['counter_name'],
|
||||
'resource_id': data['resource_id'],
|
||||
'counter_volume': data['counter_volume']}))
|
||||
|
||||
def clear_expired_metering_data(self, ttl):
|
||||
"""Clear expired data from the backend storage system according to the
|
||||
@ -65,7 +66,7 @@ class Connection(base.Connection):
|
||||
:param ttl: Number of seconds to keep records for.
|
||||
|
||||
"""
|
||||
LOG.info("Dropping data with TTL %d", ttl)
|
||||
LOG.info(_("Dropping data with TTL %d"), ttl)
|
||||
|
||||
def get_users(self, source=None):
|
||||
"""Return an iterable of user id strings.
|
||||
|
@ -916,7 +916,7 @@ class Connection(base.Connection):
|
||||
problem_events.append((api_models.Event.DUPLICATE,
|
||||
event_model))
|
||||
except Exception as e:
|
||||
LOG.exception('Failed to record event: %s', e)
|
||||
LOG.exception(_('Failed to record event: %s') % e)
|
||||
problem_events.append((api_models.Event.UNKNOWN_PROBLEM,
|
||||
event_model))
|
||||
events.append(event)
|
||||
|
@ -98,10 +98,10 @@ class ScalingTransformer(transformer.TransformerBase):
|
||||
|
||||
def handle_sample(self, context, s):
|
||||
"""Handle a sample, converting if necessary."""
|
||||
LOG.debug('handling sample %s', (s,))
|
||||
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,))
|
||||
LOG.debug(_('converted to: %s'), (s,))
|
||||
return s
|
||||
|
||||
|
||||
@ -120,7 +120,7 @@ class RateOfChangeTransformer(ScalingTransformer):
|
||||
|
||||
def handle_sample(self, context, s):
|
||||
"""Handle a sample, converting if necessary."""
|
||||
LOG.debug('handling sample %s', (s,))
|
||||
LOG.debug(_('handling sample %s'), (s,))
|
||||
key = s.name + s.resource_id
|
||||
prev = self.cache.get(key)
|
||||
timestamp = timeutils.parse_isotime(s.timestamp)
|
||||
@ -141,9 +141,9 @@ class RateOfChangeTransformer(ScalingTransformer):
|
||||
if time_delta else 0.0)
|
||||
|
||||
s = self._convert(s, rate_of_change)
|
||||
LOG.debug(_('converted to: %s') % (s,))
|
||||
LOG.debug(_('converted to: %s'), (s,))
|
||||
else:
|
||||
LOG.warn(_('dropping sample with no predecessor: %s') %
|
||||
LOG.warn(_('dropping sample with no predecessor: %s'),
|
||||
(s,))
|
||||
s = None
|
||||
return s
|
||||
|
Loading…
Reference in New Issue
Block a user