def take_action(self, parsed_args): from oio.common.easy_value import convert_size self.log.debug('take_action(%s)', parsed_args) account = self.app.client_manager.account self.take_action_container(parsed_args) # The command is named 'show' but we must call # container_get_properties() because container_show() does # not return system properties (and we need them). data = self.app.client_manager.storage.container_get_properties( account, parsed_args.container, cid=parsed_args.cid, admin_mode=True) sys = data['system'] ctime = float(sys[M2_PROP_CTIME]) / 1000000. bytes_usage = sys.get(M2_PROP_USAGE, 0) objects = sys.get(M2_PROP_OBJECTS, 0) damaged_objects = sys.get(M2_PROP_DAMAGED_OBJECTS, 0) missing_chunks = sys.get(M2_PROP_MISSING_CHUNKS, 0) if parsed_args.formatter == 'table': ctime = int(ctime) bytes_usage = convert_size(int(bytes_usage), unit="B") objects = convert_size(int(objects)) info = { 'account': sys['sys.account'], 'base_name': sys['sys.name'], 'container': sys['sys.user.name'], 'ctime': ctime, 'bytes_usage': bytes_usage, 'quota': sys.get(M2_PROP_QUOTA, "Namespace default"), 'objects': objects, 'damaged_objects': damaged_objects, 'missing_chunks': missing_chunks, 'storage_policy': sys.get(M2_PROP_STORAGE_POLICY, "Namespace default"), 'max_versions': sys.get(M2_PROP_VERSIONING_POLICY, "Namespace default"), 'status': OIO_DB_STATUS_NAME.get(sys.get('sys.status'), "Unknown"), } for k in ('stats.page_count', 'stats.freelist_count', 'stats.page_size'): info[k] = sys.get(k) wasted = (float_value(info['stats.freelist_count'], 0) / float_value(info['stats.page_count'], 1)) wasted_bytes = (int_value(info['stats.freelist_count'], 0) * int_value(info['stats.page_size'], 0)) info['stats.space_wasted'] = "%5.2f%% (est. %s)" % \ (wasted * 100, convert_size(wasted_bytes)) bucket = sys.get(M2_PROP_BUCKET_NAME, None) if bucket is not None: info['bucket'] = bucket delete_exceeding = sys.get(M2_PROP_DEL_EXC_VERSIONS, None) if delete_exceeding is not None: info['delete_exceeding_versions'] = delete_exceeding != '0' for k, v in iteritems(data['properties']): info['meta.' + k] = v return list(zip(*sorted(info.items())))
def _test_create_with_status(self, status=None): def _status(_data): return _data['system']['sys.status'] params = self.param_ref(self.ref) headers = {} headers['x-oio-action-mode'] = 'autocreate' headers['Content-Type'] = 'application/json' if status: data = ('{"properties":{},' + '"system":{"sys.status": "%d"}}' % status) else: data = None status = OIO_DB_ENABLED resp = self.request('POST', self.url_container('create'), params=params, data=data, headers=headers) self.assertEqual(resp.status, 201) resp = self.request('POST', self.url_container('get_properties'), params=params) data = self.json_loads(resp.data) self.assertEqual(OIO_DB_STATUS_NAME.get(_status(data), "Unknown"), OIO_DB_STATUS_NAME[status])
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) account = self.app.client_manager.account self.take_action_container(parsed_args) # The command is named 'show' but we must call # container_get_properties() because container_show() does # not return system properties (and we need them). data = self.app.client_manager.storage.container_get_properties( account, parsed_args.container, cid=parsed_args.cid ) sys = data['system'] ctime = float(sys['sys.m2.ctime']) / 1000000. bytes_usage = sys.get('sys.m2.usage', 0) objects = sys.get('sys.m2.objects', 0) damaged_objects = sys.get('sys.m2.objects.damaged', 0) missing_chunks = sys.get('sys.m2.chunks.missing', 0) if parsed_args.formatter == 'table': from oio.common.easy_value import convert_size ctime = int(ctime) bytes_usage = convert_size(int(bytes_usage), unit="B") objects = convert_size(int(objects)) info = { 'account': sys['sys.account'], 'base_name': sys['sys.name'], 'container': sys['sys.user.name'], 'ctime': ctime, 'bytes_usage': bytes_usage, 'quota': sys.get('sys.m2.quota', "Namespace default"), 'objects': objects, 'damaged_objects': damaged_objects, 'missing_chunks': missing_chunks, 'storage_policy': sys.get('sys.m2.policy.storage', "Namespace default"), 'max_versions': sys.get('sys.m2.policy.version', "Namespace default"), 'status': OIO_DB_STATUS_NAME.get(sys.get('sys.status'), "Unknown"), } delete_exceeding = sys.get('sys.m2.policy.version.delete_exceeding', None) if delete_exceeding is not None: info['delete_exceeding_versions'] = delete_exceeding != '0' for k, v in data['properties'].iteritems(): info['meta.' + k] = v return zip(*sorted(info.iteritems()))
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) account = self.app.client_manager.account container = parsed_args.container data = self.app.client_manager.storage.container_get_properties( account, container) data_dir = self.app.client_manager.storage.directory.list( account, container) info = { 'account': data['system']['sys.account'], 'base_name': data['system']['sys.name'], 'name': data['system']['sys.user.name'], 'meta0': list(), 'meta1': list(), 'meta2': list(), 'status': OIO_DB_STATUS_NAME.get(data['system'].get('sys.status'), "Unknown"), } for d in data_dir['srv']: if d['type'] == 'meta2': info['meta2'].append(d['host']) for d in data_dir['dir']: if d['type'] == 'meta0': info['meta0'].append(d['host']) if d['type'] == 'meta1': info['meta1'].append(d['host']) for stype in ["meta0", "meta1", "meta2"]: info[stype] = ', '.join(info[stype]) return list(zip(*sorted(info.items())))
def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) self.take_action_container(parsed_args) account = self.app.client_manager.account container = parsed_args.container cid = parsed_args.cid m2_sys = self.app.client_manager.storage.container_get_properties( account, container, cid=cid)['system'] data_dir = self.app.client_manager.storage.directory.list(account, container, cid=cid) info = { 'account': m2_sys['sys.account'], 'base_name': m2_sys['sys.name'], 'name': m2_sys['sys.user.name'], 'meta0': list(), 'meta1': list(), 'meta2': list(), 'meta2.sys.peers': list(), 'status': OIO_DB_STATUS_NAME.get(m2_sys.get('sys.status'), "Unknown"), } for d in data_dir['srv']: if d['type'] == 'meta2': info['meta2'].append(d['host']) for peer in m2_sys.get('sys.peers', 'Unknown').split(','): info['meta2.sys.peers'].append(peer) for d in data_dir['dir']: if d['type'] == 'meta0': info['meta0'].append(d['host']) if d['type'] == 'meta1': info['meta1'].append(d['host']) for stype in ["meta0", "meta1", "meta2", 'meta2.sys.peers']: info[stype] = ', '.join(info[stype]) return list(zip(*sorted(info.items())))