Add ability to get status for Environments and Sessions
Change-Id: I9e29fc08f98320ff6f1a70043cd42506147ada2d
This commit is contained in:
parent
dbfd119576
commit
f97d82a8c5
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue