lastStatus introduced
Added an API call to fetch the latest status of Session's services regardless of deployments Change-Id: I4f766510227af9ae12042bc14aa4c16693843f44
This commit is contained in:
parent
6a88489524
commit
2b21f4a056
@ -11,6 +11,7 @@
|
||||
# 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 muranoapi.common.utils import build_entity_map
|
||||
|
||||
from muranoapi.openstack.common import wsgi
|
||||
from muranoapi.db.models import Deployment, Status, Environment
|
||||
@ -48,11 +49,8 @@ class Controller(object):
|
||||
if 'services' in environment:
|
||||
for service in environment['services']:
|
||||
if service['id'] in service_id_set:
|
||||
entity_ids.append(service['id'])
|
||||
if 'units' in service:
|
||||
unit_ids = [u['id'] for u in service['units']
|
||||
if 'id' in u]
|
||||
entity_ids = entity_ids + unit_ids
|
||||
id_map = build_entity_map(service)
|
||||
entity_ids = entity_ids + id_map.keys()
|
||||
if entity_ids:
|
||||
query = query.filter(Status.entity_id.in_(entity_ids))
|
||||
else:
|
||||
|
@ -13,10 +13,12 @@
|
||||
# under the License.
|
||||
|
||||
import eventlet
|
||||
from muranoapi.common.utils import build_entity_map
|
||||
from sqlalchemy import desc
|
||||
from webob import exc
|
||||
from muranoapi.common import config
|
||||
from muranoapi.db.session import get_session
|
||||
from muranoapi.db.models import Environment
|
||||
from muranoapi.db.models import Environment, Status
|
||||
from muranoapi.db.services.core_services import CoreServices
|
||||
from muranoapi.db.services.environments import EnvironmentServices
|
||||
from muranoapi.openstack.common import wsgi
|
||||
@ -113,6 +115,27 @@ class Controller(object):
|
||||
|
||||
EnvironmentServices.delete(environment_id, request.context.auth_token)
|
||||
|
||||
def last(self, request, environment_id):
|
||||
session_id = None
|
||||
if hasattr(request, 'context') and request.context.session:
|
||||
session_id = request.context.session
|
||||
services = CoreServices.get_data(environment_id, '/services',
|
||||
session_id)
|
||||
db_session = get_session()
|
||||
result = {}
|
||||
for service in services:
|
||||
service_id = service['id']
|
||||
entity_ids = build_entity_map(service).keys()
|
||||
last_status = db_session.query(Status). \
|
||||
filter(Status.entity_id.in_(entity_ids)). \
|
||||
order_by(desc(Status.created)). \
|
||||
first()
|
||||
if last_status:
|
||||
result[service_id] = last_status.to_dict()
|
||||
else:
|
||||
result[service_id] = None
|
||||
return {'lastStatuses': result}
|
||||
|
||||
|
||||
def create_resource():
|
||||
return wsgi.Resource(Controller())
|
||||
|
@ -82,6 +82,10 @@ class API(wsgi.Router):
|
||||
controller=environments_resource,
|
||||
action='delete',
|
||||
conditions={'method': ['DELETE']})
|
||||
mapper.connect('/environments/{environment_id}/lastStatus',
|
||||
controller=environments_resource,
|
||||
action='last',
|
||||
conditions={'method': ['GET']})
|
||||
|
||||
deployments_resource = deployments.create_resource()
|
||||
mapper.connect('/environments/{environment_id}/deployments',
|
||||
|
@ -136,6 +136,22 @@ def auto_id(value):
|
||||
return value
|
||||
|
||||
|
||||
def build_entity_map(value):
|
||||
def build_entity_map_recursive(value, id_map):
|
||||
if isinstance(value, types.DictionaryType):
|
||||
if 'id' in value:
|
||||
id_map[value['id']] = value
|
||||
for k, v in value.iteritems():
|
||||
build_entity_map_recursive(v, id_map)
|
||||
if isinstance(value, types.ListType):
|
||||
for item in value:
|
||||
build_entity_map_recursive(item, id_map)
|
||||
|
||||
id_map = {}
|
||||
build_entity_map_recursive(value, id_map)
|
||||
return id_map
|
||||
|
||||
|
||||
def retry(ExceptionToCheck, tries=4, delay=3, backoff=2):
|
||||
"""Retry calling the decorated function using an exponential backoff.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user