diff options
author | Julien Danjou <julien@danjou.info> | 2013-07-17 15:53:07 +0200 |
---|---|---|
committer | Julien Danjou <julien@danjou.info> | 2013-07-29 15:03:26 +0200 |
commit | c2cfd732b5576f1b263f9506dc4d238c7c7ca8ae (patch) | |
tree | e734b9e5f54b42e7c865cd19b11a901655316cf5 /ceilometer/sample.py | |
parent | 207f52bd8aa5f0af21ef281b09d8bda6bd0d73fd (diff) | |
download | ceilometer-c2cfd732b5576f1b263f9506dc4d238c7c7ca8ae.tar.gz |
Rename ceilometer.counter to ceilometer.sample
Change-Id: Id5e943cffd59bd439c235630ca040035128a919f
Blueprint: remove-counter
Diffstat (limited to 'ceilometer/sample.py')
-rw-r--r-- | ceilometer/sample.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/ceilometer/sample.py b/ceilometer/sample.py new file mode 100644 index 00000000..60c63b67 --- /dev/null +++ b/ceilometer/sample.py @@ -0,0 +1,91 @@ +# -*- encoding: utf-8 -*- +# +# Copyright © 2012 New Dream Network, LLC (DreamHost) +# +# Author: Doug Hellmann <doug.hellmann@dreamhost.com> +# +# 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. +"""Sample class for holding data about a metering event. + +A Sample doesn't really do anything, but we need a way to +ensure that all of the appropriate fields have been filled +in by the plugins that create them. +""" + +import collections +import copy + +from oslo.config import cfg + + +OPTS = [ + cfg.StrOpt('sample_source', + default='openstack', + deprecated_name='counter_source', + help='Source for samples emited on this instance'), +] + +cfg.CONF.register_opts(OPTS) + + +# Fields explanation: +# +# Name: the name of the meter, must be unique +# Type: the type of the meter, must be either: +# - cumulative: the value is incremented and never reset to 0 +# - delta: the value is reset to 0 each time it is sent +# - gauge: the value is an absolute value and is not a counter +# Unit: the unit of the meter +# Volume: the sample value +# User ID: the user ID +# Project ID: the project ID +# Resource ID: the resource ID +# Timestamp: when the sample has been read +# Resource metadata: various metadata +Sample = collections.namedtuple('Sample', + ' '.join([ + 'name', + 'type', + 'unit', + 'volume', + 'user_id', + 'project_id', + 'resource_id', + 'timestamp', + 'resource_metadata', + ])) + + +TYPE_GAUGE = 'gauge' +TYPE_DELTA = 'delta' +TYPE_CUMULATIVE = 'cumulative' + + +def from_notification(cls, name, type, volume, unit, + user_id, project_id, resource_id, + message): + metadata = copy.copy(message['payload']) + metadata['event_type'] = message['event_type'] + metadata['host'] = message['publisher_id'] + return cls(name=name, + type=type, + volume=volume, + unit=unit, + user_id=user_id, + project_id=project_id, + resource_id=resource_id, + timestamp=message['timestamp'], + resource_metadata=metadata) + + +Sample.from_notification = classmethod(from_notification) |