From 7a2960d78baa00ef21da4e54c037a3f8cd78ccfc Mon Sep 17 00:00:00 2001 From: drebs Date: Fri, 5 Jan 2018 09:37:26 -0200 Subject: Fix directory name. --- blobs-multiprocess/request.py | 105 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100755 blobs-multiprocess/request.py (limited to 'blobs-multiprocess/request.py') diff --git a/blobs-multiprocess/request.py b/blobs-multiprocess/request.py new file mode 100755 index 0000000..b73fb79 --- /dev/null +++ b/blobs-multiprocess/request.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python + +from io import BytesIO +import time +import treq +from argparse import ArgumentParser +from twisted.internet import reactor, task, defer +from twisted.web.client import readBody, HTTPConnectionPool +from urlparse import urljoin +from uuid import uuid4 + + +BASE_URI = 'http://127.0.0.1:8000/' +BLOBS_URI = urljoin(BASE_URI, + 'blobs/{}/'.format(time.strftime('%Y-%m-%d_%H-%M-%s'))) +CONCURRENT = 10 + +pool = HTTPConnectionPool(reactor) + + +def parse_args(): + parser = ArgumentParser() + parser.add_argument('amount', type=int, help="the amount of blobs") + parser.add_argument('size', type=int, help="size in blocks of 1024 bytes") + parser.add_argument('--put', action='store_true', + help="noop") + parser.add_argument('--baseline', action='store_true', + help="GET /") + parser.add_argument('--list', action='store_true', + help="GET /blobs/") + parser.add_argument('--get', action='store_true', + help="PUT + GET /blobs/someuser/someid") + parser.add_argument('--flag', action='store_true', + help="PUT + POST /blobs/someuser/someid") + parser.add_argument('--delete', action='store_true', + help="PUT + DELETE /blobs/someuser/someid") + args = parser.parse_args() + return args + + +def _finished(_, amount, size): + print("Finished putting {} blobs of size {}K.".format(amount, size)) + reactor.stop() + + +def _error(failure): + print("Failed: %r" % failure) + reactor.stop() + + +def main(generator): + cooperator = task.Cooperator() + cooptask = cooperator.cooperate(generator) + d = cooptask.whenDone() + return d + + +def requests_generator(args): + data = "a" * args.size * 1024 + + def _get(_, uri): + d = treq.get(uri, pool=pool) + d.addCallback(lambda response: readBody(response)) + return d + + def _flag(_, uri): + flags = BytesIO('["PROCESSING"]') + d = treq.post(uri, data=flags, pool=pool) + return d + + def _delete(_, uri): + d = treq.delete(uri, pool=pool) + return d + + deferreds = [] + for i in xrange(args.amount): + if args.baseline: + d = treq.get(BASE_URI, pool=pool) + + elif args.list: + d = treq.get(BLOBS_URI, pool=pool) + + else: + uri = urljoin(BLOBS_URI, uuid4().hex) + d = treq.put(uri, data=data, pool=pool) + if args.get: + d.addCallback(_get, uri) + if args.flag: + d.addCallback(_flag, uri) + if args.delete: + d.addCallback(_delete, uri) + + deferreds.append(d) + yield None + + yield defer.gatherResults(deferreds) + + +if __name__ == "__main__": + args = parse_args() + generator = requests_generator(args) + d = main(generator) + d.addCallback(_finished, args.amount, args.size) + d.addErrback(_error) + reactor.run() -- cgit v1.2.3