summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrell Bishop <darrell@swiftstack.com>2012-08-16 21:30:54 -0700
committerDarrell Bishop <darrell@swiftstack.com>2012-08-16 21:30:54 -0700
commit9a3aa066c37f542356c62f8df9631cff9f163194 (patch)
tree56fa61c14e136da4f508057ba4847df68ebf56db
parent99b8253450e3e91ea8615c1dc1457ede4131109f (diff)
downloadpython-swiftclient-9a3aa066c37f542356c62f8df9631cff9f163194.tar.gz
Add timing stats to verbose download output.
When using the swift command-line tool to evaluate a Swift cluster, it can be very handy to get some insight into the download timing. This patch adds timing data to verbose output for the download command. For each downloaded file, the printed line will also contain: - The time it took to send the request and receive the header - The total time the request took (including writing the file out locally) - The average throughput of the download Change-Id: Ib4a995623af973bb1eed4fb52c8c0e5da935964d
-rwxr-xr-xbin/swift14
1 files changed, 10 insertions, 4 deletions
diff --git a/bin/swift b/bin/swift
index 11f9553..16f72e3 100755
--- a/bin/swift
+++ b/bin/swift
@@ -24,7 +24,7 @@ from os.path import basename, dirname, getmtime, getsize, isdir, join
from Queue import Empty, Queue
from sys import argv, exc_info, exit, stderr, stdout
from threading import current_thread, enumerate as threading_enumerate, Thread
-from time import sleep
+from time import sleep, time
from traceback import format_exception
from urllib import quote, unquote
@@ -350,8 +350,10 @@ def st_download(parser, args, print_queue, error_queue):
else:
raise Exception("Invalid queue_arg length of %s" % len(queue_arg))
try:
+ start_time = time()
headers, body = \
conn.get_object(container, obj, resp_chunk_size=65536)
+ header_receipt = time()
content_type = headers.get('content-type')
if 'content-length' in headers:
content_length = int(headers.get('content-length'))
@@ -402,11 +404,15 @@ def st_download(parser, args, print_queue, error_queue):
mtime = float(headers['x-object-meta-mtime'])
utime(path, (mtime, mtime))
if options.verbose:
+ finish_time = time()
+ time_str = 'headers %.3fs, total %.3fs, %.3fs MB/s' % (
+ header_receipt - start_time, finish_time - start_time,
+ float(read_length) / (finish_time - start_time) / 1000000)
if conn.attempts > 1:
- print_queue.put('%s [after %d attempts' %
- (path, conn.attempts))
+ print_queue.put('%s [%s after %d attempts]' %
+ (path, time_str, conn.attempts))
else:
- print_queue.put(path)
+ print_queue.put('%s [%s]' % (path, time_str))
except ClientException, err:
if err.http_status != 404:
raise