def get_all(contxt): """get all non-deleted storage pool usage as a dict""" if contxt is None: contxt = context.get_admin_context() try: uses = db.get_storage_pool_usage(contxt) return uses except db_exc.DBError as e: LOG.exception(_("DB Error on getting Storage Pool Usage %s" % e)) raise exception.StoragePoolUsageFailure()
def detail(self, req): """Get storage_group list.""" context = req.environ['vsm.context'] storage_groups = self.conductor_api.storage_group_get_all(context) LOG.info('vsm/api/v1/storage_groups.py detailed storage_groups:%s' % storage_groups) osds = self.conductor_api.osd_state_get_all(context) LOG.info('vsm/api/v1/storage_groups.py detailed osds:%s' % osds) sp_usages = db.get_storage_pool_usage(context) LOG.info('vsm/api/v1/storage_groups.py detailed sp usage:%s' % sp_usages) pools = self.conductor_api.list_storage_pool(context) LOG.info('vsm/api/v1/storage_groups.py detailed pools:%s' % pools) LOG.info('vsm/api/v1/storage_groups.py detailed pools:%s' % type(pools)) for sp_usage in sp_usages: pool_id = str(sp_usage['pool_id']) if pool_id in pools: pools[pool_id]['attach_status'] = sp_usage['attach_status'] for storage_group in storage_groups: storage_group['capacity_total'] = sum([osd["device"]['total_capacity_kb'] for osd in osds if osd['storage_group']['id'] == storage_group["id"]]) storage_group['capacity_used'] = sum([osd["device"]['used_capacity_kb'] for osd in osds if osd['storage_group']['id'] == storage_group["id"]]) storage_group['capacity_avail'] = sum([osd["device"]['avail_capacity_kb'] for osd in osds if osd['storage_group']['id'] == storage_group["id"]]) # largest nodes = {} osd_cnt = 0 for osd in osds: if not osd['storage_group']['id'] == storage_group["id"] or osd['state'] == FLAGS.vsm_status_uninitialized: continue osd_cnt = osd_cnt + 1 k = osd['service']['host'] if k not in osd: nodes.setdefault(k, 0) nodes[k] += osd["device"]['used_capacity_kb'] if not nodes: storage_group['largest_node_capacity_used'] = 0 else: storage_group['largest_node_capacity_used'] = max(nodes.values()) storage_group["attached_osds"] = osd_cnt # attached pools storage_group["attached_pools"] = len([pool for pool in pools.values() if (pool['primary_storage_group_id'] == storage_group["id"])]) try: storage_group['updated_at'] = osds[0]['updated_at'] except: pass LOG.info("vsm/api/v1/storage_groups.py %s" % storage_group) return self._view_builder.index(req, storage_groups)
def detail(self, req): """Get storage_group list.""" context = req.environ['vsm.context'] storage_groups = self.conductor_api.storage_group_get_all(context) LOG.info('vsm/api/v1/storage_groups.py detailed storage_groups:%s' % storage_groups) osds = self.conductor_api.osd_state_get_all(context) LOG.info('vsm/api/v1/storage_groups.py detailed osds:%s' % osds) sp_usages = db.get_storage_pool_usage(context) LOG.info('vsm/api/v1/storage_groups.py detailed sp usage:%s' % sp_usages) pools = self.conductor_api.list_storage_pool(context) LOG.info('vsm/api/v1/storage_groups.py detailed pools:%s' % pools) LOG.info('vsm/api/v1/storage_groups.py detailed pools:%s' % type(pools)) for sp_usage in sp_usages: pool_id = str(sp_usage['pool_id']) if pool_id in pools: pools[pool_id]['attach_status'] = sp_usage['attach_status'] for storage_group in storage_groups: storage_group['capacity_total'] = sum([ osd["device"]['total_capacity_kb'] for osd in osds if osd['storage_group']['id'] == storage_group["id"] ]) storage_group['capacity_used'] = sum([ osd["device"]['used_capacity_kb'] for osd in osds if osd['storage_group']['id'] == storage_group["id"] ]) storage_group['capacity_avail'] = sum([ osd["device"]['avail_capacity_kb'] for osd in osds if osd['storage_group']['id'] == storage_group["id"] ]) # largest nodes = {} for osd in osds: if not osd['storage_group']['id'] == storage_group["id"]: continue k = osd['service']['host'] if k not in osd: nodes.setdefault(k, 0) nodes[k] += osd["device"]['used_capacity_kb'] if not nodes: storage_group['largest_node_capacity_used'] = 0 else: storage_group['largest_node_capacity_used'] = max( nodes.values()) # attached pools storage_group["attached_pools"] = len([ pool for pool in pools.values() if (pool['primary_storage_group_id'] == storage_group["id"]) ]) try: storage_group['updated_at'] = osds[0]['updated_at'] except: pass LOG.info("vsm/api/v1/storage_groups.py %s" % storage_group) return self._view_builder.index(req, storage_groups)
def detail(self, req): """Get storage_group list.""" context = req.environ['vsm.context'] storage_groups_db = self.conductor_api.storage_group_get_all(context) storage_groups = {} storage_group_name_list = [] for storage_group_db in storage_groups_db: take_dict = { "id":storage_group_db['take_id'], "name":"", "order":storage_group_db['take_order'], "choose_type":storage_group_db['choose_type'], "choose_num":storage_group_db['choose_num'] } if storage_group_db['take_id']: try: take_dict['name'] = db.zone_get(context,storage_group_db['take_id'])['name'] except: self.scheduler_api.update_zones_from_crushmap_to_db(context) take_dict['name'] = db.zone_get(context,storage_group_db['take_id'])['name'] if storage_group_db['name'] in storage_group_name_list: storage_groups[storage_group_db['name']]['take_list'].append(take_dict) else: storage_group_name_list.append(storage_group_db['name']) storage_group_dict = { 'id':storage_group_db['id'], 'name':storage_group_db['name'], 'storage_class':storage_group_db['storage_class'], 'friendly_name':storage_group_db['friendly_name'], 'marker':storage_group_db['marker'], 'rule_id':storage_group_db['rule_id'], 'take_list':[take_dict], 'status': storage_group_db["status"], } storage_groups[storage_group_db['name']] = storage_group_dict storage_groups = storage_groups.values() LOG.info('vsm/api/v1/storage_groups.py detailed storage_groups:%s' % storage_groups) osds = self.conductor_api.osd_state_get_all(context) LOG.info('vsm/api/v1/storage_groups.py detailed osds:%s' % osds) sp_usages = db.get_storage_pool_usage(context) LOG.info('vsm/api/v1/storage_groups.py detailed sp usage:%s' % sp_usages) pools = self.conductor_api.list_storage_pool(context) LOG.info('vsm/api/v1/storage_groups.py detailed pools:%s' % pools) LOG.info('vsm/api/v1/storage_groups.py detailed pools:%s' % type(pools)) for sp_usage in sp_usages: pool_id = str(sp_usage['pool_id']) if pool_id in pools: pools[pool_id]['attach_status'] = sp_usage['attach_status'] rules = [storage_group['name'] for storage_group in storage_groups] rules_dict = {'rules':list(set(rules))} rule_osds = self.scheduler_api.get_osds_by_rules(context,rules_dict ) for storage_group in storage_groups: osds_in_storage_group = rule_osds.get(storage_group['name'])#osd['storage_group']['id'] == storage_group["id"]] storage_group['capacity_total'] = sum([osd["device"]['total_capacity_kb'] for osd in osds if osd['osd_name'] in osds_in_storage_group]) storage_group['capacity_used'] = sum([osd["device"]['used_capacity_kb'] for osd in osds if osd['osd_name'] in osds_in_storage_group]) storage_group['capacity_avail'] = sum([osd["device"]['avail_capacity_kb'] for osd in osds if osd['osd_name'] in osds_in_storage_group]) nodes = {} osd_cnt = 0 for osd in osds: if not osd['storage_group']['id'] == storage_group["id"] or osd['state'] == FLAGS.vsm_status_uninitialized: continue osd_cnt = osd_cnt + 1 k = osd['service']['host'] if k not in osd: nodes.setdefault(k, 0) nodes[k] += osd["device"]['used_capacity_kb'] if not nodes: storage_group['largest_node_capacity_used'] = 0 else: storage_group['largest_node_capacity_used'] = max(nodes.values()) storage_group["attached_osds"] = osd_cnt # attached pools storage_group["attached_pools"] = len([pool for pool in pools.values() if (pool['primary_storage_group_id'] == storage_group["id"])]) try: storage_group['updated_at'] = osds[0]['updated_at'] except: pass LOG.info("vsm/api/v1/storage_groups.py %s" % storage_group) return self._view_builder.index(req, storage_groups)