log info messaged to database

This commit is contained in:
Ludwig Nussel 2015-05-21 14:58:31 +02:00
parent ea7152130f
commit 71c222bd42
3 changed files with 47 additions and 11 deletions

View File

@ -32,6 +32,7 @@ import subprocess
import sys
import time
import abichecker_dbmodel as DB
import sqlalchemy.orm.exc
try:
from xml.etree import cElementTree as ET
@ -103,6 +104,17 @@ class MissingDebugInfo(Exception):
def __str__(self):
return self.msg
class LogToDB(logging.Filter):
def __init__(self, session):
self.session = session
self.request_id = None
def filter(self, record):
if self.request_id is not None and record.levelno >= logging.INFO:
logentry = DB.Log(request_id = self.request_id, line = record.getMessage())
self.session.add(logentry)
return True
class ABIChecker(ReviewBot.ReviewBot):
""" check ABI of library packages
"""
@ -123,10 +135,16 @@ class ABIChecker(ReviewBot.ReviewBot):
# reports of source submission
self.reports = []
# textual report summary for use in accept/decline message
# or comments
self.text_summary = ''
self.session = DB.db_session()
self.dblogger = LogToDB(self.session)
self.logger.addFilter(self.dblogger)
self.commentapi = CommentAPI(self.apiurl)
def check_source_submission(self, src_project, src_package, src_rev, dst_project, dst_package):
@ -278,7 +296,7 @@ class ABIChecker(ReviewBot.ReviewBot):
reportfn = os.path.join(CACHEDIR, htmlreport)
r = self.run_abi_checker(m.group(1), old_dump, new_dump, reportfn)
if r is not None:
self.logger.info('report saved to %s, compatible: %d', reportfn, r)
self.logger.debug('report saved to %s, compatible: %d', reportfn, r)
libresults.append(LibResult(mr.srcrepo, os.path.basename(old), mr.dstrepo, os.path.basename(new), mr.arch, htmlreport, r))
if overall is None:
overall = r
@ -313,6 +331,8 @@ class ABIChecker(ReviewBot.ReviewBot):
def check_one_request(self, req):
self.dblogger.request_id = req.reqid
self.review_messages = ReviewBot.ReviewBot.DEFAULT_REVIEW_MESSAGES
commentid, state, result = self.find_abichecker_comment(req)
@ -347,18 +367,21 @@ class ABIChecker(ReviewBot.ReviewBot):
if self.no_review:
ret = None
self.dblogger.request_id = None
return ret
def save_reports_to_db(self, req, state, result):
request = self.session.query(DB.Request).filter(DB.Request.id == req.reqid).one()
if request:
self.session.query(DB.ABICheck).filter(DB.ABICheck.request_id == req.reqid).delete()
else:
try:
request = self.session.query(DB.Request).filter(DB.Request.id == req.reqid).one()
self.session.query(DB.ABICheck).filter(DB.ABICheck.request_id == request.id).delete()
self.session.flush()
except sqlalchemy.orm.exc.NoResultFound, e:
request = DB.Request(id = req.reqid,
state = state,
result = result,
)
self.session.add(request)
self.session.add(request)
self.session.commit()
for r in self.reports:
abicheck = DB.ABICheck(
@ -372,7 +395,6 @@ class ABIChecker(ReviewBot.ReviewBot):
)
self.session.add(abicheck)
self.session.commit()
self.logger.info("id %d"%abicheck.id)
if r.result:
self.text_summary += "%s seems to be ABI [compatible](%s/%d):\n\n"%(r.dst_package, WEB_URL, abicheck.id)
else:
@ -448,7 +470,6 @@ class ABIChecker(ReviewBot.ReviewBot):
if not fetchlist:
msg = "no libraries found in %s/%s %s/%s"%(project, package, repo, arch)
self.logger.info(msg)
self.text_summary += msg +"\n"
return None
# mtimes in cpio are not the original ones, so we need to fetch

View File

@ -35,15 +35,23 @@ class Request(Base):
id = Column(Integer, primary_key=True)
state = Column(String(32), nullable=False)
result = Column(String(32), nullable=True)
log = Column(Text(), nullable=True)
t_created = Column(DateTime, default=datetime.now)
t_updated = Column(DateTime, default=datetime.now, onupdate=datetime.now)
class Log(Base):
__tablename__ = 'log'
id = Column(Integer, primary_key=True)
request_id = Column(Integer, ForeignKey('request.id'), nullable=False)
request = relationship(Request, backref=backref('log', order_by=id, cascade="all, delete-orphan"))
line = Column(Text(), nullable=True)
t_created = Column(DateTime, default=datetime.now)
class ABICheck(Base):
__tablename__ = 'abicheck'
id = Column(Integer, primary_key=True)
request_id = Column(Integer, ForeignKey('request.id'))
request_id = Column(Integer, ForeignKey('request.id'), nullable=False)
request = relationship(Request, backref=backref('abichecks', order_by=id, cascade="all, delete-orphan"))
src_project = Column(String(255), nullable=False)
@ -59,7 +67,7 @@ class ABICheck(Base):
class LibReport(Base):
__tablename__ = 'libreport'
id = Column(Integer, primary_key=True)
submission_id = Column(Integer, ForeignKey('abicheck.id'))
submission_id = Column(Integer, ForeignKey('abicheck.id'), nullable=False)
abicheck = relationship(ABICheck, backref=backref('reports', order_by=id, cascade="all, delete-orphan"))
src_repo = Column(String(255), nullable=False)

View File

@ -42,6 +42,13 @@
</li>
{% endfor %}
</ul>
{% if request.log %}
<h2>Log</h2>
<pre>
{% for entry in request.log %}
{{ entry.t_created }} {{ entry.line }}{% endfor %}
</pre>
{% endif %}
{% endblock %}
<!-- vim: sw=4 et