#!/usr/bin/env python import sys sys.path.append('.') from uuid import uuid4 import arrow import requests from rdflib import Graph, URIRef, Literal from util.generators import random_utf8_string default_n = 10000 webroot = 'http://localhost:8000/ldp' #webroot = 'http://localhost:8080/rest' container_uri = webroot + '/pomegranate' sys.stdout.write('How many children? [{}] >'.format(default_n)) choice = input().lower() n = int(choice) if choice else default_n sys.stdout.write('Delete container? [n] >') choice = input().lower() del_cont = choice or 'n' sys.stdout.write('POST or PUT? [PUT] >') choice = input().lower() if choice and choice.lower() not in ('post', 'put'): raise ValueError('Not a valid verb.') method = choice.lower() or 'put' # Generate 10,000 children of root node. if del_cont == 'y': requests.delete(container_uri, headers={'prefer': 'no-tombstone'}) requests.put(container_uri) start = arrow.utcnow() ckpt = start print('Inserting {} children.'.format(n)) # URI used to establish an in-repo relationship. prev_uri = container_uri size = 50 # Size of graph to be multiplied by 4. try: for i in range(1, n): url = '{}/{}'.format(container_uri, uuid4()) if method == 'put' \ else container_uri # Generate synthetic graph. #print('generating graph: {}'.format(i)) g = Graph() for ii in range(size): g.add(( URIRef(''), URIRef('urn:inturi_p:{}'.format(ii % size)), URIRef(prev_uri) )) g.add(( URIRef(''), URIRef('urn:lit_p:{}'.format(ii % size)), Literal(random_utf8_string(64)) )) g.add(( URIRef(''), URIRef('urn:lit_p:{}'.format(ii % size)), Literal(random_utf8_string(64)) )) g.add(( URIRef(''), URIRef('urn:exturi_p:{}'.format(ii % size)), URIRef('http://exmple.edu/res/{}'.format(ii // 10)) )) # Send request. rsp = requests.request( method, url, data=g.serialize(format='ttl'), headers={ 'content-type': 'text/turtle'}) rsp.raise_for_status() prev_uri = rsp.headers['location'] if i % 10 == 0: now = arrow.utcnow() tdelta = now - ckpt ckpt = now print('Record: {}\tTime elapsed: {}'.format(i, tdelta)) except KeyboardInterrupt: print('Interruped after {} iterations.'.format(i)) tdelta = arrow.utcnow() - start print('Total elapsed time: {}'.format(tdelta)) print('Average time per resource: {}'.format(tdelta.total_seconds()/i))