-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathproducer.py
61 lines (48 loc) · 1.6 KB
/
producer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import json
import os
import sys
from datetime import datetime, timedelta
from random import randrange
import boto3
client = boto3.client('sns')
def handle(event, context):
input_topic = os.environ.get('INPUT_TOPIC_ARN')
target = os.environ.get('OUTPUT_TOPIC_ARN')
run(100, input_topic, target)
def run(target, input_topic, amount):
start = datetime.utcnow()
amount += 1
for i in range(1, amount):
delay = randrange(60 * 5)
scheduled_time = (datetime.utcnow() + timedelta(seconds=delay)).isoformat()
payload = {
'payload': scheduled_time,
'date': scheduled_time,
'target': target,
'user': 'test-user'
}
client.publish(
TopicArn=input_topic,
Message=json.dumps(payload)
)
if i % 10 == 0:
total_millis = (datetime.utcnow() - start).total_seconds() * 1000
per_event = int(total_millis / i)
seconds_remaining = int((amount - i) * per_event / 1000)
print(f'total: {i}, { per_event }ms per event, {seconds_remaining}s remaining')
if __name__ == '__main__':
arguments = sys.argv[1:]
if len(arguments) >= 1:
target = arguments[0]
else:
print('You must specify the output topic as the first parameter')
exit()
if len(arguments) >= 3:
input_topic = arguments[2]
else:
input_topic = 'arn:aws:sns:us-east-1:256608350746:scheduler-input-prod'
if len(arguments) >= 2:
amount = int(arguments[1])
else:
amount = 100
run(target, input_topic, amount)