Ilya Shakhat f2d6e0f312 Remove project type from data model and UI
* Removed project_type and project_group from default data
* Add module groups automatically, one per organization
* Removed project type from UI code
* Enforced patterns in schema of default data

This patch changes format of data stored in memcached. The service
needs to be restarted and memcached filled from scratch.

Change-Id: I737712025142d3b2acc2e83c4cc238a194703872
2014-02-14 15:35:03 +04:00

145 lines
4.6 KiB
Python

# Copyright (c) 2013 Mirantis Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import flask
from oslo.config import cfg
from dashboard import memory_storage
from stackalytics.openstack.common import log as logging
from stackalytics.processor import runtime_storage
from stackalytics.processor import utils
LOG = logging.getLogger(__name__)
def get_vault():
vault = getattr(flask.current_app, 'stackalytics_vault', None)
if not vault:
try:
vault = {}
runtime_storage_inst = runtime_storage.get_runtime_storage(
cfg.CONF.runtime_storage_uri)
vault['runtime_storage'] = runtime_storage_inst
vault['memory_storage'] = memory_storage.get_memory_storage(
memory_storage.MEMORY_STORAGE_CACHED)
init_releases(vault)
flask.current_app.stackalytics_vault = vault
except Exception as e:
LOG.critical('Failed to initialize application: %s', e)
LOG.exception(e)
flask.abort(500)
if not getattr(flask.request, 'stackalytics_updated', None):
flask.request.stackalytics_updated = True
memory_storage_inst = vault['memory_storage']
have_updates = memory_storage_inst.update(
vault['runtime_storage'].get_update(os.getpid()))
if have_updates:
init_releases(vault)
init_module_groups(vault)
return vault
def get_memory_storage():
return get_vault()['memory_storage']
def init_releases(vault):
runtime_storage_inst = vault['runtime_storage']
releases = runtime_storage_inst.get_by_key('releases')
releases_map = {}
if releases:
vault['start_date'] = releases[0]['end_date']
vault['end_date'] = releases[-1]['end_date']
start_date = releases[0]['end_date']
for r in releases[1:]:
r['start_date'] = start_date
start_date = r['end_date']
releases_map = dict((r['release_name'].lower(), r)
for r in releases[1:])
vault['releases'] = releases_map
def init_module_groups(vault):
runtime_storage_inst = vault['runtime_storage']
memory_storage_inst = vault['memory_storage']
module_index = {}
module_id_index = {}
module_groups = runtime_storage_inst.get_by_key('module_groups') or []
module_groups.append({'module_group_name': 'All',
'modules': set(memory_storage_inst.get_modules())})
for module_group in module_groups:
module_group_name = module_group['module_group_name']
module_group_id = utils.safe_encode(module_group_name.lower())
module_id_index[module_group_id] = {
'group': True,
'id': module_group_id,
'text': module_group_name,
'modules': [m.lower() for m in module_group['modules']],
}
modules = module_group['modules']
for module in modules:
if module in module_index:
module_index[module].add(module_group_id)
else:
module_index[module] = set([module_group_id])
for module in memory_storage_inst.get_modules():
module_id_index[module] = {
'id': utils.safe_encode(module.lower()),
'text': module,
'modules': [module.lower()],
}
vault['module_group_index'] = module_index
vault['module_id_index'] = module_id_index
vault['module_groups'] = module_groups
def get_release_options():
runtime_storage_inst = get_vault()['runtime_storage']
releases = (runtime_storage_inst.get_by_key('releases') or [None])[1:]
releases.append({'release_name': 'all'})
releases.reverse()
return releases
def get_user_from_runtime_storage(user_id):
runtime_storage_inst = get_vault()['runtime_storage']
return utils.load_user(runtime_storage_inst, user_id)
def resolve_modules(module_ids):
module_id_index = get_vault().get('module_id_index') or {}
modules = set()
for module_id in module_ids:
if module_id in module_id_index:
modules |= set(module_id_index[module_id]['modules'])
return modules