From 5e65ee6d1b9fbaebd8de69e20993238e1c166c34 Mon Sep 17 00:00:00 2001 From: gau1991 Date: Wed, 31 Dec 2014 19:25:20 +0530 Subject: [PATCH 1/7] Added FPM debug --- ee/cli/plugins/debug.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py index 3572501d..231ace39 100644 --- a/ee/cli/plugins/debug.py +++ b/ee/cli/plugins/debug.py @@ -84,7 +84,7 @@ class EEDebugController(CementBaseController): ee_nginx = open('/etc/nginx/conf.d/upstream.conf', 'w') self.app.render((data), 'upstream.mustache', out=ee_nginx) ee_nginx.close() - + self.trigger_php = True else: print("PHP debug is allready enabled") else: @@ -98,15 +98,32 @@ class EEDebugController(CementBaseController): ee_nginx = open('/etc/nginx/conf.d/upstream.conf', 'w') self.app.render((data), 'upstream.mustache', out=ee_nginx) ee_nginx.close() + self.trigger_php = True else: print("PHP debug is allready disbaled") @expose(hide=True) def debug_fpm(self): if self.start: - print("Start FPM debug") + if not EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " + "/etc/php5/fpm/php-fpm.conf"): + print("Setting up PHP5-FPM log_level = debug") + EEShellExec.cmd_exec(self, "sed -i \"s\';log_level.*\'log_" + "level = debug\'\" /etc/php5/fpm" + "/php-fpm.conf") + self.trigger_php = True + else: + print("PHP5-FPM log_level = debug already setup") else: - print("Stop FPM debug") + if EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " + "/etc/php5/fpm/php-fpm.conf"): + print("Disabling PHP5-FPM log_level = debug") + EEShellExec.cmd_exec(self, "sed -i \"s\'log_level.*\';log_" + "level = notice\'\" /etc/php5/fpm" + "/php-fpm.conf") + self.trigger_php = True + else: + print("PHP5-FPM log_level = debug already disabled") @expose(hide=True) def debug_mysql(self): From de8d0f6c16b4e7f4b9ef417fc23b1de086c55c79 Mon Sep 17 00:00:00 2001 From: gau1991 Date: Fri, 2 Jan 2015 16:55:57 +0530 Subject: [PATCH 2/7] Added MySQL debug --- ee/cli/plugins/debug.py | 44 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py index 231ace39..2a9d988e 100644 --- a/ee/cli/plugins/debug.py +++ b/ee/cli/plugins/debug.py @@ -3,6 +3,7 @@ from cement.core.controller import CementBaseController, expose from cement.core import handler, hook from ee.core.shellexec import EEShellExec +from ee.core.mysql import EEMysql def debug_plugin_hook(app): @@ -35,6 +36,9 @@ class EEDebugController(CementBaseController): dict(help='Debug Nginx rewrite rules', action='store_true')), (['-i', '--interactive'], dict(help='Interactive debug', action='store_true')), + (['--import-slow-log-interval'], + dict(help='Import MySQL slow log to Anemometer', + action='store', dest='interval')), ] @expose(hide=True) @@ -128,9 +132,45 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_mysql(self): if self.start: - print("Start MySQL debug") + if not EEShellExec.cmd_exec(self, "mysql -e \"show variables like" + " \'slow_query_log\';\" | " + "grep ON"): + print("Setting up MySQL slow log") + EEMysql.execute(self, "set global slow_query_log = " + "\'ON\';") + EEMysql.execute(self, "set global slow_query_log_file = " + "\'/var/log/mysql/mysql-slow.log\';") + EEMysql.execute(self, "set global long_query_time = 2;") + EEMysql.execute(self, "set global log_queries_not_using" + "_indexes = \'ON\';") + if self.app.pargs.interval: + try: + cron_time = int(self.app.pargs.interval) + except Exception as e: + cron_time = 5 + EEShellExec.cmd_exec(self, "/bin/bash -c \"crontab -l 2> " + "/dev/null | {{ cat; echo -e" + " \\\"#EasyEngine start MySQL slow" + " log \\n*/{0} * * * * " + "/usr/local/sbin/ee import-slow-log\\" + "n#EasyEngine end MySQL slow log\\\";" + " }} | crontab -\"".format(cron_time)) + else: + print("MySQL slow log is allready enabled") else: - print("Stop MySQL debug") + if EEShellExec.cmd_exec(self, "mysql -e \"show variables like \'" + "slow_query_log\';\" | grep ON"): + print("Disabling MySQL slow log") + EEMysql.execute(self, "set global slow_query_log = \'OFF\';") + EEMysql.execute(self, "set global slow_query_log_file = \'" + "/var/log/mysql/mysql-slow.log\';") + EEMysql.execute(self, "set global long_query_time = 10;") + EEMysql.execute(self, "set global log_queries_not_using_index" + "es = \'OFF\';") + EEShellExec.cmd_exec(self, "crontab -l | sed \'/#EasyEngine " + "start/,/#EasyEngine end/d\' | crontab -") + else: + print("MySQL slow log already disabled") @expose(hide=True) def debug_wp(self): From 0ec933e37ddbc4b25ff5a6934273c56e655fa93a Mon Sep 17 00:00:00 2001 From: gau1991 Date: Fri, 2 Jan 2015 18:40:27 +0530 Subject: [PATCH 3/7] Added optional site name is argument and completed all ee debug arguments --- ee/cli/plugins/debug.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py index 2a9d988e..5e824ea6 100644 --- a/ee/cli/plugins/debug.py +++ b/ee/cli/plugins/debug.py @@ -39,12 +39,14 @@ class EEDebugController(CementBaseController): (['--import-slow-log-interval'], dict(help='Import MySQL slow log to Anemometer', action='store', dest='interval')), + (['site_name'], + dict(help='Website Name', nargs='?', default=None)) ] @expose(hide=True) def debug_nginx(self): self.trigger_nginx = False - if self.start: + if self.start and not self.app.pargs.site_name: try: debug_address = (self.app.config.get('stack', 'ip-address') .split()) @@ -65,7 +67,7 @@ class EEDebugController(CementBaseController): self.msg = self.msg + " /var/log/nginx/*.error.log" - else: + elif not self.start and not self.app.pargs.site_name: if "debug_connection " in open('/etc/nginx/nginx.conf').read(): print("Disabling Nginx debug connections") EEShellExec.cmd_exec(self, "sed -i \"/debug_connection.*/d\"" @@ -74,6 +76,12 @@ class EEDebugController(CementBaseController): else: print("Nginx debug connection already disbaled") + elif self.start and self.app.pargs.site_name: + print("Enabling debug for "+self.app.pargs.site_name) + + elif not self.start and self.app.pargs.site_name: + print("Disabling debug for "+self.app.pargs.site_name) + @expose(hide=True) def debug_php(self): if self.start: @@ -174,23 +182,30 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_wp(self): - if self.start: - print("Start WP debug") + if self.start and self.app.pargs.site_name: + print("Start WP debug for site") + elif not self.start and not self.app.pargs.site_name: + print("Stop WP debug for site") else: - print("Stop WP debug") + print("Missing argument site_name") @expose(hide=True) def debug_rewrite(self): - if self.start: - print("Start WP-Rewrite debug") - else: - print("Stop WP-Rewrite debug") + if self.start and not self.app.pargs.site_name: + print("Start WP-Rewrite debug globally") + elif self.start and not self.app.pargs.site_name: + print("Stop WP-Rewrite debug globally") + elif self.start and self.app.pargs.site_name: + print("Start WP-Rewrite for site") + elif not self.start and not self.app.pargs.site_name: + print("Stop WP-Rewrite for site") @expose(hide=True) def default(self): self.start = True self.interactive = False self.msg = "" + print(self.app.pargs.site_name) if self.app.pargs.stop: self.start = False From fdc5efbc818e045a22c410527c702132e414774d Mon Sep 17 00:00:00 2001 From: harshadyeola Date: Fri, 2 Jan 2015 19:40:04 +0530 Subject: [PATCH 4/7] ee woordpress setup module done --- ee/cli/plugins/site.py | 45 ++++++++++++------ ee/cli/plugins/site_functions.py | 81 ++++++++++++++++++++++++++++++++ ee/core/fileutils.py | 25 ++++++++++ 3 files changed, 136 insertions(+), 15 deletions(-) diff --git a/ee/cli/plugins/site.py b/ee/cli/plugins/site.py index 0487b720..baa6fa33 100644 --- a/ee/cli/plugins/site.py +++ b/ee/cli/plugins/site.py @@ -131,7 +131,8 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=True, basic=False, wp=False, w3tc=False, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.php and not (self.app.pargs.html or self.app.pargs.mysql or self.app.pargs.wp or self.app.pargs.w3tc @@ -140,7 +141,8 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=False, basic=True, wp=False, w3tc=False, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.mysql and not (self.app.pargs.html or self.app.pargs.php or self.app.pargs.wp or self.app.pargs.w3tc @@ -149,7 +151,8 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=False, basic=True, wp=False, w3tc=False, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if ((self.app.pargs.wp or self.app.pargs.w3tc or self.app.pargs.wpfc or self.app.pargs.wpsc) and not (self.app.pargs.html or @@ -160,25 +163,29 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=False, basic=True, wp=True, w3tc=False, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.w3tc and not (self.app.pargs.wpfc or self.app.pargs.wpsc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=True, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpfc and not (self.app.pargs.wpsc or self.app.pargs.w3tc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=False, wpfc=True, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpsc and not (self.app.pargs.w3tc or self.app.pargs.wpfc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=False, wpfc=False, wpsc=True, multisite=False, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpsubdir and not (self.app.pargs.html or self.app.pargs.php or self.app.pargs.mysql or @@ -188,25 +195,29 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=False, basic=True, wp=True, w3tc=False, wpfc=False, wpsc=False, multisite=True, - wpsubdir=True, webroot=ee_site_webroot) + wpsubdir=True, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.w3tc and not (self.app.pargs.wpfc or self.app.pargs.wpsc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=True, wpfc=False, wpsc=False, multisite=True, - wpsubdir=True, webroot=ee_site_webroot) + wpsubdir=True, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpfc and not (self.app.pargs.wpsc or self.app.pargs.w3tc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=False, wpfc=True, wpsc=False, multisite=True, - wpsubdir=True, webroot=ee_site_webroot) + wpsubdir=True, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpsc and not (self.app.pargs.w3tc or self.app.pargs.wpfc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=False, wpfc=False, wpsc=True, multisite=True, - wpsubdir=True, webroot=ee_site_webroot) + wpsubdir=True, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpsubdomain and not (self.app.pargs.html or self.app.pargs.php or self.app.pargs.mysql or @@ -216,25 +227,29 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=False, basic=True, wp=True, w3tc=False, wpfc=False, wpsc=False, multisite=True, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.w3tc and not (self.app.pargs.wpfc or self.app.pargs.wpsc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=True, wpfc=False, wpsc=False, multisite=True, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpfc and not (self.app.pargs.wpsc or self.app.pargs.w3tc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=False, wpfc=True, wpsc=False, multisite=True, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') if (self.app.pargs.wpsc and not (self.app.pargs.w3tc or self.app.pargs.wpfc)): data = dict(site_name=ee_domain_name, static=False, basic=False, wp=True, w3tc=False, wpfc=False, wpsc=True, multisite=True, - wpsubdir=False, webroot=ee_site_webroot) + wpsubdir=False, webroot=ee_site_webroot, + ee_db_name='', ee_db_user='', ee_db_pass='') setup_domain(self, data) setup_database(self, data) diff --git a/ee/cli/plugins/site_functions.py b/ee/cli/plugins/site_functions.py index 881b488c..9a5573ca 100644 --- a/ee/cli/plugins/site_functions.py +++ b/ee/cli/plugins/site_functions.py @@ -5,6 +5,7 @@ import sys import getpass from ee.core.fileutils import EEFileUtils from ee.core.mysql import EEMysql +from ee.core.shellexec import EEShellExec def setup_domain(self, data): @@ -110,3 +111,83 @@ def setup_database(self, data): EEMysql.execute(self, "grant all privileges on \'{0}\'.* to \'{1}\'@\'{2}\'" .format(ee_db_name, ee_db_username, ee_db_password)) + + +def setup_wordpress(data): + ee_domain_name = data['site_name'] + ee_site_webroot = data['webroot'] + prompt_wpprefix = self.app.config.get('wordpress', 'prefix') + ee_wp_user = self.app.config.get('wordpress', 'user') + ee_wp_pass = self.app.config.get('wordpress', 'password') + ee_wp_email = self.app.config.get('wordpress', 'email') + # Random characters + ee_random = (''.join(random.sample(string.ascii_uppercase + + string.ascii_lowercase + string.digits, 15))) + print("Downloading Wordpress, please wait...") + EEShellExec.cmd_exec(self, "wp --allow-root core download" + "--path={0}/htdocs/".format(ee_site_webroot)) + + setup_database(self, data) + if prompt_wpprefix == 'True': + ee_wp_prefix = input('Enter the WordPress table prefix [wp_]: ' + .format(ee_replace_dot)) + while re.match('^[A-Za-z0-9_]*$', ee_wp_prefix): + print("Warning: table prefix can only contain numbers, letters," + "and underscores") + ee_wp_prefix = input('Enter the WordPress table prefix [wp_]: ') + if not ee_wp_prefix: + ee_wp_prefix = 'wp_' + + # Modify wp-config.php & move outside the webroot + '''EEFileUtils.copyfile(self, + '{0}/htdocs/wp-config-sample.php' + .format(ee_site_webroot), + '{0}/wp-config.php'.format(ee_site_webroot)) + EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), + 'database_name_here', '') + EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), + 'database_name_here', '') + EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), + 'username_here', '') + EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), + 'password_here', '') + EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), + 'localhost', '') + EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), + 'wp_', '')''' + + EEShellExec.cmd_exec(self, "wp --allow-root core config" + "--dbname={0} --dbprefix={1}" + .format(ee_db_name, ee_wp_prefix) + "--dbuser={2} --dbprefix={3}" + .format(ee_db_user, ee_db_password)) + + EEFileUtils.mvfile('./wp-config.php', '../') + + # TODO code for salts here + if not ee_wp_user: + ee_wp_user = EEVariables.ee_user + while not ee_wp_user: + print("Warning: Usernames can have only alphanumeric" + "characters, spaces, underscores, hyphens," + "periods and the @ symbol.") + ee_wp_user = input('Enter WordPress username: ') + + if not ee_wp_pass: + ee_wp_pass = ee_random + + if not ee_wp_email: + ee_wp_email = EEVariables.ee_email + while not ee_wp_email: + ee_wp_email = input('Enter WordPress email: ') + + print("Setting up WordPress, please wait...") + EEShellExec.cmd_exec(self, "wp --allow-root core install" + "--url=www.{0} --title=www.{0} --admin_name={1}" + .format(ee_domain_name, ee_wp_user) + "--admin_password={0} --admin_email={1}" + .format(ee_wp_pass, ee_wp_email)) + + print("Updating WordPress permalink, please wait...") + EEShellExec.cmd_exec("wp rewrite structure --allow-root" + "/%year%/%monthnum%/%day%/%postname%/") diff --git a/ee/core/fileutils.py b/ee/core/fileutils.py index c93edab2..8b0c9aaf 100644 --- a/ee/core/fileutils.py +++ b/ee/core/fileutils.py @@ -3,6 +3,8 @@ import shutil import os import sys import glob +import shutil +import fileinput class EEFileUtils(): @@ -46,3 +48,26 @@ class EEFileUtils(): self.app.log.error("Unable to reomove symbolic link ...\n {0} {1}" .format(e.errno, e.strerror)) sys.exit(1) + + def copyfile(self, src, dst): + try: + shutil.copy2(src, dest) + except shutil.Error as e: + print('Error: {0}'.format(e)) + except IOError as e: + print('Error: {e}'.format(e.strerror)) + + def searchreplace(self, fnm, sstr, rstr): + try: + for line in fileinput.input(fnm, inplace=True): + print(line.replace(textToSearch, textToReplace), end='') + except Exception as e: + print('Error : {0}'.format(e)) + + def mvfile(self, src, dst): + try: + shutil.move(src, dst) + except shutil.Error as e: + self.app.log.error('Unable to move file {err}' + .format(err=str(e.reason))) + sys.exit(1) From 2c5e602b92cad4b91e2addf37626145cf56906e1 Mon Sep 17 00:00:00 2001 From: gau1991 Date: Mon, 5 Jan 2015 15:28:39 +0530 Subject: [PATCH 5/7] Addded WordPress debug --- ee/cli/plugins/debug.py | 103 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 97 insertions(+), 6 deletions(-) diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py index 5e824ea6..96670267 100644 --- a/ee/cli/plugins/debug.py +++ b/ee/cli/plugins/debug.py @@ -4,6 +4,7 @@ from cement.core.controller import CementBaseController, expose from cement.core import handler, hook from ee.core.shellexec import EEShellExec from ee.core.mysql import EEMysql +import os def debug_plugin_hook(app): @@ -46,6 +47,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_nginx(self): self.trigger_nginx = False + # start global debug if self.start and not self.app.pargs.site_name: try: debug_address = (self.app.config.get('stack', 'ip-address') @@ -67,6 +69,7 @@ class EEDebugController(CementBaseController): self.msg = self.msg + " /var/log/nginx/*.error.log" + # stop global debug elif not self.start and not self.app.pargs.site_name: if "debug_connection " in open('/etc/nginx/nginx.conf').read(): print("Disabling Nginx debug connections") @@ -76,14 +79,48 @@ class EEDebugController(CementBaseController): else: print("Nginx debug connection already disbaled") + # start site specific debug elif self.start and self.app.pargs.site_name: - print("Enabling debug for "+self.app.pargs.site_name) + config_path = ("/etc/nginx/sites-available/{0}" + .format(self.app.pargs.site_name)) + if os.path.isfile(config_path): + if not EEShellExec.cmd_exec("grep \"error.log debug\" {0}" + .format(config_path)): + print("Starting NGINX debug connection for {0}" + .format(self.app.pargs.site_name)) + EEShellExec.cmd_exec("sed -i \"s/error.log;/error.log " + "debug;/\" {0}".format(config_path)) + self.trigger_nginx = True + + else: + print("Debug for site allready enabled") + + else: + print("{0} domain not valid".format(self.app.pargs.site_name)) + # stop site specific debug elif not self.start and self.app.pargs.site_name: - print("Disabling debug for "+self.app.pargs.site_name) + config_path = ("/etc/nginx/sites-available/{0}" + .format(self.app.pargs.site_name)) + if os.path.isfile(config_path): + if EEShellExec.cmd_exec("grep \"error.log debug\" {0}" + .format(config_path)): + print("Stoping NGINX debug connection for {0}" + .format(self.app.pargs.site_name)) + EEShellExec.cmd_exec("sed -i \"s/error.log debug;/" + "error.log;/\" {0}" + .format(config_path)) + self.trigger_nginx = True + + else: + print("Debug for site allready disbaled") + + else: + print("{0} domain not valid".format(self.app.pargs.site_name)) @expose(hide=True) def debug_php(self): + # PHP global debug start if self.start: if not (EEShellExec.cmd_exec(self, "sed -n \"/upstream php" "{/,/}/p \" /etc/nginx/" @@ -99,6 +136,8 @@ class EEDebugController(CementBaseController): self.trigger_php = True else: print("PHP debug is allready enabled") + + # PHP global debug stop else: if EEShellExec.cmd_exec(self, "sed -n \"/upstream php {/,/}/p\" " "/etc/nginx/conf.d/upstream.conf " @@ -116,6 +155,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_fpm(self): + # PHP5-FPM start global debug if self.start: if not EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " "/etc/php5/fpm/php-fpm.conf"): @@ -126,6 +166,7 @@ class EEDebugController(CementBaseController): self.trigger_php = True else: print("PHP5-FPM log_level = debug already setup") + # PHP5-FPM stop global debug else: if EEShellExec.cmd_exec(self, "grep \"log_level = debug\" " "/etc/php5/fpm/php-fpm.conf"): @@ -139,6 +180,7 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_mysql(self): + # MySQL start global debug if self.start: if not EEShellExec.cmd_exec(self, "mysql -e \"show variables like" " \'slow_query_log\';\" | " @@ -165,6 +207,7 @@ class EEDebugController(CementBaseController): " }} | crontab -\"".format(cron_time)) else: print("MySQL slow log is allready enabled") + # MySQL stop global debug else: if EEShellExec.cmd_exec(self, "mysql -e \"show variables like \'" "slow_query_log\';\" | grep ON"): @@ -183,9 +226,58 @@ class EEDebugController(CementBaseController): @expose(hide=True) def debug_wp(self): if self.start and self.app.pargs.site_name: - print("Start WP debug for site") - elif not self.start and not self.app.pargs.site_name: - print("Stop WP debug for site") + wp_config = ("/var/www/{0}/wp-config.php" + .format(self.app.pargs.site_name)) + webroot = "/var/www/{0}".format(self.app.pargs.site_name) + if os.path.isfile(wp_config): + if not EEShellExec.cmd_exec(self, "grep \"\'WP_DEBUG\'\" {0} |" + " grep true".format(wp_config)): + print("Starting WordPress debug") + open("{0}/htdocs/wp-content/debug.log".format(webroot), + 'a').close() + EEShellExec.cmd_exec(self, "chown www-data: {0}/htdocs/wp-" + "content/debug.log".format(webroot)) + EEShellExec.cmd_exec(self, "sed -i \"s/define(\'WP_DEBUG\'" + ".*/define(\'WP_DEBUG\', true);\\n" + "define(\'WP_DEBUG_DISPLAY\', false);" + "\\ndefine(\'WP_DEBUG_LOG\', true);" + "\\ndefine(\'SAVEQUERIES\', true);/\"" + " {0}".format(wp_config)) + EEShellExec.cmd_exec(self, "cd {0}/htdocs/ && wp" + " plugin --allow-root install " + "developer".format(webroot)) + EEShellExec.cmd_exec(self, "chown -R www-data: {0}/htdocs/" + "wp-content/plugins" + .format(webroot)) + else: + print("WordPress debug log already enabled") + else: + print("{0} domain not valid".format(self.app.pargs.site_name)) + + elif not self.start and self.app.pargs.site_name: + wp_config = ("/var/www/{0}/wp-config.php" + .format(self.app.pargs.site_name)) + webroot = "/var/www/{0}".format(self.app.pargs.site_name) + if os.path.isfile(wp_config): + if EEShellExec.cmd_exec(self, "grep \"\'WP_DEBUG\'\" {0} | " + "grep true".format(wp_config)): + print("Disabling WordPress debug") + EEShellExec.cmd_exec(self, "sed -i \"s/define(\'WP_DEBUG\'" + ", true);/define(\'WP_DEBUG\', " + "false);/\" {0}".format(wp_config)) + EEShellExec.cmd_exec(self, "sed -i \"/define(\'" + "WP_DEBUG_DISPLAY\', false);/d\" {0}" + .format(wp_config)) + EEShellExec.cmd_exec(self, "sed -i \"/define(\'" + "WP_DEBUG_LOG\', true);/d\" {0}" + .format(wp_config)) + EEShellExec.cmd_exec("sed -i \"/define(\'" + "SAVEQUERIES\', " + "true);/d\" {0}".format(wp_config)) + else: + print("WordPress debug all already disbaled") + else: + print("{0} domain not valid".format(self.app.pargs.site_name)) else: print("Missing argument site_name") @@ -205,7 +297,6 @@ class EEDebugController(CementBaseController): self.start = True self.interactive = False self.msg = "" - print(self.app.pargs.site_name) if self.app.pargs.stop: self.start = False From 04583f1697626dc37189865a798651cc1930ee68 Mon Sep 17 00:00:00 2001 From: harshadyeola Date: Mon, 5 Jan 2015 16:17:57 +0530 Subject: [PATCH 6/7] ee wordpress plugin install added --- ee/cli/plugins/site.py | 13 +++--- ee/cli/plugins/site_functions.py | 77 +++++++++++++++++++++++++++----- ee/core/fileutils.py | 8 ++++ ee/core/services.py | 13 ++++++ 4 files changed, 93 insertions(+), 18 deletions(-) diff --git a/ee/cli/plugins/site.py b/ee/cli/plugins/site.py index baa6fa33..9c3dfaec 100644 --- a/ee/cli/plugins/site.py +++ b/ee/cli/plugins/site.py @@ -4,7 +4,7 @@ from cement.core import handler, hook from ee.core.variables import EEVariables from ee.core.domainvalidate import validate_domain from ee.core.fileutils import EEFileUtils -from ee.cli.plugins.site_functions import setup_domain, setup_database +from ee.cli.plugins.site_functions import * import sys import os @@ -131,8 +131,7 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=True, basic=False, wp=False, w3tc=False, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot, - ee_db_name='', ee_db_user='', ee_db_pass='') + wpsubdir=False, webroot=ee_site_webroot) if (self.app.pargs.php and not (self.app.pargs.html or self.app.pargs.mysql or self.app.pargs.wp or self.app.pargs.w3tc @@ -141,8 +140,7 @@ class EESiteCreateController(CementBaseController): data = dict(site_name=ee_domain_name, static=False, basic=True, wp=False, w3tc=False, wpfc=False, wpsc=False, multisite=False, - wpsubdir=False, webroot=ee_site_webroot, - ee_db_name='', ee_db_user='', ee_db_pass='') + wpsubdir=False, webroot=ee_site_webroot) if (self.app.pargs.mysql and not (self.app.pargs.html or self.app.pargs.php or self.app.pargs.wp or self.app.pargs.w3tc @@ -252,7 +250,10 @@ class EESiteCreateController(CementBaseController): ee_db_name='', ee_db_user='', ee_db_pass='') setup_domain(self, data) - setup_database(self, data) + if 'ee_db_name' in data.keys(): + data = setup_database(self, data) + if data['wp']: + setup_wordpress(self, data) class EESiteUpdateController(CementBaseController): diff --git a/ee/cli/plugins/site_functions.py b/ee/cli/plugins/site_functions.py index 9a5573ca..ec9ead53 100644 --- a/ee/cli/plugins/site_functions.py +++ b/ee/cli/plugins/site_functions.py @@ -63,7 +63,6 @@ def setup_database(self, data): prompt_dbname = self.app.config.get('mysql', 'db-name') prompt_dbuser = self.app.config.get('mysql', 'db-user') ee_mysql_host = self.app.config.get('mysql', 'grant-host') - print(ee_random) if prompt_dbname == 'True': try: @@ -111,9 +110,13 @@ def setup_database(self, data): EEMysql.execute(self, "grant all privileges on \'{0}\'.* to \'{1}\'@\'{2}\'" .format(ee_db_name, ee_db_username, ee_db_password)) + data['ee_db_name'] = ee_db_name + data['ee_db_user'] = ee_db_username + data['ee_db_pass'] = ee_db_password + return data -def setup_wordpress(data): +def setup_wordpress(self, data): ee_domain_name = data['site_name'] ee_site_webroot = data['webroot'] prompt_wpprefix = self.app.config.get('wordpress', 'prefix') @@ -156,11 +159,22 @@ def setup_wordpress(data): EEFileUtils.searchreplace('{0}/wp-config.php'.format(ee_site_webroot), 'wp_', '')''' - EEShellExec.cmd_exec(self, "wp --allow-root core config" - "--dbname={0} --dbprefix={1}" - .format(ee_db_name, ee_wp_prefix) - "--dbuser={2} --dbprefix={3}" - .format(ee_db_user, ee_db_password)) + EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot)) + if not data['multisite']: + EEShellExec.cmd_exec(self, "wp --allow-root core config" + "--dbname={0} --dbprefix={1} --dbuser={2}" + .format(ee_db_name, ee_wp_prefix, ee_db_user) + + "--dbpass={0}".format(ee_db_password)) + + else: + EEShellExec.cmd_exec(self, "wp --allow-root core config" + "--dbname={0} --dbprefix={1}" + .format(ee_db_name, ee_wp_prefix) + + "--dbuser={0} --dbpass={1} --extra-php< Date: Mon, 5 Jan 2015 16:59:23 +0530 Subject: [PATCH 7/7] fixed "ProgrammingError" object has no attribute "reason" --- ee/cli/plugins/site_functions.py | 62 ++++++++++++++++---------------- ee/core/mysql.py | 7 ++-- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/ee/cli/plugins/site_functions.py b/ee/cli/plugins/site_functions.py index ec9ead53..f001ca8f 100644 --- a/ee/cli/plugins/site_functions.py +++ b/ee/cli/plugins/site_functions.py @@ -63,6 +63,7 @@ def setup_database(self, data): prompt_dbname = self.app.config.get('mysql', 'db-name') prompt_dbuser = self.app.config.get('mysql', 'db-user') ee_mysql_host = self.app.config.get('mysql', 'grant-host') + ee_db_name = '' if prompt_dbname == 'True': try: @@ -72,8 +73,8 @@ def setup_database(self, data): print("{0} {1}".format(e.errorno, e.strerror)) sys.exit(0) - if not ee_db_name: - ee_db_name = ee_replace_dot + if not ee_db_name: + ee_db_name = ee_replace_dot if prompt_dbuser: try: @@ -85,35 +86,34 @@ def setup_database(self, data): print("{0} {1}".format(e.errorno, e.strerror)) sys.exit(1) - if not ee_db_username: - ee_db_username = ee_replace_dot - if not ee_db_password: - ee_db_password = ee_random - - if len(ee_db_name) > 16: - print('Autofix MySQL username (ERROR 1470 (HY000)), please wait...' - ) - ee_random10 = (''.join(random.sample(string.ascii_uppercase + - string.ascii_lowercase + string.digits, 10))) - ee_db_name = (ee_db_name[0:6] + ee_random10) - - # create MySQL database - EEMysql.execute(self, "create database \'{0}\'" - .format(ee_db_name)) - - # Create MySQL User - EEMysql.execute(self, - "create user \'{0}\'@\'{1}\' identified by \'{2}\'" - .format(ee_db_username, ee_mysql_host, ee_db_password)) - - # Grant permission - EEMysql.execute(self, - "grant all privileges on \'{0}\'.* to \'{1}\'@\'{2}\'" - .format(ee_db_name, ee_db_username, ee_db_password)) - data['ee_db_name'] = ee_db_name - data['ee_db_user'] = ee_db_username - data['ee_db_pass'] = ee_db_password - return data + if not ee_db_username: + ee_db_username = ee_replace_dot + if not ee_db_password: + ee_db_password = ee_random + + if len(ee_db_username) > 16: + print('Autofix MySQL username (ERROR 1470 (HY000)), please wait...') + ee_random10 = (''.join(random.sample(string.ascii_uppercase + + string.ascii_lowercase + string.digits, 10))) + ee_db_name = (ee_db_name[0:6] + ee_random10) + + # create MySQL database + EEMysql.execute(self, "create database \'{0}\'" + .format(ee_db_name)) + + # Create MySQL User + EEMysql.execute(self, + "create user \'{0}\'@\'{1}\' identified by \'{2}\'" + .format(ee_db_username, ee_mysql_host, ee_db_password)) + + # Grant permission + EEMysql.execute(self, + "grant all privileges on \'{0}\'.* to \'{1}\'@\'{2}\'" + .format(ee_db_name, ee_db_username, ee_db_password)) + data['ee_db_name'] = ee_db_name + data['ee_db_user'] = ee_db_username + data['ee_db_pass'] = ee_db_password + return data def setup_wordpress(self, data): diff --git a/ee/core/mysql.py b/ee/core/mysql.py index 19381f4b..dbc58421 100644 --- a/ee/core/mysql.py +++ b/ee/core/mysql.py @@ -28,14 +28,15 @@ class EEMysql(): user=user, passwd=passwd) cur = conn.cursor() except Exception as e: - self.app.log.error('Unable to connect to database', e.reason()) - self.app.log.info("Unable to connect to database") + self.app.log.error('Unable to connect to database: {0}' + .format(e.strerror)) return False try: cur.execute(statement) except Exception as e: - self.app.log.error('Error occured while executing', e.reason()) + self.app.log.error('Error occured while executing: {0}' + .format(e.strerror)) self.app.log.info("Error occured while executing "+statement) cur.close() conn.close()