* [gentoo-portage-dev] [PATCH] elog-modules
@ 2005-10-22 15:34 Marius Mauch
2005-10-23 3:06 ` Jason Stubbs
0 siblings, 1 reply; 2+ messages in thread
From: Marius Mauch @ 2005-10-22 15:34 UTC (permalink / raw
To: gentoo-portage-dev
[-- Attachment #1.1: Type: text/plain, Size: 540 bytes --]
This "patch" depends on elog_base (although it doesn't break anything
without it) and adds the actual logging modules. I've just atatched the
files completely, as a) svn diff doesn't play nice with generating
new-file diffs and b) they are just new files to be dropped in
pym/elog_modules (together with an empty __init__.py).
Marius
--
Public Key at http://www.genone.de/info/gpg-key.pub
In the beginning, there was nothing. And God said, 'Let there be
Light.' And there was still nothing, but you could see a bit better.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: mod_custom.py --]
[-- Type: text/x-python; name=mod_custom.py, Size: 742 bytes --]
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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: mod_mail.py --]
[-- Type: text/x-python; name=mod_mail.py, Size: 2418 bytes --]
import smtplib, email.Message, socket, portage_exception
def process(mysettings, cpv, logentries, fulltext):
mymailhost = "localhost"
mymailport = 25
mymailuser = ""
mymailpasswd = ""
myrecipient = "root@localhost"
mysubject = "[portage] Ebuild log for %s"
# 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"]
if "PORTAGE_ELOG_MAILSUBJECT" in mysettings.keys():
mysubject = mysettings["PORTAGE_ELOG_MAILSUBJECT"]
try:
mymessage = email.Message.Message()
mymessage.set_unixfrom("portage")
mymessage.set_payload(fulltext)
mymessage["To"] = myrecipient
mymessage["Subject"] = mysubject % 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_ELOG_MAILURI correctly?")
return
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.4: mod_save.py --]
[-- Type: text/x-python; name=mod_save.py, Size: 648 bytes --]
import os, time
from portage_data import portage_uid, portage_gid
def process(mysettings, cpv, logentries, fulltext):
cpv_path = cpv.replace("/", ":")
if mysettings.has_key["PORTAGE_ELOG_SAVEDIR"]:
elogdir = mysettings["PORTAGE_ELOG_SAVEDIR"]
else:
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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.5: mod_syslog.py --]
[-- Type: text/x-python; name=mod_syslog.py, Size: 602 bytes --]
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()
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [gentoo-portage-dev] [PATCH] elog-modules
2005-10-22 15:34 [gentoo-portage-dev] [PATCH] elog-modules Marius Mauch
@ 2005-10-23 3:06 ` Jason Stubbs
0 siblings, 0 replies; 2+ messages in thread
From: Jason Stubbs @ 2005-10-23 3:06 UTC (permalink / raw
To: gentoo-portage-dev
mod_mail.py
An exception will be thrown if PORTAGE_ELOG_MAILSUBJECT is defined but does
not contain exactly one "%s".
Any reason to not have a PORTAGE_ELOG_MAILRECIPIENT?
mod_syslog.py
The definition of pri should be moved outside of the loops and probably
outside of the function altogether.
--
Jason Stubbs
--
gentoo-portage-dev@gentoo.org mailing list
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-10-24 7:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-22 15:34 [gentoo-portage-dev] [PATCH] elog-modules Marius Mauch
2005-10-23 3:06 ` Jason Stubbs
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox