diff options
| author | Monsyne Dragon <mdragon@rackspace.com> | 2012-07-06 18:28:21 +0000 |
|---|---|---|
| committer | Monsyne Dragon <mdragon@rackspace.com> | 2012-07-10 22:28:33 +0000 |
| commit | 2fdd73816c56b578a65466db4e5a86b9b191e1c1 (patch) | |
| tree | 59472212935829ebd82dbd297ed3871d9c8ba791 /nova/api | |
| parent | 4a981877c9b62863fe6478b813d8ebd7055d94aa (diff) | |
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
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/compute/contrib/instance_usage_audit_log.py | 71 |
1 files changed, 71 insertions, 0 deletions
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] |
