Skip to content

Commit fa75907

Browse files
committed
A bit of cleaning in the server part.
1 parent d3c4192 commit fa75907

File tree

5 files changed

+76
-78
lines changed

5 files changed

+76
-78
lines changed

xboinc/register.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def register(user, folder):
4848
except Exception as e:
4949
user_file.unlink()
5050
raise Exception(e)
51-
if cp_to_eos(user_file, dropdir, maximum_trials=1, is_server=False): # returncode 1 means error
51+
if cp_to_eos(user_file, dropdir, maximum_trials=1): # returncode 1 means error
5252
user_file.unlink()
5353
raise Exception(f"Failed to copy register file to server dropdir.\n"
5454
+ "Do you have permissions?\n"

xboinc/server/afs.py

Lines changed: 61 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,69 @@
66
import subprocess
77
from pathlib import Path
88

9+
from .tools import log_debug, log_info, log_error
910

10-
def afs_add_acl(user, folder, acl='rlwik'):
11-
folder = Path(folder).resolve()
12-
if folder.is_dir():
13-
cmd = subprocess.run(['fs', 'sa', folder, user, acl],
14-
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
15-
if cmd.returncode == 0:
16-
print(f"Set ACL '{acl}' on folder {folder} for user {user}.")
11+
12+
def afs_add_acl(user, folder, acl='rlwik', is_server=False):
13+
try:
14+
folder = Path(folder).resolve()
15+
if folder.is_dir():
16+
cmd = subprocess.run(['fs', 'sa', folder, user, acl],
17+
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
18+
if cmd.returncode == 0:
19+
log_info(f"Set ACL '{acl}' on folder {folder} for user {user}.", is_server=is_server)
20+
return 0
21+
else:
22+
stderr = cmd.stderr.decode('UTF-8').strip().split('\n')
23+
log_error(f"Failed to set ACL '{acl}' on {folder} for user {user}.\n{stderr}", is_server=is_server)
24+
return 1
1725
else:
18-
stderr = cmd.stderr.decode('UTF-8').strip().split('\n')
19-
raise Exception(f"Failed to set ACL on {folder} for user {user}.\n{stderr}")
20-
else:
21-
raise Exception(f"Folder {folder} not found. Do you have access permissions?")
22-
23-
24-
def afs_remove_acl(user, folder):
25-
folder = Path(folder).resolve()
26-
if folder.is_dir():
27-
cmd = subprocess.run(['fs', 'sa', folder, user, 'none'],
28-
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
29-
if cmd.returncode == 0:
30-
print(f"Removed ACL on folder {folder} for user {user}.")
26+
log_error(f"Folder {folder} not found. Do you have access permissions?", is_server=is_server)
27+
return 1
28+
except Exception as e:
29+
log_error(f"Failed to set ACL '{acl}' on {folder} for user {user}.\n{stderr}", e, is_server=is_server)
30+
return 1
31+
32+
33+
def afs_remove_acl(user, folder, is_server=False):
34+
try:
35+
folder = Path(folder).resolve()
36+
if folder.is_dir():
37+
cmd = subprocess.run(['fs', 'sa', folder, user, 'none'],
38+
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
39+
if cmd.returncode == 0:
40+
log_info(f"Removed ACL on folder {folder} for user {user}.", is_server=is_server)
41+
return 0
42+
else:
43+
stderr = cmd.stderr.decode('UTF-8').strip().split('\n')
44+
log_error(f"Failed to remove ACL on {folder} for user {user}.\n{stderr}", is_server=is_server)
45+
return 1
3146
else:
32-
stderr = cmd.stderr.decode('UTF-8').strip().split('\n')
33-
raise Exception(f"Failed to remove ACL on {folder} for user {user}.\n{stderr}")
34-
else:
35-
raise Exception(f"Folder {folder} not found. Do you have access permissions?")
36-
37-
38-
def afs_print_acl(folder):
39-
folder = Path(folder).resolve()
40-
if folder.is_dir():
41-
cmd = subprocess.run(['fs', 'la', folder],
42-
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
43-
if cmd.returncode == 0:
44-
stdout = cmd.stdout.decode('UTF-8').strip().split('\n')
45-
print(f"{stdout}")
47+
log_error(f"Folder {folder} not found. Do you have access permissions?", is_server=is_server)
48+
return 1
49+
except Exception as e:
50+
log_error(f"Failed to remove ACL on {folder} for user {user}.\n{stderr}", e, is_server=is_server)
51+
return 1
52+
53+
54+
def afs_print_acl(folder, is_server=False):
55+
try:
56+
folder = Path(folder).resolve()
57+
if folder.is_dir():
58+
cmd = subprocess.run(['fs', 'la', folder],
59+
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
60+
if cmd.returncode == 0:
61+
stdout = cmd.stdout.decode('UTF-8').strip().split('\n')
62+
log_info(f"{stdout}", is_server=is_server)
63+
return 0
64+
else:
65+
stderr = cmd.stderr.decode('UTF-8').strip().split('\n')
66+
log_error(f"Failed to remove ACL on {folder} for user {user}.\n{stderr}", is_server=is_server)
67+
return 1
4668
else:
47-
stderr = cmd.stderr.decode('UTF-8').strip().split('\n')
48-
raise Exception(f"Failed to remove ACL on {folder} for user {user}.\n{stderr}")
49-
else:
50-
raise Exception(f"Folder {folder} not found. Do you have access permissions?")
69+
log_error(f"Folder {folder} not found. Do you have access permissions?", is_server=is_server)
70+
return 1
71+
except Exception as e:
72+
log_error(f"Failed to remove ACL on {folder} for user {user}.\n{stderr}", e, is_server=is_server)
73+
return 1
5174

xboinc/server/eos.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def _xrd_path(path):
3838
path = Path(path).expanduser().resolve()
3939
return EOS_MGM_URL + '/' + _eos_path(path)
4040

41-
def eos_glob(pattern, path, is_server=True):
41+
def eos_glob(pattern, path, is_server=False):
4242
try:
4343
path = Path(path).expanduser().resolve()
4444
cmd = subprocess.run(['eos', 'find', '-name', pattern, _eos_path(path)],
@@ -51,7 +51,7 @@ def eos_glob(pattern, path, is_server=True):
5151
log_error(f"Failed eos_glob {pattern} in {path}!\n", e, is_server=is_server)
5252
return []
5353

54-
def eos_exists(path, is_server=True):
54+
def eos_exists(path, is_server=False):
5555
try:
5656
path = Path(path).expanduser().resolve()
5757
cmd = subprocess.run(['eos', 'find', '-name', path.name, _eos_path(path.parent)],
@@ -63,7 +63,7 @@ def eos_exists(path, is_server=True):
6363
log_error(f"Failed eos_exists for {path}!\n", e, is_server=is_server)
6464
return False
6565

66-
def eos_rm(path, is_server=True):
66+
def eos_rm(path, is_server=False):
6767
try:
6868
path = Path(path).expanduser().resolve()
6969
cmd = subprocess.run(['eos', 'rm', _eos_path(path)], stdout=subprocess.PIPE, env=eos_env)
@@ -79,7 +79,7 @@ def eos_rm(path, is_server=True):
7979

8080

8181
# Always use this file by file, not for a list of files
82-
def cp_from_eos(source, target, maximum_trials=10, wait=2.7, is_server=True):
82+
def cp_from_eos(source, target, maximum_trials=10, wait=2.7, is_server=False):
8383
try:
8484
target = Path(target).expanduser().resolve()
8585
for i in range(maximum_trials):
@@ -101,13 +101,13 @@ def cp_from_eos(source, target, maximum_trials=10, wait=2.7, is_server=True):
101101
log_error(f"Failed to copy {str(source)} to {str(target)}!\n", e, is_server=is_server)
102102
return 1
103103

104-
def mv_from_eos(source, target, maximum_trials=10, wait=2.7, is_server=True):
104+
def mv_from_eos(source, target, maximum_trials=10, wait=2.7, is_server=False):
105105
if not cp_from_eos(source, target, maximum_trials, wait, is_server=is_server): # returncode 0 means success
106106
eos_rm(source, is_server=is_server)
107107

108108

109109
# Always use this file by file, not for a list of files
110-
def cp_to_eos(source, target, maximum_trials=10, wait=2.7, is_server=True):
110+
def cp_to_eos(source, target, maximum_trials=10, wait=2.7, is_server=False):
111111
try:
112112
source = Path(source).expanduser().resolve()
113113
target = Path(target, source.name).expanduser().resolve()
@@ -131,6 +131,6 @@ def cp_to_eos(source, target, maximum_trials=10, wait=2.7, is_server=True):
131131
log_error(f"Failed to copy {str(source)} to {str(target)}!\n", e, is_server=is_server)
132132
return 1
133133

134-
def mv_to_eos(source, target, maximum_trials=10, wait=2.7, is_server=True):
134+
def mv_to_eos(source, target, maximum_trials=10, wait=2.7, is_server=False):
135135
if not cp_to_eos(source, target, maximum_trials, wait, is_server=is_server): # returncode 0 means success
136136
source.unlink()

xboinc/server/paths.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
from pathlib import Path
77

88
eosdir = Path('/','eos','user','s','sixtadm','spooldirs','xtrack') # EOS spooldir for server
9-
dropdir = eosdir / 'drop' # only location where users have write access (i.e. to register)
9+
dropdir = eosdir / 'drop' # only location where users have write access (i.e. to register)

xboinc/server/tools.py

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
# Copyright (c) CERN, 2023. #
44
# ######################################### #
55

6-
import os, sys
76
from pathlib import Path
87
import logging as lg
98
import traceback
109
import tarfile
11-
import atexit
12-
import base64
1310
import datetime
1411

1512

@@ -19,56 +16,34 @@ def timestamp(ms=False):
1916
return datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S.%f")[:ms]
2017

2118

22-
def log_debug(message, is_server=True):
19+
def log_debug(message, is_server=False):
2320
if is_server:
2421
lg.debug(f"{timestamp(ms=True)}: {message}")
2522
else:
2623
print(message)
2724

28-
def log_info(message, is_server=True):
25+
def log_info(message, is_server=False):
2926
if is_server:
3027
lg.info(f"{timestamp(ms=True)}: {message}")
3128
else:
3229
print(message)
3330

34-
def log_error(message, e=None, is_server=True):
31+
def log_error(message, e=None, is_server=False):
3532
if is_server:
3633
stack = '' if e is None else f"\n{traceback.format_exc()}\n{e}"
3734
lg.error(f"{timestamp(ms=True)}: {message}{stack}")
3835
else:
3936
raise Exception(message, e)
4037

41-
42-
def ranID():
43-
ran = base64.urlsafe_b64encode(os.urandom(8)).decode('utf-8')
44-
return ''.join(c if c.isalnum() else 'X' for c in ran)
45-
46-
47-
def untar(filename):
38+
def untar(filename, is_server=False):
4839
try:
4940
filename = Path(filename)
5041
thisdir = filename.parent / filename.stem[:-4]
5142
thisdir.mkdir(parents=True, exist_ok=True)
5243
with tarfile.open(filename, 'r:gz') as fid:
5344
fid.extractall(path=thisdir)
5445
filename.unlink()
55-
log_debug(f"Extracted {filename}.")
46+
log_debug(f"Extracted {filename}.", is_server)
5647

5748
except Exception as e:
58-
log_error(f"Failed extracting {filename}", e)
59-
60-
61-
def lock(lockfile):
62-
lockfile = Path(lockfile)
63-
# Check if previous process still running
64-
if lockfile.exists():
65-
sys.exit(f"Previous {lockfile.name} script still active! Exiting...")
66-
else:
67-
# Otherwise register a lockfile
68-
lockfile.touch()
69-
def exit_handler():
70-
lockfile.unlink()
71-
atexit.register(exit_handler)
72-
73-
74-
49+
log_error(f"Failed extracting {filename}", e, is_server)

0 commit comments

Comments
 (0)