summaryrefslogtreecommitdiff
path: root/ceilometer/sample.py
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2013-07-17 15:53:07 +0200
committerJulien Danjou <julien@danjou.info>2013-07-29 15:03:26 +0200
commitc2cfd732b5576f1b263f9506dc4d238c7c7ca8ae (patch)
treee734b9e5f54b42e7c865cd19b11a901655316cf5 /ceilometer/sample.py
parent207f52bd8aa5f0af21ef281b09d8bda6bd0d73fd (diff)
downloadceilometer-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.py91
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)