1+ #!/usr/bin/env python3
12import sys
23from typing import Callable
34from datetime import datetime , timedelta , timezone
78
89from takethetime import ttt
910
10- from . import get_storage_methods , Datastore
11- from .storages import AbstractStorage
11+ from aw_datastore import get_storage_methods , Datastore
12+ from aw_datastore .storages import AbstractStorage
1213
1314
1415def create_test_events (n ):
15- now = datetime .now (timezone .utc )
16+ now = datetime .now (timezone .utc ) - timedelta ( days = 1000 )
1617
17- events = [None ] * n
18+ events = []
1819 for i in range (n ):
19- events [ i ] = Event (timestamp = now + i * timedelta (hours = 1 ), data = {"label" : "asd" })
20+ events . append ( Event (timestamp = now + i * timedelta (seconds = 1 ), data = {"label" : "asd" }) )
2021
2122 return events
2223
2324
25+ def create_tmpbucket (ds , num ):
26+ bucket_id = "benchmark_test_bucket_{}" .format (str (num ))
27+ try :
28+ ds .delete_bucket (bucket_id )
29+ except KeyError :
30+ pass
31+ ds .create_bucket (bucket_id , "testingtype" , "test-client" , "testing-box" )
32+ return bucket_id
33+
34+
2435@contextmanager
2536def temporary_bucket (ds ):
2637 bucket_id = "test_bucket"
@@ -35,49 +46,42 @@ def temporary_bucket(ds):
3546
3647def benchmark (storage : Callable [..., AbstractStorage ]):
3748 ds = Datastore (storage , testing = True )
38- num_events = 5 * 10 ** 4
49+
50+ num_single_events = 50
51+ num_replace_events = 50
52+ num_bulk_events = 2 * 10 ** 3
53+ num_events = num_single_events + num_replace_events + num_bulk_events + 1
54+ num_final_events = num_single_events + num_bulk_events + 1
55+
3956 events = create_test_events (num_events )
57+ single_events = events [:num_single_events ]
58+ replace_events = events [num_single_events :num_single_events + num_replace_events ]
59+ bulk_events = events [num_single_events + num_replace_events :- 1 ]
4060
4161 print (storage .__name__ )
4262
4363 with temporary_bucket (ds ) as bucket :
4464 with ttt (" sum" ):
45- with ttt (" insert {} events" .format (num_events )):
46- bucket .insert (events )
65+ with ttt (" single insert {} events" .format (num_single_events )):
66+ for event in single_events :
67+ bucket .insert (event )
68+
69+ with ttt (" bulk insert {} events" .format (num_bulk_events )):
70+ bucket .insert (bulk_events )
71+
72+ with ttt (" replace last {}" .format (num_replace_events )):
73+ for e in replace_events :
74+ bucket .replace_last (e )
4775
4876 with ttt (" insert 1 event" ):
4977 bucket .insert (events [- 1 ])
5078
5179 with ttt (" get one" ):
5280 events_tmp = bucket .get (limit = 1 )
53- # print("Total number of events: {}".format(len(events)))
5481
5582 with ttt (" get all" ):
56- events_tmp = bucket .get (limit = num_events )
57- print (len (events_tmp ))
58- assert len (events_tmp ) == num_events
59- for e1 , e2 in zip (events , sorted (events_tmp , key = lambda e : e .timestamp )):
60- try :
61- # Can't do direct comparison since tz will differ in object type (but have identical meaning)
62- # TODO: Fix the above by overriding __eq__ on Event
63- assert e1 .timestamp .second == e2 .timestamp .second
64- assert e1 .timestamp .microsecond == e2 .timestamp .microsecond
65- except AssertionError as e :
66- print (e1 )
67- print (e2 )
68- raise e
69- # print("Total number of events: {}".format(len(events)))
70-
71- def events_in_interval (n ):
72- with ttt (" get {} events within time interval" .format (n )):
73- events_tmp = bucket .get (limit = num_events ,
74- starttime = events [0 ].timestamp ,
75- endtime = events [n ].timestamp )
76- assert len (events_tmp ) == n - 1
77- # print("Events within time interval: {}".format(len(events)))
78-
79- events_in_interval (int (num_events / 2 ))
80- events_in_interval (10 )
83+ events_tmp = bucket .get ()
84+ assert len (events_tmp ) == num_final_events
8185
8286
8387if __name__ == "__main__" :
0 commit comments