From e4468d9f252541e9587e70498c6876d563cca7f6 Mon Sep 17 00:00:00 2001 From: Marius Mauch Date: Sun, 13 Nov 2005 15:01:01 +0000 Subject: [PATCH] First bunch of simple logging modules. svn path=/main/trunk/; revision=2307 --- pym/elog_modules/__init__.py | 0 pym/elog_modules/mod_custom.py | 16 ++++++++++ pym/elog_modules/mod_mail.py | 54 ++++++++++++++++++++++++++++++++++ pym/elog_modules/mod_save.py | 18 ++++++++++++ pym/elog_modules/mod_syslog.py | 13 ++++++++ 5 files changed, 101 insertions(+) create mode 100644 pym/elog_modules/__init__.py create mode 100644 pym/elog_modules/mod_custom.py create mode 100644 pym/elog_modules/mod_mail.py create mode 100644 pym/elog_modules/mod_save.py create mode 100644 pym/elog_modules/mod_syslog.py diff --git a/pym/elog_modules/__init__.py b/pym/elog_modules/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/pym/elog_modules/mod_custom.py b/pym/elog_modules/mod_custom.py new file mode 100644 index 000000000..eebbdd55b --- /dev/null +++ b/pym/elog_modules/mod_custom.py @@ -0,0 +1,16 @@ +import elog_modules.mod_save, portage_exec, portage_exception + +def process(mysettings, cpv, logentries, fulltext): + elog_modules.mod_save.process(mysettings, cpv, logentries, fulltext) + + if (not "PORTAGE_ELOG_COMMAND" in mysettings.keys()) \ + or len(mysettings["PORTAGE_ELOG_COMMAND"]) == 0: + raise portage_exception.MissingParameter("!!! Custom logging requested but PORTAGE_ELOG_COMMAND is not defined") + else: + mylogcmd = mysettings["PORTAGE_ELOG_COMMAND"] + mylogcmd.replace("${LOGFILE}", elogfilename) + mylogcmd.replace("${PACKAGE}", cpv) + retval = portage_exec.spawn_bash(mylogcmd) + if retval != 0: + raise portage_exception.PortageException("!!! PORTAGE_ELOG_COMMAND failed with exitcode %d" % retval) + return diff --git a/pym/elog_modules/mod_mail.py b/pym/elog_modules/mod_mail.py new file mode 100644 index 000000000..a007833ee --- /dev/null +++ b/pym/elog_modules/mod_mail.py @@ -0,0 +1,54 @@ +import smtplib, email.Message, socket, portage_exception + +def process(mysettings, cpv, logentries, fulltext): + mymailhost = "localhost" + mymailport = 25 + mymailuser = "" + mymailpasswd = "" + myrecipient = "root@localhost" + + # Syntax for PORTAGE_LOG_MAILURI (if defined): + # adress [[user:passwd@]mailserver[:port]] + # where adress: recipient adress + # user: username for smtp auth (defaults to none) + # passwd: password for smtp auth (defaults to none) + # mailserver: smtp server that should be used to deliver the mail (defaults to localhost) + # port: port to use on the given smtp server (defaults to 25, values > 100000 indicate that starttls should be used on (port-100000)) + if "PORTAGE_ELOG_MAILURI" in mysettings.keys(): + if " " in mysettings["PORTAGE_ELOG_MAILURI"]: + myrecipient, mymailuri = mysettings["PORTAGE_ELOG_MAILURI"].split() + if "@" in mymailuri: + myauthdata, myconndata = mymailuri.split("@") + try: + mymailuser,mymailpasswd = myauthdata.split(":") + except ValueError: + print "!!! invalid SMTP AUTH configuration, trying unauthenticated ..." + else: + myconndata = mymailuri + if ":" in myconndata: + mymailhost,mymailport = myconndata.split(":") + else: + mymailhost = myconndata + else: + myrecipient = mysettings["PORTAGE_ELOG_MAILURI"] + try: + mymessage = email.Message.Message() + mymessage.set_unixfrom("portage") + mymessage.set_payload(fulltext) + mymessage["To"] = myrecipient + mymessage["Subject"] = "[portage] Ebuild log for %s" % cpv + + if int(mymailport) > 100000: + myconn = smtplib.SMTP(mymailhost, int(mymailport) - 100000) + myconn.starttls() + else: + myconn = smtplib.SMTP(mymailhost, mymailport) + if mymailuser != "" and mymailpasswd != "": + myconn.login(mymailuser, mymailpasswd) + myconn.sendmail("portage", myrecipient, mymessage.as_string()) + myconn.quit() + except smtplib.SMTPException, e: + raise portage_exception.PortageException("!!! An error occured while trying to send logmail:\n"+str(e)) + except socket.error, e: + raise portage_exception.PortageException("!!! A network error occured while trying to send logmail:\n"+str(e)+"\nSure you configured PORTAGE_LOG_MAILURI correctly?") + return diff --git a/pym/elog_modules/mod_save.py b/pym/elog_modules/mod_save.py new file mode 100644 index 000000000..970c526f4 --- /dev/null +++ b/pym/elog_modules/mod_save.py @@ -0,0 +1,18 @@ +import os, time +from portage_data import portage_uid, portage_gid + +def process(mysettings, cpv, logentries, fulltext): + cpv_path = cpv.replace("/", ":") + + elogdir = mysettings["PORTAGE_TMPDIR"]+"/elogs" + if not os.path.exists(elogdir): + os.makedirs(elogdir) + os.chown(elogdir, portage_uid, portage_gid) + os.chmod(elogdir, 0770) + + elogfilename = elogdir+"/"+cpv_path+":"+time.strftime("%Y%m%d-%H%M%S", time.gmtime(time.time()))+".log" + elogfile = open(elogfilename, "w") + elogfile.write(fulltext) + elogfile.close() + + return diff --git a/pym/elog_modules/mod_syslog.py b/pym/elog_modules/mod_syslog.py new file mode 100644 index 000000000..d58979f6a --- /dev/null +++ b/pym/elog_modules/mod_syslog.py @@ -0,0 +1,13 @@ +import syslog +from portage_const import EBUILD_PHASES + +def process(mysettings, cpv, logentries, fulltext): + syslog.openlog("portage", syslog.LOG_ERR | syslog.LOG_WARNING | syslog.LOG_INFO | syslog.LOG_NOTICE, syslog.LOG_LOCAL5) + for phase in EBUILD_PHASES.split(): + if not phase in logentries: + continue + for msgtype,msgcontent in logentries[phase]: + pri = {"INFO": syslog.LOG_INFO, "WARN": syslog.LOG_WARNING, "ERROR": syslog.LOG_ERR, "LOG": syslog.LOG_NOTICE} + msgtext = "".join(msgcontent) + syslog.syslog(pri[msgtype], "%s: %s: %s" % (cpv, phase, msgtext)) + syslog.closelog() -- 2.26.2