HOME


Mini Shell 1.0
DIR: /opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/console_utils/
Upload File :
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/console_utils/run_smart_advice.py
# -*- 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/LICENSE.TXT

"""
This module contains X Ray Smart Advice local utility main run function
"""
import sys
import os

from xray.adviser.cli_api import SmartAdviceUtil
from xray.adviser.awp_provision_api import AWPProvisionAPI
from xray.console_utils.cmdline_parser import (
    cmd_parser_adviser,
    parse_cmd_arguments
)
from xray.console_utils.validations import validate_adviser
from xray.internal.constants import adviser_log
from xray.internal.exceptions import XRayError
from xray.internal.user_plugin_utils import root_execution_only_check
from xray.internal.utils import configure_logging
from xray.internal.user_plugin_utils import get_xray_exec_user

awp_provision_commands = ['awp-cdn-get-pullzone',
                          'awp-cdn-remove-pullzone',
                          'awp-cdn-purge',
                          'awp-sync',
                          'get-cdn-usage']

def run():
    """
    X Ray Smart Advice run function
    """
    root_execution_only_check()
    configure_logging(adviser_log)
    raw_args = parse_cmd_arguments(cmd_parser_adviser())
    args = validate_adviser(raw_args.__dict__)

    try:
        sa = SmartAdviceUtil()
        if args.command == 'list':
            result = sa.advice_list(extended=args.extends)
        elif args.command == 'sites-status':
            # because from user plugin UI it works via XRAYEXEC_UID envvar
            username = args.username or get_xray_exec_user()
            if not username:
                print('parameter --username must be specified')
                sys.exit(1)
            result = sa.get_site_statuses(username=username)
        elif args.command == 'details':
            result = sa.advice_details(args.advice_id)
        elif args.command == 'apply':
            result = sa.manage_advice('apply', args.advice_id,
                                      ignore_errors=args.ignore_errors,
                                      async_mode=args.async_mode,
                                      source=args.source,
                                      accept_terms=args.accept_license_terms,
                                      analytics_data=args.analytics_data)
        elif args.command == 'rollback':
            result = sa.manage_advice('rollback', args.advice_id,
                                      async_mode=args.async_mode,
                                      source=args.source,
                                      reason=args.reason,
                                      analytics_data=args.analytics_data)
        elif args.command == 'counters':
            result = sa.advice_counters()
        elif args.command == 'status':
            result = sa.manage_advice_status(args.advice_id)
        elif args.command == 'subscription':
            result = sa.create_subscription(args.advice_id)
        elif args.command == 'wordpress-plugin-install':
            result = sa.sync_advices_wordpress_plugin()
        elif args.command == 'agreement':
            result = sa.get_agreement_text(feature=args.text)
        elif args.command == 'get-options':
            username = args.username or get_xray_exec_user()
            if not username:
                print('parameter --username must be specified')
                sys.exit(1)
            result = sa.get_options(username=username)

        elif args.command in awp_provision_commands:

            awp_cli = AWPProvisionAPI()
            if not args.account_id and not args.username and not os.environ.get('XRAYEXEC_UID'):
                print('parameter --account_id or --username must be specified')
                sys.exit(1)

            original_url = ''
            # domain is required parameter for commands which needs original_url
            if hasattr(args, 'domain'):
                original_url = args.domain

            if original_url:
                from clwpos.constants import PULLZONE_DOMAIN_PROTOCOL
                if not original_url.startswith(PULLZONE_DOMAIN_PROTOCOL):
                    original_url = f'{PULLZONE_DOMAIN_PROTOCOL}{args.domain}'

            if args.command == 'awp-cdn-get-pullzone':
                result = awp_cli.get_pullzone(account_id=args.account_id, domain=original_url,
                                              website=args.website, username=args.username)
            elif args.command == 'awp-cdn-remove-pullzone':
                result = awp_cli.remove_pullzone(account_id=args.account_id, domain=original_url,
                                                 website=args.website, username=args.username)
            elif args.command == 'awp-cdn-purge':
                result = awp_cli.purge_cdn_cache(account_id=args.account_id, domain=original_url,
                                                 website=args.website, username=args.username)
            elif args.command == 'awp-sync':
                result = awp_cli.sync_account(args.account_id, username=args.username)
            elif args.command == 'get-cdn-usage':
                result = awp_cli.get_usage(args.account_id, username=args.username)
            else:
                raise SystemExit('Unknown action')

        else:
            raise SystemExit('Unknown action')
        if result:
            print(result)
    except XRayError as e:
        print(e)
        sys.exit(1)