File: //sbin/cloudlinux-xray
#!/opt/alt/python37/bin/python3 -sbb
# coding:utf-8
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2020 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import getopt
import sys
import os
import subprocess
import time
import json
from enum import Enum
from clcommon.utils import is_nginx_running
class State(Enum):
INSTALLED = 'installed'
INSTALLING = 'installing'
NOT_INSTALLED = 'not_installed'
PACKAGE_NAME = 'lvemanager-xray'
PACKAGE_PATH = '/usr/sbin/cloudlinux-xray-manager'
PACKAGE_INSTALL_ERROR_LOG = '/var/log/xray_install_error.log'
def install_package():
command = 'yum install -y {}'.format(PACKAGE_NAME)
logger = open(PACKAGE_INSTALL_ERROR_LOG, 'w')
subprocess.Popen(command,
stdin=open(os.devnull, 'w'),
stdout=logger,
stderr=logger,
shell=True,
executable='/bin/bash')
return State.INSTALLING
def check_package_installed():
if check_status() == State.INSTALLING:
return State.INSTALLING
else:
return State.INSTALLED if os.path.isfile(PACKAGE_PATH) else State.NOT_INSTALLED
def check_status():
command = ['/bin/bash',
'-c', '/bin/ps aux | grep "[y]um install -y {}"'.format(PACKAGE_NAME)]
try:
subprocess.check_output(command, stderr=subprocess.STDOUT, text=True)
return State.INSTALLING
except subprocess.CalledProcessError:
pass
def get_log():
with open(PACKAGE_INSTALL_ERROR_LOG, 'r') as file:
return file.read()
def usage():
print("usage: {} {{-h|-i|-c}}\n".format(sys.argv[0]),
"where:\n"
"\t-h, --help: show help message\n"
"\t-i, --install: install {} package\n".format(PACKAGE_NAME),
"\t-c, --check: check status of {} package\n".format(PACKAGE_NAME),
"\t-l, --log: print the log file of {} package\n".format(PACKAGE_NAME))
exit(2)
if __name__ == '__main__':
opts = []
result = None
try:
opts, args = getopt.getopt(sys.argv[1:], 'icl', ['install', 'check', 'log'])
except getopt.GetoptError as err:
usage()
if not len(opts):
usage()
try:
for o, a in opts:
if o in ('-h', '--help'):
usage()
elif o in ('-i', '--install'):
result = install_package().value
elif o in ('-c', '--check'):
result = check_package_installed().value
elif o in ('-l', '--log'):
result = get_log()
print(json.dumps({"result": "success",
"timestamp": time.time(),
"response": result,
"is_nginx_running": is_nginx_running()}))
except Exception as error:
print(json.dumps({"result": "error", "timestamp": time.time(), "response": str(error)}))
sys.exit(0)