"""EEInfo Plugin for EasyEngine.""" from cement.core.controller import CementBaseController, expose from cement.core import handler, hook from pynginxconfig import NginxConfig from ee.core.aptget import EEAptGet from ee.core.shellexec import EEShellExec from ee.core.logging import Log import os import configparser def info_plugin_hook(app): # do something with the ``app`` object here. pass class EEInfoController(CementBaseController): class Meta: label = 'info' stacked_on = 'base' stacked_type = 'nested' description = ('Display configuration information related to Nginx,' ' PHP and MySQL') arguments = [ (['--mysql'], dict(help='Get MySQL configuration information', action='store_true')), (['--php'], dict(help='Get PHP configuration information', action='store_true')), (['--nginx'], dict(help='Get Nginx configuration information', action='store_true')), ] @expose(hide=True) def info_nginx(self): """Display Nginx information""" version = os.popen("nginx -v 2>&1 | cut -d':' -f2 | cut -d' ' -f2 | " "cut -d'/' -f2 | tr -d '\n'").read() allow = os.popen("grep ^allow /etc/nginx/common/acl.conf | " "cut -d' ' -f2 | cut -d';' -f1 | tr '\n' ' '").read() nc = NginxConfig() nc.loadf('/etc/nginx/nginx.conf') user = nc.get('user')[1] worker_processes = nc.get('worker_processes')[1] worker_connections = nc.get([('events',), 'worker_connections'])[1] keepalive_timeout = nc.get([('http',), 'keepalive_timeout'])[1] if os.path.isfile('/etc/nginx/conf.d/ee-nginx.conf'): nc.loadf('/etc/nginx/conf.d/ee-nginx.conf') fastcgi_read_timeout = nc.get('fastcgi_read_timeout')[1] client_max_body_size = nc.get('client_max_body_size')[1] else: fastcgi_read_timeout = nc.get([('http',), 'fastcgi_read_timeout'])[1] client_max_body_size = nc.get([('http',), 'client_max_body_size'])[1] data = dict(version=version, allow=allow, user=user, worker_processes=worker_processes, keepalive_timeout=keepalive_timeout, worker_connections=worker_connections, fastcgi_read_timeout=fastcgi_read_timeout, client_max_body_size=client_max_body_size) self.app.render((data), 'info_nginx.mustache') @expose(hide=True) def info_php(self): """Display PHP information""" version = os.popen("php -v | head -n1 | cut -d' ' -f2 |" " cut -d'+' -f1 | tr -d '\n'").read config = configparser.ConfigParser() config.read('/etc/php5/fpm/php.ini') expose_php = config['PHP']['expose_php'] memory_limit = config['PHP']['memory_limit'] post_max_size = config['PHP']['post_max_size'] upload_max_filesize = config['PHP']['upload_max_filesize'] max_execution_time = config['PHP']['max_execution_time'] config.read('/etc/php5/fpm/pool.d/www.conf') www_listen = config['www']['listen'] www_ping_path = config['www']['ping.path'] www_pm_status_path = config['www']['pm.status_path'] www_pm = config['www']['pm'] www_pm_max_requests = config['www']['pm.max_requests'] www_pm_max_children = config['www']['pm.max_children'] www_pm_start_servers = config['www']['pm.start_servers'] www_pm_min_spare_servers = config['www']['pm.min_spare_servers'] www_pm_max_spare_servers = config['www']['pm.max_spare_servers'] www_request_terminate_time = (config['www'] ['request_terminate_timeout']) try: www_xdebug = (config['www']['php_admin_flag[xdebug.profiler_enable' '_trigger]']) except Exception as e: www_xdebug = 'off' config.read('/etc/php5/fpm/pool.d/debug.conf') debug_listen = config['debug']['listen'] debug_ping_path = config['debug']['ping.path'] debug_pm_status_path = config['debug']['pm.status_path'] debug_pm = config['debug']['pm'] debug_pm_max_requests = config['debug']['pm.max_requests'] debug_pm_max_children = config['debug']['pm.max_children'] debug_pm_start_servers = config['debug']['pm.start_servers'] debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers'] debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers'] debug_request_terminate = (config['debug'] ['request_terminate_timeout']) try: debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_' 'enable_trigger]']) except Exception as e: debug_xdebug = 'off' data = dict(version=version, expose_php=expose_php, memory_limit=memory_limit, post_max_size=post_max_size, upload_max_filesize=upload_max_filesize, max_execution_time=max_execution_time, www_listen=www_listen, www_ping_path=www_ping_path, www_pm_status_path=www_pm_status_path, www_pm=www_pm, www_pm_max_requests=www_pm_max_requests, www_pm_max_children=www_pm_max_children, www_pm_start_servers=www_pm_start_servers, www_pm_min_spare_servers=www_pm_min_spare_servers, www_pm_max_spare_servers=www_pm_max_spare_servers, www_request_terminate_timeout=www_request_terminate_time, www_xdebug_profiler_enable_trigger=www_xdebug, debug_listen=debug_listen, debug_ping_path=debug_ping_path, debug_pm_status_path=debug_pm_status_path, debug_pm=debug_pm, debug_pm_max_requests=debug_pm_max_requests, debug_pm_max_children=debug_pm_max_children, debug_pm_start_servers=debug_pm_start_servers, debug_pm_min_spare_servers=debug_pm_min_spare_servers, debug_pm_max_spare_servers=debug_pm_max_spare_servers, debug_request_terminate_timeout=debug_request_terminate, debug_xdebug_profiler_enable_trigger=debug_xdebug) self.app.render((data), 'info_php.mustache') @expose(hide=True) def info_mysql(self): """Display MySQL information""" version = os.popen("mysql -V | awk '{print($5)}' | cut -d ',' " "-f1 | tr -d '\n'").read() host = "localhost" port = os.popen("mysql -e \"show variables\" | grep ^port | awk " "'{print($2)}' | tr -d '\n'").read() wait_timeout = os.popen("mysql -e \"show variables\" | grep " "^wait_timeout | awk '{print($2)}' | " "tr -d '\n'").read() interactive_timeout = os.popen("mysql -e \"show variables\" | grep " "^interactive_timeout | awk " "'{print($2)}' | tr -d '\n'").read() max_used_connections = os.popen("mysql -e \"show global status\" | " "grep Max_used_connections | awk " "'{print($2)}' | tr -d '\n'").read() datadir = os.popen("mysql -e \"show variables\" | grep datadir | awk" " '{print($2)}' | tr -d '\n'").read() socket = os.popen("mysql -e \"show variables\" | grep \"^socket\" | " "awk '{print($2)}' | tr -d '\n'").read() data = dict(version=version, host=host, port=port, wait_timeout=wait_timeout, interactive_timeout=interactive_timeout, max_used_connections=max_used_connections, datadir=datadir, socket=socket) self.app.render((data), 'info_mysql.mustache') @expose(hide=True) def default(self): """default function for info""" if (not self.app.pargs.nginx and not self.app.pargs.php and not self.app.pargs.mysql): self.app.pargs.nginx = True self.app.pargs.php = True self.app.pargs.mysql = True if self.app.pargs.nginx: if EEAptGet.is_installed(self, 'nginx-common'): self.info_nginx() else: Log.error(self, "Nginx is not installed") if self.app.pargs.php: if EEAptGet.is_installed(self, 'php5-fpm'): self.info_php() else: Log.error(self, "PHP5 is not installed") if self.app.pargs.mysql: if EEShellExec.cmd_exec(self, "mysqladmin ping"): self.info_mysql() else: Log.error(self, "MySQL is not installed") def load(app): # register the plugin class.. this only happens if the plugin is enabled handler.register(EEInfoController) # register a hook (function) to run after arguments are parsed. hook.register('post_argument_parsing', info_plugin_hook)