Skip to content

Commit 3147ee0

Browse files
committed
review changes
1 parent 0ecd58b commit 3147ee0

File tree

2 files changed

+83
-58
lines changed

2 files changed

+83
-58
lines changed

lib/pbench/agent/results.py

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import errno
33
import os
44
import requests
5-
import sys
65
import tarfile
76

87
from configparser import ConfigParser
@@ -26,32 +25,38 @@ def __init__(self, result_dir, target_dir, user, prefix, config, logger):
2625
self.logger = logger
2726

2827
def check_result_target_dir(self, result_dir, target_dir):
29-
sts = 0
3028
if not result_dir:
31-
self.logger.error("Result directory not provided")
32-
sts = 1
33-
if not target_dir:
34-
self.logger.error("Target directory not provided")
35-
sts = 1
36-
try:
37-
self.result_dir = Path(result_dir).resolve(strict=True)
38-
except FileNotFoundError:
39-
self.logger.error("Invalid result directory provided: {}", result_dir)
40-
sts = 1
29+
raise FileNotFoundError("Result directory not provided")
4130
else:
42-
if not self.result_dir.is_dir():
43-
self.logger.error("Invalid result directory provided: {}", result_dir)
44-
sts = 1
45-
try:
46-
self.target_dir = Path(target_dir).resolve(strict=True)
47-
except FileNotFoundError:
48-
self.logger.error("Invalid target directory provided: {}", target_dir)
49-
sts = 1
31+
try:
32+
self.result_dir = Path(result_dir).resolve(strict=True)
33+
except Exception:
34+
raise FileNotFoundError(
35+
"Invalid result directory provided: {}", result_dir
36+
)
37+
else:
38+
if not self.result_dir.is_dir():
39+
self.logger.error(
40+
"Invalid result directory provided: {}", result_dir
41+
)
42+
return 1
43+
44+
if not target_dir:
45+
raise FileNotFoundError("Target directory not provided")
5046
else:
51-
if not self.target_dir.is_dir():
52-
self.logger.error("Invalid target directory provided: {}", target_dir)
53-
sts = 1
54-
return sts
47+
try:
48+
self.target_dir = Path(target_dir).resolve(strict=True)
49+
except Exception:
50+
raise FileNotFoundError(
51+
"Invalid target directory provided: {}", target_dir
52+
)
53+
else:
54+
if not self.target_dir.is_dir():
55+
self.logger.error(
56+
"Invalid target directory provided: {}", target_dir
57+
)
58+
return 1
59+
return 0
5560

5661
def make_result_tb(self):
5762
if os.path.exists(f"{self.result_dir}.copied"):
@@ -60,7 +65,7 @@ def make_result_tb(self):
6065

