
Storage policy stats was not well parsed in account stat. This patch parses the stats and print out the stats in a format like below: $swift -A http://swift_cluster/auth/v1.0 -U test:tester -K testing stat Account: AUTH_test Containers: 5 Objects: 1 Bytes: 2097152 Objects in policy "golden": 1 Bytess in policy "golden": 2097152 Objects in policy "silver": 0 Bytes in policy "silver": 0 X-Timestamp: 1404697760.88809 X-Trans-Id: txec519e24b44a413abb705-0053da2dcb Content-Type: text/plain; charset=utf-8 Accept-Ranges: bytes Change-Id: I7ad0ee6d88f8393e3a93e90cd52b9b592da7072d
128 lines
5.3 KiB
Python
128 lines
5.3 KiB
Python
# 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.
|
|
|
|
from swiftclient.utils import prt_bytes
|
|
|
|
|
|
def stat_account(conn, options, thread_manager):
|
|
items_to_print = []
|
|
|
|
headers = conn.head_account()
|
|
if options.verbose > 1:
|
|
items_to_print.extend((
|
|
('StorageURL', conn.url),
|
|
('Auth Token', conn.token),
|
|
))
|
|
container_count = int(headers.get('x-account-container-count', 0))
|
|
object_count = prt_bytes(headers.get('x-account-object-count', 0),
|
|
options.human).lstrip()
|
|
bytes_used = prt_bytes(headers.get('x-account-bytes-used', 0),
|
|
options.human).lstrip()
|
|
items_to_print.extend((
|
|
('Account', conn.url.rsplit('/', 1)[-1]),
|
|
('Containers', container_count),
|
|
('Objects', object_count),
|
|
('Bytes', bytes_used),
|
|
))
|
|
policies = set()
|
|
exclude_policy_headers = []
|
|
ps_header_prefix = 'x-account-storage-policy-'
|
|
for header_key, header_value in headers.items():
|
|
if header_key.lower().startswith(ps_header_prefix):
|
|
policy_name = header_key.rsplit('-', 2)[0].split('-', 4)[-1]
|
|
policies.add(policy_name)
|
|
exclude_policy_headers.append(header_key)
|
|
for policy in policies:
|
|
items_to_print.extend((
|
|
('Objects in policy "' + policy + '"',
|
|
prt_bytes(headers.get(ps_header_prefix + policy + '-object-count',
|
|
0), options.human).lstrip()),
|
|
('Bytes in policy "' + policy + '"',
|
|
prt_bytes(headers.get(ps_header_prefix + policy + '-bytes-used',
|
|
0), options.human).lstrip()),
|
|
))
|
|
|
|
items_to_print.extend(thread_manager.headers_to_items(
|
|
headers, meta_prefix='x-account-meta-',
|
|
exclude_headers=([
|
|
'content-length', 'date',
|
|
'x-account-container-count',
|
|
'x-account-object-count',
|
|
'x-account-bytes-used'] + exclude_policy_headers)))
|
|
# line up the items nicely
|
|
offset = max(len(item) for item, value in items_to_print)
|
|
thread_manager.print_items(items_to_print, offset=offset)
|
|
|
|
|
|
def stat_container(conn, options, args, thread_manager):
|
|
headers = conn.head_container(args[0])
|
|
if options.verbose > 1:
|
|
path = '%s/%s' % (conn.url, args[0])
|
|
thread_manager.print_items((
|
|
('URL', path),
|
|
('Auth Token', conn.token),
|
|
))
|
|
object_count = prt_bytes(
|
|
headers.get('x-container-object-count', 0),
|
|
options.human).lstrip()
|
|
bytes_used = prt_bytes(headers.get('x-container-bytes-used', 0),
|
|
options.human).lstrip()
|
|
thread_manager.print_items((
|
|
('Account', conn.url.rsplit('/', 1)[-1]),
|
|
('Container', args[0]),
|
|
('Objects', object_count),
|
|
('Bytes', bytes_used),
|
|
('Read ACL', headers.get('x-container-read', '')),
|
|
('Write ACL', headers.get('x-container-write', '')),
|
|
('Sync To', headers.get('x-container-sync-to', '')),
|
|
('Sync Key', headers.get('x-container-sync-key', '')),
|
|
))
|
|
thread_manager.print_headers(headers,
|
|
meta_prefix='x-container-meta-',
|
|
exclude_headers=(
|
|
'content-length', 'date',
|
|
'x-container-object-count',
|
|
'x-container-bytes-used',
|
|
'x-container-read',
|
|
'x-container-write',
|
|
'x-container-sync-to',
|
|
'x-container-sync-key'))
|
|
|
|
|
|
def stat_object(conn, options, args, thread_manager):
|
|
headers = conn.head_object(args[0], args[1])
|
|
if options.verbose > 1:
|
|
path = '%s/%s/%s' % (conn.url, args[0], args[1])
|
|
thread_manager.print_items((
|
|
('URL', path),
|
|
('Auth Token', conn.token),
|
|
))
|
|
content_length = prt_bytes(headers.get('content-length', 0),
|
|
options.human).lstrip()
|
|
thread_manager.print_items((
|
|
('Account', conn.url.rsplit('/', 1)[-1]),
|
|
('Container', args[0]),
|
|
('Object', args[1]),
|
|
('Content Type', headers.get('content-type')),
|
|
('Content Length', content_length),
|
|
('Last Modified', headers.get('last-modified')),
|
|
('ETag', headers.get('etag')),
|
|
('Manifest', headers.get('x-object-manifest')),
|
|
), skip_missing=True)
|
|
thread_manager.print_headers(headers,
|
|
meta_prefix='x-object-meta-',
|
|
exclude_headers=(
|
|
'content-type', 'content-length',
|
|
'last-modified', 'etag', 'date',
|
|
'x-object-manifest'))
|