summaryrefslogtreecommitdiffstats
path: root/bin/nova-instance-usage-audit
diff options
context:
space:
mode:
Diffstat (limited to 'bin/nova-instance-usage-audit')
-rwxr-xr-xbin/nova-instance-usage-audit83
1 files changed, 83 insertions, 0 deletions
diff --git a/bin/nova-instance-usage-audit b/bin/nova-instance-usage-audit
new file mode 100755
index 000000000..3d60edfec
--- /dev/null
+++ b/bin/nova-instance-usage-audit
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Openstack, LLC.
+# 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.
+
+"""Cron script to generate usage notifications for instances existing
+ during the audit period.
+
+ Together with the notifications generated by compute on instance
+ create/delete/resize, over that time period, this allows an external
+ system consuming usage notification feeds to calculate instance usage
+ for each tenant.
+
+ Time periods are specified as 'hour', 'month', 'day' or 'year'
+
+ hour = previous hour. If run at 9:07am, will generate usage for 8-9am.
+ month = previous month. If the script is run April 1, it will generate
+ usages for March 1 through March 31.
+ day = previous day. if run on July 4th, it generates usages for July 3rd.
+ year = previous year. If run on Jan 1, it generates usages for
+ Jan 1 through Dec 31 of the previous year.
+"""
+
+import datetime
+import gettext
+import os
+import sys
+import time
+import traceback
+
+# If ../nova/__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, 'nova', '__init__.py')):
+ sys.path.insert(0, POSSIBLE_TOPDIR)
+
+gettext.install('nova', unicode=1)
+import nova.compute.utils
+from nova import context
+from nova import db
+from nova import exception
+from nova import flags
+from nova import log as logging
+from nova import rpc
+from nova import utils
+
+
+FLAGS = flags.FLAGS
+
+if __name__ == '__main__':
+ admin_context = context.get_admin_context()
+ flags.parse_args(sys.argv)
+ logging.setup()
+ begin, end = utils.last_completed_audit_period()
+ print "Starting instance usage audit"
+ print "Creating usages for %s until %s" % (str(begin), str(end))
+ instances = db.instance_get_active_by_window_joined(admin_context,
+ begin,
+ end)
+ print "Found %d instances" % len(instances)
+ for instance_ref in instances:
+ try:
+ nova.compute.utils.notify_usage_exists(
+ admin_context, instance_ref,
+ ignore_missing_network_data=False)
+ except Exception, e:
+ print traceback.format_exc(e)
+ print "Instance usage audit completed"