Files
python-ganttclient/bin/volume-usage-audit
Craig Vyvial acdd8eacf2 fixing issue with db.volume_update not returning the volume_ref
fixes bug #1003664

- changed the sqlalchemy db api code to return the volume_ref from the
volume_update method. This was causing the volume  notifications to
have the incorrect information in the payload.
- Fixed up the unit tests because they started failing badly.
- fixed the volume-usage-audit reading the default config values
- fix hacking issue with volume-usage-audit

Change-Id: Iba5634b0c351a6cc0c48b697217a6f85533de93e
2012-05-30 12:47:13 -05:00

84 lines
3.0 KiB
Python
Executable File

#!/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 volumes existing during
the audit period.
Together with the notifications generated by volumes
create/delete/resize, over that time period, this allows an external
system consuming usage notification feeds to calculate volume 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)
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
from nova.volume import utils as volume_utils
FLAGS = flags.FLAGS
if __name__ == '__main__':
rpc.register_opts(FLAGS)
admin_context = context.get_admin_context()
utils.default_cfgfile()
flags.FLAGS(sys.argv)
logging.setup()
begin, end = utils.last_completed_audit_period()
print "Starting volume usage audit"
print "Creating usages for %s until %s" % (str(begin), str(end))
volumes = db.volume_get_active_by_window(admin_context,
begin,
end)
print "Found %d volumes" % len(volumes)
for volume_ref in volumes:
try:
volume_utils.notify_usage_exists(
admin_context, volume_ref)
except Exception, e:
print traceback.format_exc(e)
print "Volume usage audit completed"