|
|
@ -7,6 +7,7 @@ from ee.cli.plugins.site_functions import logwatch |
|
|
|
from ee.core.variables import EEVariables |
|
|
|
from ee.core.fileutils import EEFileUtils |
|
|
|
from ee.core.shellexec import EEShellExec |
|
|
|
from ee.core.sendmail import EESendMail |
|
|
|
import os |
|
|
|
import glob |
|
|
|
import gzip |
|
|
@ -373,6 +374,7 @@ class EELogGzipController(CementBaseController): |
|
|
|
|
|
|
|
# Gzip content of file |
|
|
|
for g_list in gzip_list: |
|
|
|
Log.info(self, "Gzipping file {file}".format(file=g_list)) |
|
|
|
in_file = g_list |
|
|
|
in_data = open(in_file, "rb").read() |
|
|
|
out_gz = g_list + ".gz" |
|
|
@ -381,10 +383,139 @@ class EELogGzipController(CementBaseController): |
|
|
|
gzf.close() |
|
|
|
|
|
|
|
|
|
|
|
class EELogMailController(CementBaseController): |
|
|
|
class Meta: |
|
|
|
label = 'mail' |
|
|
|
description = 'Mail Nginx, PHP, MySQL log file' |
|
|
|
stacked_on = 'log' |
|
|
|
stacked_type = 'nested' |
|
|
|
arguments = [ |
|
|
|
(['--all'], |
|
|
|
dict(help='Mail All logs file', action='store_true')), |
|
|
|
(['--nginx'], |
|
|
|
dict(help='Mail Nginx Error logs file', action='store_true')), |
|
|
|
(['--php'], |
|
|
|
dict(help='Mail PHP Error logs file', action='store_true')), |
|
|
|
(['--fpm'], |
|
|
|
dict(help='Mail PHP5-fpm slow logs file', |
|
|
|
action='store_true')), |
|
|
|
(['--mysql'], |
|
|
|
dict(help='Mail MySQL logs file', action='store_true')), |
|
|
|
(['--wp'], |
|
|
|
dict(help='Mail Site specific WordPress logs file', |
|
|
|
action='store_true')), |
|
|
|
(['--access'], |
|
|
|
dict(help='Mail Nginx access log file', |
|
|
|
action='store_true')), |
|
|
|
(['site_name'], |
|
|
|
dict(help='Website Name', nargs='?', default=None)), |
|
|
|
(['--to'], |
|
|
|
dict(help='EMail addresses to send log files', action='append', |
|
|
|
dest='to', nargs=1, required=True)), |
|
|
|
] |
|
|
|
usage = "ee log mail [<site_name>] [options]" |
|
|
|
|
|
|
|
@expose(hide=True) |
|
|
|
def default(self): |
|
|
|
"""Default function of log Mail""" |
|
|
|
self.msg = [] |
|
|
|
|
|
|
|
if self.app.pargs.php: |
|
|
|
self.app.pargs.nginx = True |
|
|
|
|
|
|
|
if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) |
|
|
|
and (not self.app.pargs.mysql) and (not self.app.pargs.access) |
|
|
|
and (not self.app.pargs.wp) and (not self.app.pargs.site_name)): |
|
|
|
self.app.pargs.nginx = True |
|
|
|
self.app.pargs.fpm = True |
|
|
|
self.app.pargs.mysql = True |
|
|
|
self.app.pargs.access = True |
|
|
|
|
|
|
|
if ((not self.app.pargs.nginx) and (not self.app.pargs.fpm) |
|
|
|
and (not self.app.pargs.mysql) and (not self.app.pargs.access) |
|
|
|
and (not self.app.pargs.wp) and (self.app.pargs.site_name)): |
|
|
|
self.app.pargs.nginx = True |
|
|
|
self.app.pargs.wp = True |
|
|
|
self.app.pargs.access = True |
|
|
|
self.app.pargs.mysql = True |
|
|
|
|
|
|
|
if self.app.pargs.nginx and (not self.app.pargs.site_name): |
|
|
|
self.msg = self.msg + ["/var/log/nginx/*error.log"] |
|
|
|
|
|
|
|
if self.app.pargs.access and (not self.app.pargs.site_name): |
|
|
|
self.msg = self.msg + ["/var/log/nginx/*access.log"] |
|
|
|
|
|
|
|
if self.app.pargs.fpm: |
|
|
|
open('/var/log/php5/slow.log', 'a').close() |
|
|
|
open('/var/log/php5/fpm.log', 'a').close() |
|
|
|
self.msg = self.msg + ['/var/log/php5/slow.log', |
|
|
|
'/var/log/php5/fpm.log'] |
|
|
|
if self.app.pargs.mysql: |
|
|
|
# MySQL debug will not work for remote MySQL |
|
|
|
if EEVariables.ee_mysql_host is "localhost": |
|
|
|
if os.path.isfile('/var/log/mysql/mysql-slow.log'): |
|
|
|
self.msg = self.msg + ['/var/log/mysql/mysql-slow.log'] |
|
|
|
else: |
|
|
|
Log.error(self, "Unable to find MySQL slow log file," |
|
|
|
"Please generate it using commnad ee debug " |
|
|
|
"--mysql") |
|
|
|
else: |
|
|
|
Log.warn(self, "Remote MySQL found, EasyEngine is not able to" |
|
|
|
"show MySQL log file") |
|
|
|
|
|
|
|
if self.app.pargs.site_name: |
|
|
|
if self.app.pargs.access: |
|
|
|
self.msg = self.msg + ["{0}/{1}/logs/access.log" |
|
|
|
.format(EEVariables.ee_webroot, |
|
|
|
self.app.pargs.site_name)] |
|
|
|
if self.app.pargs.nginx: |
|
|
|
self.msg = self.msg + ["{0}/{1}/logs/error.log" |
|
|
|
.format(EEVariables.ee_webroot, |
|
|
|
self.app.pargs.site_name)] |
|
|
|
if self.app.pargs.wp: |
|
|
|
webroot = "{0}{1}".format(EEVariables.ee_webroot, |
|
|
|
self.app.pargs.site_name) |
|
|
|
if not os.path.isfile('{0}/logs/debug.log' |
|
|
|
.format(webroot)): |
|
|
|
if not os.path.isfile('{0}/htdocs/wp-content/debug.log' |
|
|
|
.format(webroot)): |
|
|
|
open("{0}/htdocs/wp-content/debug.log".format(webroot), |
|
|
|
encoding='utf-8', mode='a').close() |
|
|
|
EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/wp-" |
|
|
|
"content/debug.log" |
|
|
|
"".format(webroot, |
|
|
|
EEVariables.ee_php_user) |
|
|
|
) |
|
|
|
|
|
|
|
# create symbolic link for debug log |
|
|
|
EEFileUtils.create_symlink(self, ["{0}/htdocs/wp-content/" |
|
|
|
"debug.log" |
|
|
|
.format(webroot), |
|
|
|
'{0}/logs/debug.log' |
|
|
|
.format(webroot)]) |
|
|
|
|
|
|
|
self.msg = self.msg + ["{0}/{1}/logs/debug.log" |
|
|
|
.format(EEVariables.ee_webroot, |
|
|
|
self.app.pargs.site_name)] |
|
|
|
mail_list = [] |
|
|
|
for m_list in self.msg: |
|
|
|
mail_list = mail_list + glob.glob(m_list) |
|
|
|
|
|
|
|
print(mail_list) |
|
|
|
for tomail in self.app.pargs.to: |
|
|
|
Log.info(self, "Sending mail to {0}".format(tomail[0])) |
|
|
|
EESendMail("easyengine", tomail[0], "{0} Log Files" |
|
|
|
.format(EEVariables.ee_fqdn), |
|
|
|
"Hey Hi,\n Please find attached server log files" |
|
|
|
"\n\n\nYour's faithfully,\nEasyEngine", |
|
|
|
files=mail_list, port=25, isTls=False) |
|
|
|
|
|
|
|
|
|
|
|
def load(app): |
|
|
|
# register the plugin class.. this only happens if the plugin is enabled |
|
|
|
handler.register(EELogController) |
|
|
|
handler.register(EELogResetController) |
|
|
|
handler.register(EELogGzipController) |
|
|
|
handler.register(EELogMailController) |
|
|
|
# register a hook (function) to run after arguments are parsed. |
|
|
|
hook.register('post_argument_parsing', ee_log_hook) |
|
|
|