Add ability to get status for Environments and Sessions

Change-Id: I9e29fc08f98320ff6f1a70043cd42506147ada2d
This commit is contained in:
Serg Melikyan
2013-03-13 15:49:13 +04:00
parent dbfd119576
commit f97d82a8c5
4 changed files with 72 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
from portas.db.models import Session, Environment from portas.db.models import Session, Environment, Status
from portas.db.session import get_session from portas.db.session import get_session
@@ -19,3 +19,60 @@ def save_draft(session_id, draft):
session.description = draft session.description = draft
session.save(unit) session.save(unit)
def get_env_status(environment_id, session_id):
status = 'draft'
unit = get_session()
session_state = unit.query(Session).get(session_id).state
reports = unit.query(Status).filter_by(environment_id=environment_id, session_id=session_id).all()
if session_state == 'deployed':
status = 'finished'
if session_state == 'deploying' and len(reports) > 1:
status = 'pending'
draft = get_draft(environment_id, session_id)
if not 'services' in draft:
return 'pending'
def get_statuses(type):
if type in draft['services']:
return [get_service_status(environment_id, session_id, service) for service in
draft['services'][type]]
else:
return []
is_inprogress = filter(lambda item: item == 'inprogress',
get_statuses('activeDirectories') + get_statuses('webServers'))
if session_state == 'deploying' and is_inprogress > 1:
status = 'inprogress'
return status
def get_service_status(environment_id, session_id, service):
status = 'draft'
unit = get_session()
session_state = unit.query(Session).get(session_id).state
entities = [unit['id'] for unit in service['units']]
reports_count = unit.query(Status).filter(Status.environment_id == environment_id
and Status.session_id == session_id
and Status.entity_id.in_(entities)).count()
if session_state == 'deployed':
status = 'finished'
if session_state == 'deploying' and reports_count == 0:
status = 'pending'
if session_state == 'deploying' and reports_count > 0:
status = 'inprogress'
return status

View File

@@ -1,5 +1,5 @@
from portas import utils from portas import utils
from portas.api.v1 import save_draft, get_draft from portas.api.v1 import save_draft, get_draft, get_service_status
from portas.common import uuidutils from portas.common import uuidutils
from portas.openstack.common import wsgi, timeutils from portas.openstack.common import wsgi, timeutils
from portas.openstack.common import log as logging from portas.openstack.common import log as logging
@@ -13,6 +13,9 @@ class Controller(object):
draft = prepare_draft(get_draft(environment_id, request.context.session)) draft = prepare_draft(get_draft(environment_id, request.context.session))
for dc in draft['services']['activeDirectories']:
dc['status'] = get_service_status(environment_id, request.context.session, dc)
return {'activeDirectories': draft['services']['activeDirectories']} return {'activeDirectories': draft['services']['activeDirectories']}
@utils.verify_session @utils.verify_session

View File

@@ -1,4 +1,5 @@
from webob import exc from webob import exc
from portas.api.v1 import get_env_status
from portas.db.session import get_session from portas.db.session import get_session
from portas.db.models import Environment from portas.db.models import Environment
from portas.openstack.common import wsgi from portas.openstack.common import wsgi
@@ -50,7 +51,10 @@ class Controller(object):
log.info('User is not authorized to access this tenant resources.') log.info('User is not authorized to access this tenant resources.')
raise exc.HTTPUnauthorized raise exc.HTTPUnauthorized
return environment.to_dict() env = environment.to_dict()
env['status'] = get_env_status(environment_id, request.context.session)
return env
def update(self, request, environment_id, body): def update(self, request, environment_id, body):
log.debug(_('Environments:Update <Id: {0}, Body: {1}>'.format(environment_id, body))) log.debug(_('Environments:Update <Id: {0}, Body: {1}>'.format(environment_id, body)))

View File

@@ -1,5 +1,5 @@
from portas import utils from portas import utils
from portas.api.v1 import save_draft, get_draft from portas.api.v1 import save_draft, get_draft, get_service_status
from portas.common import uuidutils from portas.common import uuidutils
from portas.openstack.common import wsgi, timeutils from portas.openstack.common import wsgi, timeutils
from portas.openstack.common import log as logging from portas.openstack.common import log as logging
@@ -13,6 +13,9 @@ class Controller(object):
draft = prepare_draft(get_draft(environment_id, request.context.session)) draft = prepare_draft(get_draft(environment_id, request.context.session))
for dc in draft['services']['webServers']:
dc['status'] = get_service_status(environment_id, request.context.session, dc)
return {'webServers': draft['services']['webServers']} return {'webServers': draft['services']['webServers']}
@utils.verify_session @utils.verify_session