# Copyright (c) Cloud Linux Software, Inc # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENCE.TXT import json import os import platform import socket import sys from . import constants from . import config from . import log_utils from . import utils from . import process_utils from . import selinux VIRTWHAT = '/usr/libexec/kcare/virt-what' def get_distro(): if sys.version_info[:2] < (3, 6): # pragma: no py3 cover return platform.linux_distribution() else: # pragma: no distro cover import distro return distro.linux_distribution(full_distribution_name=False) @utils.cached def get_system_uname(): return platform.uname()[2] def get_python_version(): # type: () -> str return '%s.%s' % (sys.version_info[0], sys.version_info[1]) def app_info(is_json=False): # type: (bool) -> str info = { 'python_version': get_python_version(), 'agent_version': constants.VERSION, } if selinux.is_selinux_enabled(): rc, stdout, stderr = process_utils.run_command(['ps', '-Z', '--no-headers', '--pid', str(os.getpid())], catch_stdout=True) if not rc: selinux_context = stdout.split()[0] else: selinux_context = 'error: %s' % stderr info['selinux_context'] = selinux_context if is_json: return json.dumps(info) info_keys = sorted(info) info_str = '' for info_key in info_keys: info_str += '%s: %s\n' % (info_key, info[info_key]) return info_str.rstrip() def is_secure_boot(): # mocked: tests/unit/test_load_kmod.py # type: () -> bool efivars_location = "/sys/firmware/efi/efivars/" if not os.path.exists(efivars_location): return False for filename in os.listdir(efivars_location): if filename.startswith('SecureBoot'): varfile = os.path.join(efivars_location, filename) # Get last byte with open(varfile, 'rb') as vfd: return vfd.read()[-1:] == b'\x01' return False @utils.cached def get_hostname(): # type: () -> str # KCARE-1165 If fqdn gathering is forced if config.REPORT_FQDN: try: # getaddrinfo() -> [(family, socktypeget_hostname, proto, canonname, sockaddr), ...] hostname = socket.getaddrinfo(socket.gethostname(), 0, 0, 0, 0, socket.AI_CANONNAME)[0][3] except socket.gaierror as ge: log_utils.logerror(ge) hostname = platform.node() else: hostname = platform.node() return hostname @utils.cached def get_uptime(): # type: () -> str if os.path.isfile('/proc/uptime'): f = open('/proc/uptime', 'r') line = f.readline() result = str(int(float(line.split()[0]))) f.close() return result return '-1' @utils.cached def get_virt(): if os.path.isfile(VIRTWHAT): return process_utils.check_output([VIRTWHAT]).strip() return 'no-virt-what' # pragma: no cover def is_cpanel(): return os.path.isfile('/usr/local/cpanel/cpanel') def inside_vz_container(): # mocked: tests/unit/test_load_kmod.py return os.path.exists('/proc/vz/veinfo') and not os.path.exists('/proc/vz/version') def inside_lxc_container(): # mocked: tests/unit/test_load_kmod.py return '/lxc/' in open('/proc/1/cgroup').read() def inside_docker_container(): # mocked: tests/unit/test_load_kmod.py return os.path.isfile('/.dockerenv')
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__init__.py | File | 69.58 KB | 0644 |
|
__init__.pyc | File | 64.25 KB | 0644 |
|
__init__.pyo | File | 64.25 KB | 0644 |
|
__main__.py | File | 829 B | 0644 |
|
__main__.pyc | File | 926 B | 0644 |
|
__main__.pyo | File | 926 B | 0644 |
|
auth.py | File | 11.87 KB | 0644 |
|
auth.pyc | File | 11.82 KB | 0644 |
|
auth.pyo | File | 11.82 KB | 0644 |
|
config.py | File | 1.71 KB | 0644 |
|
config.pyc | File | 2.01 KB | 0644 |
|
config.pyo | File | 2.01 KB | 0644 |
|
config_handlers.py | File | 7.26 KB | 0644 |
|
config_handlers.pyc | File | 8.47 KB | 0644 |
|
config_handlers.pyo | File | 8.47 KB | 0644 |
|
constants.py | File | 1.27 KB | 0644 |
|
constants.pyc | File | 1.34 KB | 0644 |
|
constants.pyo | File | 1.34 KB | 0644 |
|
errors.py | File | 1.29 KB | 0644 |
|
errors.pyc | File | 2.94 KB | 0644 |
|
errors.pyo | File | 2.94 KB | 0644 |
|
fetch.py | File | 4.88 KB | 0644 |
|
fetch.pyc | File | 5.47 KB | 0644 |
|
fetch.pyo | File | 5.47 KB | 0644 |
|
http_utils.py | File | 4.06 KB | 0644 |
|
http_utils.pyc | File | 4.16 KB | 0644 |
|
http_utils.pyo | File | 4.16 KB | 0644 |
|
kcare.py | File | 8.56 KB | 0644 |
|
kcare.pyc | File | 11.09 KB | 0644 |
|
kcare.pyo | File | 11.09 KB | 0644 |
|
libcare.py | File | 17.24 KB | 0644 |
|
libcare.pyc | File | 19.16 KB | 0644 |
|
libcare.pyo | File | 19.16 KB | 0644 |
|
log_utils.py | File | 2.82 KB | 0644 |
|
log_utils.pyc | File | 3.75 KB | 0644 |
|
log_utils.pyo | File | 3.75 KB | 0644 |
|
platform_utils.py | File | 3.4 KB | 0644 |
|
platform_utils.pyc | File | 4.56 KB | 0644 |
|
platform_utils.pyo | File | 4.56 KB | 0644 |
|
process_utils.py | File | 3.81 KB | 0644 |
|
process_utils.pyc | File | 3.67 KB | 0644 |
|
process_utils.pyo | File | 3.67 KB | 0644 |
|
py23.py | File | 1.74 KB | 0644 |
|
py23.pyc | File | 2.15 KB | 0644 |
|
py23.pyo | File | 2.15 KB | 0644 |
|
selinux.py | File | 1.68 KB | 0644 |
|
selinux.pyc | File | 2.43 KB | 0644 |
|
selinux.pyo | File | 2.43 KB | 0644 |
|
server_info.py | File | 2.99 KB | 0644 |
|
server_info.pyc | File | 3.48 KB | 0644 |
|
server_info.pyo | File | 3.48 KB | 0644 |
|
update_utils.py | File | 923 B | 0644 |
|
update_utils.pyc | File | 1.18 KB | 0644 |
|
update_utils.pyo | File | 1.18 KB | 0644 |
|
utils.py | File | 7.07 KB | 0644 |
|
utils.pyc | File | 7.8 KB | 0644 |
|
utils.pyo | File | 7.8 KB | 0644 |
|