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
@ -18,4 +18,61 @@ def save_draft(session_id, draft):
session = unit.query(Session).get(session_id)
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.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.openstack.common import wsgi, timeutils
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))
for dc in draft['services']['activeDirectories']:
dc['status'] = get_service_status(environment_id, request.context.session, dc)
return {'activeDirectories': draft['services']['activeDirectories']}
@utils.verify_session

View File

@ -1,4 +1,5 @@
from webob import exc
from portas.api.v1 import get_env_status
from portas.db.session import get_session
from portas.db.models import Environment
from portas.openstack.common import wsgi
@ -50,7 +51,10 @@ class Controller(object):
log.info('User is not authorized to access this tenant resources.')
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):
log.debug(_('Environments:Update <Id: {0}, Body: {1}>'.format(environment_id, body)))

View File

@ -1,5 +1,5 @@
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.openstack.common import wsgi, timeutils
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))
for dc in draft['services']['webServers']:
dc['status'] = get_service_status(environment_id, request.context.session, dc)
return {'webServers': draft['services']['webServers']}
@utils.verify_session