Files
libra/libra/api/controllers/logs.py
Michael Johnson d643531d80 LBAAS-713 Change the "counter" database commits to be best effort
Change-Id: I8a07737d7f94bdbee1ad7989e3f52bb8578821e1
2014-09-03 23:26:27 +00:00

100 lines
3.8 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2013 Hewlett-Packard Development Company, L.P.
#
# 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.
from pecan import request
from pecan import conf
from pecan.rest import RestController
import wsmeext.pecan as wsme_pecan
from wsme.exc import ClientSideError
from wsme import Unset
from libra.common.api.lbaas import LoadBalancer, Device, db_session, Counters
from libra.api.acl import get_limited_to_project
from libra.api.model.validators import LBLogsPost
from libra.common.api.gearman_client import submit_job
from libra.api.library.exp import NotFound, ImmutableEntity, ImmutableStates
class LogsController(RestController):
def __init__(self, load_balancer_id=None):
self.lbid = load_balancer_id
@wsme_pecan.wsexpose(None, body=LBLogsPost, status_code=202)
def post(self, body=None):
if self.lbid is None:
raise ClientSideError('Load Balancer ID has not been supplied')
tenant_id = get_limited_to_project(request.headers)
with db_session() as session:
load_balancer = session.query(LoadBalancer).\
filter(LoadBalancer.tenantid == tenant_id).\
filter(LoadBalancer.id == self.lbid).\
filter(LoadBalancer.status != 'DELETED').\
first()
if load_balancer is None:
session.rollback()
raise NotFound('Load Balancer not found')
if load_balancer.status in ImmutableStates:
session.rollback()
raise ImmutableEntity(
'Cannot get logs from a Load Balancer in a non-ACTIVE '
'state, current state: {0}'.format(load_balancer.status)
)
load_balancer.status = 'PENDING_UPDATE'
device = session.query(
Device.id, Device.name, Device.status
).join(LoadBalancer.devices).\
filter(LoadBalancer.id == self.lbid).\
first()
session.commit()
data = {
'deviceid': device.id
}
if body.objectStoreType != Unset:
data['objectStoreType'] = body.objectStoreType.lower()
else:
data['objectStoreType'] = 'swift'
if body.objectStoreBasePath != Unset:
data['objectStoreBasePath'] = body.objectStoreBasePath
else:
data['objectStoreBasePath'] = conf.swift.swift_basepath
if body.objectStoreEndpoint != Unset:
data['objectStoreEndpoint'] = body.objectStoreEndpoint
else:
data['objectStoreEndpoint'] = '{0}/{1}'.\
format(conf.swift.swift_endpoint.rstrip('/'), tenant_id)
if body.authToken != Unset:
data['authToken'] = body.authToken
else:
data['authToken'] = request.headers.get('X-Auth-Token')
submit_job(
'ARCHIVE', device.name, data, self.lbid
)
with db_session() as session:
try:
load_balancer = session.query(LoadBalancer).\
counter = session.query(Counters).\
filter(Counters.name == 'api_log_archive').first()
counter.value += 1
session.commit()
except:
pass
return