From 2bcffcccd1c94f37589161d198a4b03233ce6ba7 Mon Sep 17 00:00:00 2001 From: gau1991 Date: Mon, 13 Apr 2015 17:45:52 +0530 Subject: [PATCH] Added ee log mail command --- ee/cli/plugins/log.py | 131 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/ee/cli/plugins/log.py b/ee/cli/plugins/log.py index d2705d5e..8fd83609 100644 --- a/ee/cli/plugins/log.py +++ b/ee/cli/plugins/log.py @@ -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 [] [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)