Add support for reports filtering
Change-Id: Ifb5d94fe6deda0560f71627aefcc6ce14a14fcf8
This commit is contained in:
parent
7a013914c5
commit
cf31489750
@ -64,11 +64,13 @@ class API(wsgi.Router):
|
||||
controller=sessions_resource,
|
||||
action='delete',
|
||||
conditions={'method': ['DELETE']})
|
||||
mapper.connect('/environments/{environment_id}/sessions/{session_id}/reports',
|
||||
mapper.connect('/environments/{environment_id}/sessions/'
|
||||
'{session_id}/reports',
|
||||
controller=sessions_resource,
|
||||
action='reports',
|
||||
conditions={'method': ['GET']})
|
||||
mapper.connect('/environments/{environment_id}/sessions/{session_id}/deploy',
|
||||
mapper.connect('/environments/{environment_id}/sessions/'
|
||||
'{session_id}/deploy',
|
||||
controller=sessions_resource,
|
||||
action='deploy',
|
||||
conditions={'method': ['POST']})
|
||||
@ -82,7 +84,8 @@ class API(wsgi.Router):
|
||||
controller=activeDirectories_resource,
|
||||
action='create',
|
||||
conditions={'method': ['POST']})
|
||||
mapper.connect('/environments/{environment_id}/activeDirectories/{active_directory_id}',
|
||||
mapper.connect('/environments/{environment_id}/activeDirectories/'
|
||||
'{active_directory_id}',
|
||||
controller=activeDirectories_resource,
|
||||
action='delete',
|
||||
conditions={'method': ['DELETE']})
|
||||
@ -96,7 +99,8 @@ class API(wsgi.Router):
|
||||
controller=webServers_resource,
|
||||
action='create',
|
||||
conditions={'method': ['POST']})
|
||||
mapper.connect('/environments/{environment_id}/webServers/{web_server_id}',
|
||||
mapper.connect('/environments/{environment_id}/webServers/'
|
||||
'{web_server_id}',
|
||||
controller=webServers_resource,
|
||||
action='delete',
|
||||
conditions={'method': ['DELETE']})
|
||||
|
@ -17,33 +17,40 @@ log = logging.getLogger(__name__)
|
||||
class Controller(object):
|
||||
def __init__(self):
|
||||
self.write_lock = Semaphore(1)
|
||||
connection = amqp.Connection('{0}:{1}'.format(rabbitmq.host, rabbitmq.port), virtual_host=rabbitmq.virtual_host,
|
||||
connection = amqp.Connection(
|
||||
'{0}:{1}'.format(rabbitmq.host, rabbitmq.port),
|
||||
virtual_host=rabbitmq.virtual_host,
|
||||
userid=rabbitmq.userid, password=rabbitmq.password,
|
||||
ssl=rabbitmq.use_ssl, insist=True)
|
||||
self.ch = connection.channel()
|
||||
self.ch.exchange_declare('tasks', 'direct', durable=True, auto_delete=False)
|
||||
self.ch.exchange_declare('tasks', 'direct', durable=True,
|
||||
auto_delete=False)
|
||||
|
||||
def index(self, request, environment_id):
|
||||
log.debug(_('Session:List <EnvId: {0}>'.format(environment_id)))
|
||||
|
||||
filters = {'environment_id': environment_id, 'user_id': request.context.user}
|
||||
filters = {'environment_id': environment_id,
|
||||
'user_id': request.context.user}
|
||||
|
||||
unit = get_session()
|
||||
configuration_sessions = unit.query(Session).filter_by(**filters)
|
||||
|
||||
return {"sessions": [session.to_dict() for session in configuration_sessions if
|
||||
return {
|
||||
"sessions": [session.to_dict() for session in configuration_sessions if
|
||||
session.environment.tenant_id == request.context.tenant]}
|
||||
|
||||
def configure(self, request, environment_id):
|
||||
log.debug(_('Session:Configure <EnvId: {0}>'.format(environment_id)))
|
||||
|
||||
params = {'environment_id': environment_id, 'user_id': request.context.user, 'state': 'open'}
|
||||
params = {'environment_id': environment_id,
|
||||
'user_id': request.context.user, 'state': 'open'}
|
||||
|
||||
session = Session()
|
||||
session.update(params)
|
||||
|
||||
unit = get_session()
|
||||
if unit.query(Session).filter(Session.environment_id == environment_id and Session.state.in_(
|
||||
if unit.query(Session).filter(
|
||||
Session.environment_id == environment_id and Session.state.in_(
|
||||
['open', 'deploing'])).first():
|
||||
log.info('There is already open session for this environment')
|
||||
raise exc.HTTPConflict
|
||||
@ -58,7 +65,9 @@ class Controller(object):
|
||||
return session.to_dict()
|
||||
|
||||
def show(self, request, environment_id, session_id):
|
||||
log.debug(_('Session:Show <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
|
||||
log.debug(_(
|
||||
'Session:Show <EnvId: {0}, SessionId: {1}>'.format(environment_id,
|
||||
session_id)))
|
||||
|
||||
unit = get_session()
|
||||
session = unit.query(Session).get(session_id)
|
||||
@ -70,14 +79,17 @@ class Controller(object):
|
||||
return session.to_dict()
|
||||
|
||||
def delete(self, request, environment_id, session_id):
|
||||
log.debug(_('Session:Delete <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
|
||||
log.debug(_('Session:Delete <EnvId: {0}, SessionId: {1}>'.format(
|
||||
environment_id, session_id)))
|
||||
|
||||
unit = get_session()
|
||||
session = unit.query(Session).get(session_id)
|
||||
|
||||
if session.state == 'deploying':
|
||||
log.info('Session is in \'deploying\' state. Could not be deleted.')
|
||||
raise exc.HTTPForbidden(comment='Session object in \'deploying\' state could not be deleted')
|
||||
log.info(
|
||||
'Session is in \'deploying\' state. Could not be deleted.')
|
||||
raise exc.HTTPForbidden(
|
||||
comment='Session object in \'deploying\' state could not be deleted')
|
||||
|
||||
with unit.begin():
|
||||
unit.delete(session)
|
||||
@ -85,27 +97,51 @@ class Controller(object):
|
||||
return None
|
||||
|
||||
def reports(self, request, environment_id, session_id):
|
||||
log.debug(_('Session:Reports <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
|
||||
log.debug(_('Session:Reports <EnvId: {0}, SessionId: {1}>'.format(
|
||||
environment_id, session_id)))
|
||||
|
||||
unit = get_session()
|
||||
statuses = unit.query(Status).filter_by(session_id=session_id)
|
||||
result = statuses
|
||||
|
||||
return {'reports': [status.to_dict() for status in statuses]}
|
||||
if request.GET['service_id']:
|
||||
service_id = request.GET['service_id']
|
||||
|
||||
environment = unit.query(Session).get(session_id).description
|
||||
services = environment['services']['activeDirectories']
|
||||
services += environment['services']['webServers']
|
||||
|
||||
service = [service for service in services
|
||||
if service['id'] == service_id][0]
|
||||
|
||||
if service:
|
||||
entities = [u['id'] for u in service['units']]
|
||||
entities.append(service_id)
|
||||
result = []
|
||||
for status in statuses:
|
||||
if status['id'] in entities:
|
||||
result.append(status)
|
||||
|
||||
return {'reports': [status.to_dict() for status in result]}
|
||||
|
||||
def deploy(self, request, environment_id, session_id):
|
||||
log.debug(_('Session:Deploy <EnvId: {0}, SessionId: {1}>'.format(environment_id, session_id)))
|
||||
log.debug(_('Session:Deploy <EnvId: {0}, SessionId: {1}>'.format(
|
||||
environment_id, session_id)))
|
||||
|
||||
unit = get_session()
|
||||
session = unit.query(Session).get(session_id)
|
||||
|
||||
if session.state != 'open':
|
||||
log.warn(_('Could not deploy session. Session is already deployed or in deployment state'))
|
||||
log.warn(_(
|
||||
'Could not deploy session. Session is already deployed or in deployment state'))
|
||||
|
||||
session.state = 'deploying'
|
||||
session.save(unit)
|
||||
|
||||
with self.write_lock:
|
||||
self.ch.basic_publish(Message(body=anyjson.serialize(session.description)), 'tasks', 'tasks')
|
||||
self.ch.basic_publish(
|
||||
Message(body=anyjson.serialize(session.description)), 'tasks',
|
||||
'tasks')
|
||||
|
||||
|
||||
def create_resource():
|
||||
|
@ -54,11 +54,13 @@ class SessionManager(base.Manager):
|
||||
path.format(id=environment_id,
|
||||
session_id=session_id))
|
||||
|
||||
def reports(self, environment_id, session_id):
|
||||
def reports(self, environment_id, session_id, service_id=None):
|
||||
path = 'environments/{id}/sessions/{session_id}/reports'
|
||||
resp, body = self.api.json_request('GET',
|
||||
path.format(id=environment_id,
|
||||
session_id=session_id))
|
||||
path = path.format(id=environment_id, session_id=session_id)
|
||||
if service_id:
|
||||
path += '?service_id={0}'.format(service_id)
|
||||
|
||||
resp, body = self.api.json_request('GET', path)
|
||||
|
||||
data = body['reports']
|
||||
return [Status(self, res, loaded=True) for res in data if res]
|
||||
|
Loading…
x
Reference in New Issue
Block a user