Skip to content

Commit 19935b1

Browse files
Fixed aws credentials usage on profiler daemon (#241)
* [wip] Fixing aws credentials usage on profiler daemon * [wip] More verbose error logs * [fix] Fixed update_ec2_vars_from_request * [fix] Fixed update_ec2_vars_from_request * [fix] More verbose profiler stop error handling * [fix] More verbose profiler stop error handling * [fix] More verbose profiler stop error handling * PEP8 clean PR
1 parent 4a7c385 commit 19935b1

File tree

6 files changed

+210
-147
lines changed

6 files changed

+210
-147
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "redisbench-admin"
3-
version = "0.5.17"
3+
version = "0.5.18"
44
description = "Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... )."
55
authors = ["filipecosta90 <[email protected]>","Redis Performance Group <[email protected]>"]
66
readme = "README.md"

redisbench_admin/profilers/daemon.py

Lines changed: 52 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import logging
99

1010
import argparse
11+
12+
import botocore
1113
from flask import Flask, request
1214
import daemonize
1315
import json
@@ -37,6 +39,7 @@
3739
app = Flask(__name__)
3840
app.use_reloader = False
3941

42+
4043
class PerfDaemon:
4144
def __init__(self, user=None, group=None):
4245
self.user = user
@@ -46,7 +49,8 @@ def __init__(self, user=None, group=None):
4649
self.create_app_endpoints(app)
4750

4851
def main(self):
49-
app.run(host='0.0.0.0', debug=False, port=5000)
52+
self.set_app_loggers(app)
53+
app.run(host="0.0.0.0", debug=False, port=5000)
5054

5155
def set_app_loggers(self, app):
5256
print("Writting log to {}".format(LOGNAME))
@@ -57,22 +61,33 @@ def set_app_loggers(self, app):
5761
app.logger.addHandler(handler)
5862
self.perf.set_logger(app.logger)
5963

60-
def update_ec2_vars_from_request(self, request):
64+
def update_ec2_vars_from_request(self, request, app):
6165
aws_access_key_id = None
6266
aws_secret_access_key = None
6367
aws_session_token = None
6468
region_name = "us-east-2"
6569
if request.is_json:
6670
data = request.get_json()
6771
if "aws_access_key_id" in data:
72+
app.logger.info("detected aws_access_key_id in request")
6873
aws_access_key_id = data["aws_access_key_id"]
6974
if "aws_secret_access_key" in data:
75+
app.logger.info("detected aws_secret_access_key in request")
7076
aws_secret_access_key = data["aws_secret_access_key"]
7177
if "aws_session_token" in data:
78+
app.logger.info("detected aws_session_token in request")
7279
aws_session_token = data["aws_session_token"]
7380
if "region_name" in data:
81+
app.logger.info("detected region_name in request")
7482
region_name = data["region_name"]
7583

84+
if aws_access_key_id is not None:
85+
app.logger.info("aws_access_key_id is properly set")
86+
if aws_secret_access_key is not None:
87+
app.logger.info("aws_secret_access_key is properly set")
88+
if aws_session_token is not None:
89+
app.logger.info("aws_session_token is properly set")
90+
7691
return aws_access_key_id, aws_secret_access_key, aws_session_token, region_name
7792

7893
def update_vars_from_request(self, request, app):
@@ -187,7 +202,7 @@ def profile_stop(profiler_name, pid):
187202
aws_secret_access_key,
188203
aws_session_token,
189204
region_name,
190-
) = self.update_ec2_vars_from_request(request)
205+
) = self.update_ec2_vars_from_request(request, app)
191206
if profile_res is True:
192207
# Generate:
193208
# - artifact with Flame Graph SVG
@@ -220,36 +235,43 @@ def profile_stop(profiler_name, pid):
220235
self.github_repo_name,
221236
"profiles",
222237
)
223-
for (
224-
artifact_name,
225-
profile_artifact,
226-
) in profile_res_artifacts_map.items():
227-
s3_link = None
228-
upload_results_s3 = True
229-
if upload_results_s3:
230-
logging.info(
231-
"Uploading results to s3. s3 bucket name: {}. s3 bucket path: {}".format(
232-
S3_BUCKET_NAME, s3_bucket_path
238+
try:
239+
for (
240+
artifact_name,
241+
profile_artifact,
242+
) in profile_res_artifacts_map.items():
243+
s3_link = None
244+
upload_results_s3 = True
245+
if upload_results_s3:
246+
app.logger.info(
247+
"Uploading results to s3. s3 bucket name: {}. s3 bucket path: {}".format(
248+
S3_BUCKET_NAME, s3_bucket_path
249+
)
233250
)
251+
url_map = upload_artifacts_to_s3(
252+
[profile_artifact],
253+
S3_BUCKET_NAME,
254+
s3_bucket_path,
255+
aws_access_key_id,
256+
aws_secret_access_key,
257+
aws_session_token,
258+
region_name,
259+
)
260+
s3_link = list(url_map.values())[0]
261+
profilers_artifacts_matrix.append(
262+
{
263+
"test_name": self.test_name,
264+
"profiler_name": profiler_name,
265+
"artifact_name": artifact_name,
266+
"s3_link": s3_link,
267+
}
234268
)
235-
url_map = upload_artifacts_to_s3(
236-
[profile_artifact],
237-
S3_BUCKET_NAME,
238-
s3_bucket_path,
239-
aws_access_key_id,
240-
aws_secret_access_key,
241-
aws_session_token,
242-
region_name,
243-
)
244-
s3_link = list(url_map.values())[0]
245-
profilers_artifacts_matrix.append(
246-
{
247-
"test_name": self.test_name,
248-
"profiler_name": profiler_name,
249-
"artifact_name": artifact_name,
250-
"s3_link": s3_link,
251-
}
269+
except botocore.exceptions.NoCredentialsError:
270+
profile_res = False
271+
summary_msg = (
272+
"Unable to push profile artifacts to s3. Missing credentials."
252273
)
274+
app.logger.error(summary_msg)
253275

254276
status_dict = {
255277
"result": profile_res,

redisbench_admin/profilers/perf_daemon_caller.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
# Copyright (c) 2021., Redis Labs Modules
44
# All rights reserved.
55
#
6-
76
import logging
87
import requests
98
from redisbench_admin.utils.remote import extract_git_vars
@@ -60,9 +59,6 @@ def __init__(self, remote_endpoint, **kwargs):
6059
if "region_name" in kwargs:
6160
self.region_name = kwargs["region_name"]
6261

63-
def set_logger(self, logger_app):
64-
self.logger = logger_app
65-
6662
def start_profile(self, pid, output="", frequency=99):
6763
"""
6864
@param pid: profile events on specified process id
@@ -102,19 +98,29 @@ def stop_profile(self, **kwargs):
10298
)
10399
data = {}
104100
if self.aws_access_key_id is not None:
101+
logging.info("Sending aws_access_key_id stop request")
105102
data["aws_access_key_id"] = self.aws_access_key_id
106103
if self.aws_secret_access_key is not None:
104+
logging.info("Sending aws_secret_access_key stop request")
107105
data["aws_secret_access_key"] = self.aws_secret_access_key
108106
if self.aws_session_token is not None:
107+
logging.info("Sending aws_session_token stop request")
109108
data["aws_session_token"] = self.aws_session_token
110109
if self.region_name is not None:
110+
logging.info("Sending region_name stop request")
111111
data["region_name"] = self.region_name
112112

113113
response = requests.post(url, data=None, json=data)
114114
if response.status_code == 200:
115115
result = True
116116
status_dict = response.json()
117117
self.outputs = status_dict["profiler_artifacts"]
118+
else:
119+
logging.error(
120+
"Remote profiler status_code {} != 200. Message: {}".format(
121+
response.status_code, response.content
122+
)
123+
)
118124

119125
return result
120126

0 commit comments

Comments
 (0)