runbot/runbot_builder/builder.py
Xavier-Do b96b32e8b9 [IMP] runbot: better docker logging
The docker operation are called often and cannot be logged each time.
If a docker operation is slow, we log it at the end but waiting for this
output we have no idea what the process is doing.

This pr proposed to go a lower level and get the stream from the docker
operation to be able to log earlier if we started a potentially slow
operation.
2024-09-11 13:16:13 +02:00

54 lines
2.0 KiB
Python
Executable File

#!/usr/bin/python3
import logging
import threading
from pathlib import Path
from tools import RunbotClient, run, docker_monitoring_loop
_logger = logging.getLogger(__name__)
class BuilderClient(RunbotClient):
def on_start(self):
builds_path = self.env['runbot.runbot']._path('build')
monitoring_thread = threading.Thread(target=docker_monitoring_loop, args=(builds_path,), daemon=True)
monitoring_thread.start()
if self.env['ir.config_parameter'].sudo().get_param('runbot.runbot_do_fetch'):
for repo in self.env['runbot.repo'].search([('mode', '!=', 'disabled')]):
repo._update(force=True)
self.last_docker_updates = None
def loop_turn(self):
icp = self.env['ir.config_parameter']
docker_registry_host_id = icp.get_param('runbot.docker_registry_host_id', default=False)
is_registry = docker_registry_host_id == str(self.host.id)
if is_registry:
self.env['runbot.runbot']._start_docker_registry()
last_docker_updates = self.env['runbot.dockerfile'].search([('to_build', '=', True)]).mapped('write_date')
if self.count == 1 or self.last_docker_updates != last_docker_updates:
self.last_docker_updates = last_docker_updates
self.host._docker_update_images()
self.env.cr.commit()
if self.count == 1: # cleanup at second iteration
self.env['runbot.runbot']._source_cleanup()
self.env.cr.commit()
self.env['runbot.build']._local_cleanup()
self.env.cr.commit()
self.env['runbot.runbot']._docker_cleanup()
self.env.cr.commit()
self.host._set_psql_conn_count()
self.env.cr.commit()
self.env['runbot.repo']._update_git_config()
self.env.cr.commit()
self.git_gc()
self.env.cr.commit()
return self.env['runbot.runbot']._scheduler_loop_turn(self.host)
if __name__ == '__main__':
run(BuilderClient)