Mini Shell
Direktori : /sbin/ |
|
Current File : //sbin/clwpos_collect_information.py |
#!/opt/cloudlinux/venv/bin/python3 -sbb
# 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
#
import json
import argparse
import os
import logging
from clwpos.logsetup import setup_logging, init_wpos_sentry_safely
from clwpos.feature_suites import (
get_allowed_modules,
get_admin_config_directory,
get_admin_config_permissions,
)
from clwpos.utils import acquire_lock, get_pw, is_wpos_supported
from clwpos.cl_wpos_exceptions import WposError
from clwpos.daemon import WposDaemon
from clcommon.cpapi import cpusers, get_installed_php_versions, get_domains_php_info
from clcommon.clcagefs import _remount_cagefs
_logger = setup_logging(
caller_name='collect_information',
file_level=logging.INFO,
logfile_path='/var/log/clwpos/collect_information.log',
)
def php_get_vhost_versions(target_users, php_data_per_vhosts):
"""
@return: [
{
"account": "rm3",
"documentroot": "/home/example/public_html",
"version": "ea-php72",
"handler": "php-fpm",
"vhost": "otherchars.rm3.tld"
}
]
or empty list if command fails somehow
"""
try:
return WposDaemon._php_get_vhost_versions(account=target_users,
logger=_logger,
php_vhost_data=php_data_per_vhosts)
except Exception as e:
raise WposError(e)
def collect_info(target_users, set_php_version_per_vhosts, installed_versions, is_force):
for username in target_users:
try:
pw = get_pw(username=username)
except KeyError:
_logger.warning("Non-existing user passed: %s", username)
continue
if not get_allowed_modules(pw.pw_uid) and not is_force:
# no features allowed for user, skipping user
continue
try:
final_vhost_versions = php_get_vhost_versions(target_users=username,
php_data_per_vhosts=set_php_version_per_vhosts)
except WposError as e:
_logger.exception("No vhosts collected due to: %s", e)
final_vhost_versions = list()
_logger.info("Final PHP versions per vhost: %s", str(final_vhost_versions))
try:
admin_config_dir = get_admin_config_directory(pw.pw_uid)
info_json = os.path.join(admin_config_dir, "info.json")
try:
os.makedirs(admin_config_dir, 0o755, exist_ok=False)
except OSError:
pass
else:
# this won't happen a lot of time because usually we create this dir as part of set-suite command
_remount_cagefs(username)
with open(info_json, "w") as f:
json.dump(
{"installed_versions": installed_versions,
"vhost_versions": final_vhost_versions},
f,
)
owner, group, mode = get_admin_config_permissions(pw.pw_gid)
os.chown(info_json, owner, group)
os.chmod(info_json, mode)
except Exception as e:
_logger.exception("Error during collecting information for %s: %s", username, e)
continue
if __name__ == '__main__' and is_wpos_supported():
with acquire_lock(os.path.join('/var/run/collect_information.lock',), attempts=None):
parser = argparse.ArgumentParser(description="Utility to collect information about user for AccelerateWP")
parser.add_argument("user", type=str, nargs="?")
parser.add_argument("--force", default=False, action='store_true')
args = parser.parse_args()
init_wpos_sentry_safely()
if args.user is not None:
target_users = [args.user]
else:
target_users = cpusers()
_logger.info("Collection of PHP versions started for user(s): %s", str(target_users))
installed_versions = get_installed_php_versions()
_logger.info("Installed PHP versions: %s", str(installed_versions))
set_php_versions_per_vhost = get_domains_php_info()
_logger.info("PHP versions setup per vhosts: %s", str(set_php_versions_per_vhost))
collect_info(target_users, set_php_versions_per_vhost, installed_versions, is_force=args.force)
_logger.info('Information was collected for user(s): %s', str(target_users))
Zerion Mini Shell 1.0