diff options
| author | Kali Kaneko <kali@leap.se> | 2015-08-28 15:41:49 -0400 | 
|---|---|---|
| committer | Kali Kaneko <kali@leap.se> | 2015-08-28 15:41:49 -0400 | 
| commit | 19d96f97d752ef481eec5f44b88aee0a6bbb8dcb (patch) | |
| tree | 29ff012d268389043b10fb806a4384c67d92c982 /scripts/profiling/storage/profile-storage.py | |
| parent | da1a936af43962f4531eda51fa5834391f6745a1 (diff) | |
| parent | 20966f78951d734f100ed6a6a6feedd15dbe79e7 (diff) | |
Merge tag '0.7.2' into debian/experimental
Tag leap.soledad version 0.7.2
Diffstat (limited to 'scripts/profiling/storage/profile-storage.py')
| -rwxr-xr-x | scripts/profiling/storage/profile-storage.py | 107 | 
1 files changed, 107 insertions, 0 deletions
| diff --git a/scripts/profiling/storage/profile-storage.py b/scripts/profiling/storage/profile-storage.py new file mode 100755 index 00000000..305e6d5a --- /dev/null +++ b/scripts/profiling/storage/profile-storage.py @@ -0,0 +1,107 @@ +#!/usr/bin/python + +import os +import logging +import getpass +import tempfile +import argparse +import cProfile +import shutil +import pstats +import StringIO +import datetime + + +from client_side_db import get_soledad_instance +from util import ValidateUserHandle + +# profiling args +NUM_DOCS = 1 +DOC_SIZE = 1024**2 + + +# create a logger +logger = logging.getLogger(__name__) +LOG_FORMAT = '%(asctime)s %(message)s' +logging.basicConfig(format=LOG_FORMAT, level=logging.INFO) + + +def parse_args(): +    # parse command line +    parser = argparse.ArgumentParser() +    parser.add_argument( +        'user@provider', action=ValidateUserHandle, help='the user handle') +    parser.add_argument( +        '-b', dest='basedir', required=False, default=None, +        help='soledad base directory') +    parser.add_argument( +        '-p', dest='passphrase', required=False, default=None, +        help='the user passphrase') +    parser.add_argument( +        '-d', dest='logdir', required=False, default='/tmp/', +        help='the direcroty to which write the profile stats') +    args = parser.parse_args() +    # get the password +    passphrase = args.passphrase +    if passphrase is None: +        passphrase = getpass.getpass( +            'Password for %s@%s: ' % (args.username, args.provider)) +    # get the basedir +    basedir = args.basedir +    if basedir is None: +        basedir = tempfile.mkdtemp() +    logger.info('Using %s as base directory.' % basedir) + +    return args.username, args.provider, passphrase, basedir, args.logdir + +created_docs = [] + +def create_docs(sol, content): +    for i in xrange(NUM_DOCS): +        doc = sol.create_doc(content) +        created_docs.append(doc.doc_id) +         +def get_all_docs(sol): +    for doc_id in created_docs: +        sol.get_doc(doc_id) + +def do_profile(logdir, sol): +    fname_prefix = os.path.join( +        logdir, +        "profile_%s" \ +        % datetime.datetime.now().strftime('%Y-%m-%d_%H-%m-%S')) + +    # profile create docs +    content = {'data': os.urandom(DOC_SIZE/2).encode('hex')} +    pr = cProfile.Profile() +    pr.runcall( +        create_docs, +        sol, content) +    s = StringIO.StringIO() +    ps = pstats.Stats(pr, stream=s).sort_stats('cumulative') +    ps.print_stats() +    ps.dump_stats("%s_creation.stats" % fname_prefix) +    print s.getvalue() + +    # profile get all docs +    pr = cProfile.Profile() +    pr.runcall( +        get_all_docs, +        sol) +    s = StringIO.StringIO() +    ps = pstats.Stats(pr, stream=s).sort_stats('cumulative') +    ps.dump_stats("%s_retrieval.stats" % fname_prefix) +    ps.print_stats() +    print s.getvalue() + + +if __name__ == '__main__': +    username, provider, passphrase, basedir, logdir = parse_args() +    sol = get_soledad_instance( +        username, +        provider, +        passphrase, +        basedir) +    do_profile(logdir, sol) +    shutil.rmtree(basedir) + | 
