File size: 1,620 Bytes
5e88f62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import subprocess
from functools import lru_cache
from pathlib import Path


@lru_cache(None)
def __hostname():
    # env variables set up wrong on aimscdt2.dns.eng.ox.ac.uk
    # if 'HOST' in os.environ:
    #     return str(os.environ['HOST'])
    # if 'HOSTNAME' in os.environ:
    #     return str(os.environ['HOSTNAME'])
    # else:
    return str(subprocess.check_output('hostname', shell=True).decode().strip())


@lru_cache(None)
def user():
    if 'USER' in os.environ:
        return str(os.environ['USER'])
    else:
        return str(subprocess.check_output('whoami', shell=True).decode().strip())


def is_slurm():
    return 'SLURM_JOB_ID' in os.environ and os.environ['SLURM_JOB_NAME'] not in  ['zsh', 'bash']


def get_slurm_id():
    return os.environ.get('SLURM_JOB_ID', None)


def is_aims_machine():
    hostname = __hostname()
    return 'aims' in hostname


def is_vggdev_machine():
    hostname = __hostname()
    return 'vggdev' in hostname or 'vggdebug' in hostname


def can_fit_in_tmp(path):
    tmp_avail = int(str(subprocess.check_output(['/usr/bin/df', '-k', '--output=avail', str(os.environ['TMPDIR'])],
                                                close_fds=True).decode().strip()).split()[-1].strip()) * 1024
    path_size = int(Path(path).stat().st_size)
    print(f"{Path(path).name} size {path_size / 2 ** 30:.2f}GB vs {tmp_avail / 2 ** 30:.2f}GB")
    return path_size < tmp_avail


def check_user(username, partial=True):
    username = username.lower()
    run_user = user().lower()
    if partial:
        return username in run_user
    return username == run_user