Skip to content

Commit 61c6fe7

Browse files
committed
merge import-slow-log => master
2 parents 89b133e + d3ac0f9 commit 61c6fe7

File tree

4 files changed

+129
-65
lines changed

4 files changed

+129
-65
lines changed

config/bash_completion.d/ee_auto.rc

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ _ee_complete()
2929
# IF YOU HAD ANOTHER CONTROLLER, YOU'D HANDLE THAT HERE
3030
"debug")
3131
COMPREPLY=( $(compgen \
32-
-W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql -i --interactive --all --nginx=off --php=off --fpm=off --mysql=off --all=off " \
32+
-W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql -i --interactive --all --import-slow-log --import-slow-log-interval= --nginx=off --php=off --fpm=off --mysql=off --all=off " \
3333
-- $cur) )
3434
;;
3535

@@ -137,8 +137,14 @@ _ee_complete()
137137
;;
138138
esac
139139

140-
if [ ${COMP_WORDS[1]} == "debug" ] && ([ "$prev" != "--start" ] || [ "$prev" != "--nginx" ] || [ "$prev" != "--php" ] || [ "$prev" != "--fpm" ] || [ "$prev" != "--mysql" ] || [ "$prev" != "-i" ] || ["$prev" != "--interactive" ] || ["$prev" != "--stop" ]); then
141-
retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off"
140+
if [ ${COMP_WORDS[1]} == "debug" ] && ([ "$prev" != "--start" ] && [ "$prev" != "--nginx" ] && [ "$prev" != "--php" ] && [ "$prev" != "--fpm" ] && [ "$prev" != "--mysql" ] && [ "$prev" != "-i" ] && [ "$prev" != "--interactive" ] && [ "$prev" != "--import-slow-log" ] && [ "$prev" != "--stop" ]); then
141+
retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off"
142+
ret="${retlist[@]/$prev}"
143+
COMPREPLY=( $(compgen \
144+
-W "$(echo $ret)" \
145+
-- $cur) )
146+
else
147+
retlist="--start --nginx --php --fpm --mysql -i --interactive --stop --import-slow-log --import-slow-log-interval="
142148
ret="${retlist[@]/$prev}"
143149
COMPREPLY=( $(compgen \
144150
-W "$(echo $ret)" \
@@ -228,7 +234,7 @@ _ee_complete()
228234
elif [[ ${COMP_WORDS[2]} == "start" || ${COMP_WORDS[2]} == "reload" || ${COMP_WORDS[2]} == "restart" || ${COMP_WORDS[2]} == "stop" ]]; then
229235
retlist="--nginx --php --mysql --postfix --memcache --dovecot"
230236
elif [[ ${COMP_WORDS[1]} == "debug" ]]; then
231-
retlist="--start --nginx --php --fpm --mysql -i --interactive --stop"
237+
retlist="--start --nginx --php --fpm --mysql -i --interactive -stop --import-slow-log --import-slow-log-interval= -"
232238
if [[ $prev == '--mysql' ]]; then
233239
retlist="--start --nginx --php --fpm --mysql -i --interactive --stop --import-slow-log"
234240
fi

ee/cli/plugins/debug.py

Lines changed: 114 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from cement.core.controller import CementBaseController, expose
44
from cement.core import handler, hook
5-
from ee.core.shellexec import EEShellExec
5+
from ee.core.shellexec import *
66
from ee.core.mysql import EEMysql
77
from ee.core.services import EEService
88
from ee.core.logging import Log
@@ -32,6 +32,9 @@ class Meta:
3232
dict(help='Stop debug', action='store_true')),
3333
(['--start'],
3434
dict(help='Start debug', action='store_true')),
35+
(['--import-slow-log'],
36+
dict(help='Import MySQL slow log to Anemometer database',
37+
action='store_true')),
3538
(['--nginx'],
3639
dict(help='start/stop debugging nginx server '
3740
'configuration for site',
@@ -268,21 +271,6 @@ def debug_mysql(self):
268271
EEMysql.execute(self, "set global long_query_time = 2;")
269272
EEMysql.execute(self, "set global log_queries_not_using"
270273
"_indexes = \'ON\';")
271-
if self.app.pargs.interval:
272-
try:
273-
cron_time = int(self.app.pargs.interval)
274-
except Exception as e:
275-
cron_time = 5
276-
277-
EEShellExec.cmd_exec(self, "/bin/bash -c \"crontab -l "
278-
"2> /dev/null | {{ cat; echo -e"
279-
" \\\"#EasyEngine start MySQL "
280-
"slow log \\n*/{0} * * * * "
281-
"/usr/local/bin/ee "
282-
"import-slow-log\\n"
283-
"#EasyEngine end MySQL slow log"
284-
"\\\"; }} | crontab -\""
285-
.format(cron_time))
286274
else:
287275
Log.info(self, "MySQL slow log is already enabled")
288276

@@ -494,13 +482,69 @@ def default(self):
494482
and (not self.app.pargs.fpm) and (not self.app.pargs.mysql)
495483
and (not self.app.pargs.wp) and (not self.app.pargs.rewrite)
496484
and (not self.app.pargs.all)
497-
and (not self.app.pargs.site_name)):
485+
and (not self.app.pargs.site_name)
486+
and (not self.app.pargs.import_slow_log)
487+
and (not self.app.pargs.interval)):
498488
if self.app.pargs.stop or self.app.pargs.start:
499489
print("--start/stop option is deprecated since ee3.0.5")
500490
self.app.args.print_help()
501491
else:
502492
self.app.args.print_help()
503493

494+
if self.app.pargs.import_slow_log:
495+
self.import_slow_log()
496+
497+
if self.app.pargs.interval:
498+
try:
499+
cron_time = int(self.app.pargs.interval)
500+
except Exception as e:
501+
cron_time = 5
502+
503+
try:
504+
if not EEShellExec.cmd_exec(self, "crontab -l | grep "
505+
"'ee debug --import-slow-log'"):
506+
if not cron_time == 0:
507+
Log.info(self, "setting up crontab entry,"
508+
" please wait ...")
509+
EEShellExec.cmd_exec(self, "/bin/bash -c \"crontab -l "
510+
"2> /dev/null | {{ cat; echo -e"
511+
" \\\"#EasyEngine start MySQL "
512+
"slow log \\n*/{0} * * * * "
513+
"/usr/local/bin/ee debug"
514+
" --import-slow-log\\n"
515+
"#EasyEngine end MySQL slow log"
516+
"\\\"; }} | crontab -\""
517+
.format(cron_time))
518+
else:
519+
if not cron_time == 0:
520+
Log.info(self, "updating crontab entry,"
521+
" please wait ...")
522+
if not EEShellExec.cmd_exec(self, "/bin/bash -c "
523+
"\"crontab "
524+
"-l | sed '/EasyEngine "
525+
"start MySQL slow "
526+
"log/!b;n;c\*\/{0} "
527+
"\* \* \* "
528+
"\* \/usr"
529+
"\/local\/bin\/ee debug "
530+
"--import\-slow\-log' "
531+
"| crontab -\""
532+
.format(cron_time)):
533+
Log.error(self, "failed to update crontab entry")
534+
else:
535+
Log.info(self, "removing crontab entry,"
536+
" please wait ...")
537+
if not EEShellExec.cmd_exec(self, "/bin/bash -c "
538+
"\"crontab "
539+
"-l | sed '/EasyEngine "
540+
"start MySQL slow "
541+
"log/,+2d'"
542+
"| crontab -\""
543+
.format(cron_time)):
544+
Log.error(self, "failed to remove crontab entry")
545+
except CommandExecutionError as e:
546+
Log.debug(self, str(e))
547+
504548
if self.app.pargs.all == 'on':
505549
if self.app.pargs.site_name:
506550
self.app.pargs.wp = 'on'
@@ -569,6 +613,59 @@ def default(self):
569613

570614
logwatch(self, watch_list)
571615

616+
@expose(hide=True)
617+
def import_slow_log(self):
618+
"""Default function for import slow log"""
619+
if os.path.isdir("{0}22222/htdocs/db/anemometer"
620+
.format(EEVariables.ee_webroot)):
621+
if os.path.isfile("/var/log/mysql/mysql-slow.log"):
622+
# Get Anemometer user name and password
623+
Log.info(self, "Importing MySQL slow log to Anemometer")
624+
host = os.popen("grep -e \"\'host\'\" {0}22222/htdocs/"
625+
.format(EEVariables.ee_webroot)
626+
+ "db/anemometer/conf/config.inc.php "
627+
"| head -1 | cut -d\\\' -f4 | "
628+
"tr -d '\n'").read()
629+
user = os.popen("grep -e \"\'user\'\" {0}22222/htdocs/"
630+
.format(EEVariables.ee_webroot)
631+
+ "db/anemometer/conf/config.inc.php "
632+
"| head -1 | cut -d\\\' -f4 | "
633+
"tr -d '\n'").read()
634+
password = os.popen("grep -e \"\'password\'\" {0}22222/"
635+
.format(EEVariables.ee_webroot)
636+
+ "htdocs/db/anemometer/conf"
637+
"/config.inc.php "
638+
"| head -1 | cut -d\\\' -f4 | "
639+
"tr -d '\n'").read()
640+
641+
# Import slow log Anemometer using pt-query-digest
642+
try:
643+
EEShellExec.cmd_exec(self, "pt-query-digest --user={0} "
644+
"--password={1} "
645+
"--review D=slow_query_log,"
646+
"t=global_query_review "
647+
"--history D=slow_query_log,t="
648+
"global_query_review_history "
649+
"--no-report --limit=0% "
650+
"--filter=\" \\$event->{{Bytes}} = "
651+
"length(\\$event->{{arg}}) "
652+
"and \\$event->{{hostname}}=\\\""
653+
"{2}\\\"\" "
654+
"/var/log/mysql/mysql-slow.log"
655+
.format(user, password, host))
656+
except CommandExecutionError as e:
657+
Log.debug(self, str(e))
658+
Log.error(self, "MySQL slow log import failed.")
659+
else:
660+
Log.error(self, "MySQL slow log file not found,"
661+
" so not imported slow logs")
662+
else:
663+
Log.error(self, " Anemometer is not installed." +
664+
Log.ENDC + " You can install Anemometer with "
665+
"this command "
666+
+ Log.BOLD + "\n `ee stack install --utils`"
667+
+ Log.ENDC)
668+
572669

573670
def load(app):
574671
# register the plugin class.. this only happens if the plugin is enabled

ee/cli/plugins/import_slow_log.py

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,10 @@ class Meta:
2020

2121
@expose(hide=True)
2222
def default(self):
23-
"""Default function for import slow log"""
24-
if os.path.isdir("{0}22222/htdocs/db/anemometer"
25-
.format(EEVariables.ee_webroot)):
26-
if os.path.isfile("/var/log/mysql/mysql-slow.log"):
27-
# Get Anemometer user name and password
28-
Log.info(self, "Importing MySQL slow log to Anemometer")
29-
host = os.popen("grep -e \"\'host\'\" {0}22222/htdocs/"
30-
.format(EEVariables.ee_webroot)
31-
+ "db/anemometer/conf/config.inc.php "
32-
"| head -1 | cut -d\\\' -f4 | "
33-
"tr -d '\n'").read()
34-
user = os.popen("grep -e \"\'user\'\" {0}22222/htdocs/"
35-
.format(EEVariables.ee_webroot)
36-
+ "db/anemometer/conf/config.inc.php "
37-
"| head -1 | cut -d\\\' -f4 | "
38-
"tr -d '\n'").read()
39-
password = os.popen("grep -e \"\'password\'\" {0}22222/"
40-
.format(EEVariables.ee_webroot)
41-
+ "htdocs/db/anemometer/conf"
42-
"/config.inc.php "
43-
"| head -1 | cut -d\\\' -f4 | "
44-
"tr -d '\n'").read()
45-
46-
# Import slow log Anemometer using pt-query-digest
47-
EEShellExec.cmd_exec(self, "pt-query-digest --user={0} "
48-
"--password={1} "
49-
"--review D=slow_query_log,"
50-
"t=global_query_review "
51-
"--history D=slow_query_log,t="
52-
"global_query_review_history "
53-
"--no-report --limit=0% "
54-
"--filter=\" \\$event->{{Bytes}} = "
55-
"length(\\$event->{{arg}}) "
56-
"and \\$event->{{hostname}}=\\\""
57-
"{2}\\\"\" "
58-
"/var/log/mysql/mysql-slow.log"
59-
.format(user, password, host))
60-
else:
61-
Log.error(self, "Unable to find MySQL slow log file")
62-
else:
63-
Log.error(self, "Anemometer is not installed")
23+
Log.info(self, "This command is deprecated."
24+
" You can use this command instead, " +
25+
Log.ENDC + Log.BOLD + "\n`ee debug --import-slow-log`" +
26+
Log.ENDC)
6427

6528

6629
def load(app):

ee/cli/plugins/site_functions.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,9 +697,7 @@ def updatewpuserpassword(self, ee_domain, ee_site_webroot):
697697
except CommandExecutionError as e:
698698
raise SiteError("wp user password update command failed")
699699
Log.info(self, "Password updated successfully")
700-
if len(ee_wp_pass) < 8:
701-
Log.warn(self, "Warning: You have provided a "
702-
"weak password")
700+
703701
else:
704702
Log.error(self, "Invalid WordPress user {0} for {1}."
705703
.format(ee_wp_user, ee_domain))

0 commit comments

Comments
 (0)