6166
pbench_run_name = self.result_dir.name
6267
if os.path.exists(f"{self.result_dir}/.running"):
63-
self.logger.debug(
68+
self.logger.warning(
6469
"The benchmark is still running in {} - skipping; if that is"
6570
" not true, rmdir {}/.running, and try again",
6671
pbench_run_name,
@@ -124,7 +129,8 @@ def make_result_tb(self):
124129
self.logger.error("error removing failed tar ball, {}", tarball)
125130
return (1, "")
126131

127-
self.make_md5sum(tarball)
132+
ret = self.make_md5sum(tarball)
133+
return (ret, "")
128134

129135
# The contract with the caller is to just return the full path to the
130136
# created tar ball.
@@ -149,7 +155,8 @@ def make_md5sum(self, tarball):
149155
self.logger.error(
150156
"error removing failed tar ball MD5, {}", tarball_md5
151157
)
152-
sys.exit(1)
158+
return 1
159+
return 0
153160

154161

155162
class CopyResultTb:
@@ -192,17 +199,25 @@ def copy_result_tb(self, token):
192199
with open(self.tarball_md5, "r") as md5fp:
193200
md5sum = md5fp.read().split()[0]
194201
filename = secure_filename(str(self.tarball))
195-
headers = {"filename": filename, "Content-MD5": md5sum, "token": token}
202+
headers = {
203+
"filename": filename,
204+
"Content-MD5": md5sum,
205+
"Authorization": f"Bearer {token}",
206+
}
196207
with self.tarball.open("rb") as f:
197208
try:
198209
response = requests.put(
199210
self.upload_url, data=self.read_in_chunks(f), headers=headers
200211
)
201212
self.logger.info("File uploaded successfully")
202213
except Exception:
203-
self.logger.exception("There was something wrong with your request")
214+
self.logger.exception(
215+
"There was something wrong with file upload request: file: '{}', URL: '{}'",
216+
self.tarball,
217+
self.upload_url,
218+
)
204219
return 1
205-
if not response.status_code == 200:
220+
if not response.ok:
206221
self.logger.error(
207222
"There was something wrong with your request, error code: '{}'",
208223
response.status_code,

lib/pbench/cli/agent/commands/results/__init__.py

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,15 @@ def execute(self):
2323

2424
logger = get_pbench_logger("pbench-agent", config)
2525

26-
if not self.context.controller:
27-
controller = os.environ.get("_pbench_full_hostname")
28-
if not controller:
29-
logger.error("Missing controller name (should be 'hostname -f' value)")
30-
sys.exit(1)
31-
3226
results_webserver = self.config.get("results", "webserver")
3327
if not results_webserver:
3428
logger.error(
3529
"No web server host configured from which we can fetch the FQDN of the host to which we copy/move results"
3630
)
37-
logger.debug("'webserver' key in 'results' section not set")
3831

3932
server_rest_url = self.config.get("results", "server_rest_url")
4033
response = requests.get(f"{server_rest_url}/host_info")
41-
if response.status_code not in [200, 201]:
34+
if response.ok:
4235
logger.error(
4336
"Unable to determine results host info from %s/host_info",
4437
server_rest_url,
@@ -58,44 +51,55 @@ def execute(self):
5851
)
5952
sys.exit(1)
6053

61-
try:
62-
temp_dir = tempfile.mkdtemp(
63-
dir=self.config.pbench_tmp, prefix="pbench-move-results."
64-
)
65-
except Exception:
66-
logger.error("Failed to create temporary directory")
67-
sys.exit(1)
68-
69-
user = self.context.user if self.context.user else "pbench"
70-
prefix = self.context.prefix if self.context.prefix else ""
54+
temp_dir = tempfile.mkdtemp(
55+
dir=self.config.pbench_tmp, prefix="pbench-move-results."
56+
)
7157

7258
runs_copied = 0
7359
failures = 0
7460

7561
for dirent in config.pbench_run.iterdir():
76-
if not self.dirent.is_dir():
62+
if not dirent.is_dir():
7763
continue
7864
if dirent.name.startswith("tools-") or dirent.name == "tmp":
7965
continue
8066
result_dir = dirent
81-
mrt = MakeResultTb(result_dir, temp_dir, user, prefix, self.config, logger)
82-
make_return_val = mrt.check_result_target_dir(result_dir, temp_dir)
67+
mrt = MakeResultTb(
68+
result_dir,
69+
temp_dir,
70+
self.context.user,
71+
self.context.prefix,
72+
self.config,
73+
logger,
74+
)
75+
76+
try:
77+
make_return_val = mrt.check_result_target_dir(result_dir, temp_dir)
78+
except FileNotFoundError as e:
79+
logger.error(e)
80+
8381
if make_return_val:
84-
sys.exit(1)
82+
failures += 1
83+
continue
8584
status, result_tb_name = mrt.make_result_tb()
8685

8786
if status == 0:
8887
if os.path.exists(result_tb_name):
8988
assert (
9089
result_tb_name
9190
), "Logic bomb! make_result_tb() always returns a tar ball name"
92-
crt = CopyResultTb(controller, result_tb_name, self.config, logger)
91+
92+
crt = CopyResultTb(
93+
self.context.controller, result_tb_name, self.config, logger
94+
)
9395
copy_return_val = crt.check_tb_tbmd5()
9496
if copy_return_val:
95-
sys.exit(1)
97+
failures += 1
98+
continue
9699
ret = crt.copy_result_tb(self.context.token)
97100
if ret:
98-
sys.exit(1)
101+
failures += 1
102+
continue
99103
else:
100104
logger.error("Error occured while creating Result Tarball")
101105
failures += 1
@@ -136,14 +140,20 @@ def execute(self):
136140
@click.command()
137141
@common_options
138142
@click.option(
139-
"--controller", help="Controller name (should be hostname -f value)",
143+
"--controller",
144+
required=True,
145+
envvar="_pbench_full_hostname",
146+
prompt=False,
147+
help="Controller name",
140148
)
141149
@click.option(
142-
"--user", help="Pbench user",
150+
"--user", default="pbench", prompt=False, help="Pbench user",
143151
)
144152
@click.option(
145153
"--token",
146-
prompt=False,
154+
required=True,
155+
prompt=True,
156+
envvar="PBENCH_ACCESS_TOKEN",
147157
help="pbench server authentication token (will prompt if unspecified)",
148158
)
149159
@click.option(

0 commit comments

Comments
 (0)