From 2fdd73816c56b578a65466db4e5a86b9b191e1c1 Mon Sep 17 00:00:00 2001 From: Monsyne Dragon Date: Fri, 6 Jul 2012 18:28:21 +0000 Subject: Refactor instance_usage_audit. Add audit tasklog. The instance usage audit cronjob that generates periodic compute.instance.exists notifications is not particularly scalable. It is run on one server and takes longer as the number of instances grows. This change moves the generation of those events to a periodic task in the compute manager. It also adds an api extension that can be used by administrators to check for errors generating these events. Change-Id: I856d3d0c73c34e570112f1345d306308ef20a9ae --- .../compute/contrib/instance_usage_audit_log.py | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 nova/api/openstack/compute/contrib/instance_usage_audit_log.py (limited to 'nova/api') diff --git a/nova/api/openstack/compute/contrib/instance_usage_audit_log.py b/nova/api/openstack/compute/contrib/instance_usage_audit_log.py new file mode 100644 index 000000000..4a427d2a7 --- /dev/null +++ b/nova/api/openstack/compute/contrib/instance_usage_audit_log.py @@ -0,0 +1,71 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 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. + + +import datetime +from webob import exc + +from nova.api.openstack import extensions +from nova.compute import utils as compute_utils +from nova import context as nova_context +from nova import exception +from nova import flags + +FLAGS = flags.FLAGS + + +authorize = extensions.extension_authorizer('compute', + 'instance_usage_audit_log') + + +class InstanceUsageAuditLogController(object): + + def index(self, req): + context = req.environ['nova.context'] + authorize(context) + task_log = compute_utils.get_audit_task_logs(context) + return {'instance_usage_audit_logs': task_log} + + def show(self, req, id): + context = req.environ['nova.context'] + authorize(context) + try: + if '.' in id: + before_date = datetime.datetime.strptime(str(id), + "%Y-%m-%d %H:%M:%S.%f") + else: + before_date = datetime.datetime.strptime(str(id), + "%Y-%m-%d %H:%M:%S") + except ValueError: + msg = _("Invalid timestamp for date %s") % id + raise webob.exc.HTTPBadRequest(explanation=msg) + task_log = compute_utils.get_audit_task_logs(context, + before=before_date) + return {'instance_usage_audit_log': task_log} + + +class Instance_usage_audit_log(extensions.ExtensionDescriptor): + """Admin-only Task Log Monitoring""" + name = "OSInstanceUsageAuditLog" + alias = "os-instance_usage_audit_log" + namespace = "http://docs.openstack.org/ext/services/api/v1.1" + updated = "2012-07-06T01:00:00+00:00" + + def get_resources(self): + ext = extensions.ResourceExtension('os-instance_usage_audit_log', + InstanceUsageAuditLogController()) + return [ext] -- cgit