-
Notifications
You must be signed in to change notification settings - Fork 0
/
request.py
81 lines (77 loc) · 2.37 KB
/
request.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import os
import boto3
from requests import Session
from multiprocessing import Process, Queue
from datetime import datetime
import time
RUN_TIME = 10800 ### NOTE - Time in seconds script is to run
TARGET = "x.x.x.x:x"
START_TIME = time.time()
SESSION = Session()
SESSION.trust_env = False
CLOUDWATCH = boto3.client(
"cloudwatch",
region_name="eu-west-2",
aws_access_key_id=os.environ["access_key"],
aws_secret_access_key=os.environ["secret_key"],
)
CLOUDWATCH_LOGS = boto3.client(
"logs",
region_name="eu-west-2",
aws_access_key_id=os.environ["access_key"],
aws_secret_access_key=os.environ["secret_key"],
)
def call(q):
pre_time = time.time()
request = SESSION.get(f"http://{TARGET}/latency_test", verify=False)
post_time = time.time()
diff = post_time - pre_time
q.put((request, diff, pre_time))
def upload(q, responses, stream_name):
formatted_time = datetime.fromtimestamp(responses[2])
CLOUDWATCH_LOGS.put_log_events(
logGroupName="/wavelength/ping-data",
logStreamName=stream_name,
logEvents=[
{"message": f"{str(responses[0].status_code)} - {str(responses[0].text)} - RTT: {str(responses[1])}", "timestamp": int(responses[2] * 1000)}
],
)
CLOUDWATCH.put_metric_data(
Namespace="Wavelength",
MetricData=[
{
"MetricName": "Round Trip Time",
"Dimensions": [
{"Name": "target", "Value": TARGET},
],
"Timestamp": formatted_time,
"Value": float(responses[1]*1000),
"Unit": "Milliseconds",
"StorageResolution": 1,
}
],
)
if __name__ == "__main__":
request_queue = Queue()
upload_queue = Queue()
stream_name = "HTTP_run_start_time_{time}".format(
time=datetime.now().isoformat()
).replace(":", "_")
CLOUDWATCH_LOGS.create_log_stream(
logGroupName="/wavelength/ping-data", logStreamName=stream_name
)
while (time.time() - START_TIME) < RUN_TIME:
rq = Process(target=call, args=(request_queue, ))
rq.start()
responses = request_queue.get()
uq = Process(
target=upload,
args=(
upload_queue,
responses,
stream_name,
),
)
uq.start()
rq.join()
uq.join()