[copr] master: [backend] added context manager `local_file_logger` (56e63b6)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 56e63b63d8a7047435d99f64c9121e2510624922
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Wed Sep 16 13:52:24 2015 +0200
[backend] added context manager `local_file_logger`
>---------------------------------------------------------------
backend/backend/daemons/dispatcher.py | 67 +++++++++++++++-----------------
backend/backend/helpers.py | 14 +++++++
2 files changed, 45 insertions(+), 36 deletions(-)
diff --git a/backend/backend/daemons/dispatcher.py b/backend/backend/daemons/dispatcher.py
index 023e929..803b904 100644
--- a/backend/backend/daemons/dispatcher.py
+++ b/backend/backend/daemons/dispatcher.py
@@ -17,7 +17,8 @@ from ..exceptions import MockRemoteError, CoprWorkerError, VmError, NoVmAvailabl
from ..job import BuildJob
from ..mockremote import MockRemote
from ..constants import BuildStatus, JOB_GRAB_TASK_END_PUBSUB, build_log_format
-from ..helpers import register_build_result, format_tb, get_redis_connection, get_redis_logger, create_file_logger
+from ..helpers import register_build_result, format_tb, get_redis_connection, get_redis_logger, create_file_logger, \
+ local_file_logger
# ansible_playbook = "ansible-playbook"
@@ -288,41 +289,35 @@ class Worker(multiprocessing.Process):
self.log.info("Starting build: id={} builder={} job: {}"
.format(job.build_id, self.vm_ip, job))
- build_logger = create_file_logger(
- "{}.builder.mr".format(self.logger_name),
- job.chroot_log_path, fmt=build_log_format)
-
- try:
- mr = MockRemote(
- builder_host=self.vm_ip,
- job=job,
- logger=build_logger,
- opts=self.opts
- )
- mr.check()
-
- build_details = mr.build_pkg_and_process_results()
- job.update(build_details)
-
- if self.opts.do_sign:
- mr.add_pubkey()
-
- register_build_result(self.opts)
-
- except MockRemoteError as e:
- # record and break
- self.log.exception(
- "Error during the build, host={}, build_id={}, chroot={}, error: {}"
- .format(self.vm_ip, job.build_id, job.chroot, e)
- )
- status = BuildStatus.FAILURE
- register_build_result(self.opts, failed=True)
- finally:
- # TODO: kind of ugly solution
- # we should remove handler from build loger, otherwise we would write
- # to the previous project
- for h in build_logger.handlers[:]:
- build_logger.removeHandler(h)
+ with local_file_logger(
+ "{}.builder.mr".format(self.logger_name),
+ job.chroot_log_path,
+ fmt=build_log_format) as build_logger:
+ try:
+ mr = MockRemote(
+ builder_host=self.vm_ip,
+ job=job,
+ logger=build_logger,
+ opts=self.opts
+ )
+ mr.check()
+
+ build_details = mr.build_pkg_and_process_results()
+ job.update(build_details)
+
+ if self.opts.do_sign:
+ mr.add_pubkey()
+
+ register_build_result(self.opts)
+
+ except MockRemoteError as e:
+ # record and break
+ self.log.exception(
+ "Error during the build, host={}, build_id={}, chroot={}, error: {}"
+ .format(self.vm_ip, job.build_id, job.chroot, e)
+ )
+ status = BuildStatus.FAILURE
+ register_build_result(self.opts, failed=True)
self.log.info(
"Finished build: id={} builder={} timeout={} destdir={}"
diff --git a/backend/backend/helpers.py b/backend/backend/helpers.py
index e26d5f7..b611fa4 100644
--- a/backend/backend/helpers.py
+++ b/backend/backend/helpers.py
@@ -12,6 +12,7 @@ import ConfigParser
import os
import sys
import errno
+from contextlib import contextmanager
import traceback
@@ -385,3 +386,16 @@ def get_backend_opts():
config_file = os.path.abspath(opts.config_file)
config_reader = BackendConfigReader(config_file, {})
return config_reader.read()
+
+
+@contextmanager
+def local_file_logger(name, path, fmt):
+ build_logger = create_file_logger(name, path, fmt)
+ try:
+ yield build_logger
+ finally:
+ # TODO: kind of ugly solution
+ # we should remove handler from build loger, otherwise we would write
+ # to the previous project
+ for h in build_logger.handlers[:]:
+ build_logger.removeHandler(h)