diff --git a/runbot/models/host.py b/runbot/models/host.py index bf57fb771..f866c546e 100644 --- a/runbot/models/host.py +++ b/runbot/models/host.py @@ -1,8 +1,21 @@ import logging -from odoo import models, fields, api +import os +import platform +from pathlib import Path + +import docker +from odoo import api, fields, models +from odoo.modules import get_module_path from odoo.tools import config + from ..common import fqdn, local_pgadmin_cursor, os from ..container import docker_build + +try: + import lsb_release +except ImportError: + lsb_release = None + _logger = logging.getLogger(__name__) forced_host_name = None @@ -30,6 +43,7 @@ class Host(models.Model): last_exception = fields.Char('Last exception') exception_count = fields.Integer('Exception count') psql_conn_count = fields.Integer('SQL connections count', default=0) + host_infos = fields.Char('Host Infos') def _compute_nb(self): groups = self.env['runbot.build'].read_group( @@ -123,3 +137,25 @@ def disable(self): nb_reserved = self.env['runbot.host'].search_count([('assigned_only', '=', True)]) if nb_reserved < (nb_hosts / 2): self.assigned_only = True + + @staticmethod + def _get_sources_head(sources_path): + head_path = sources_path / '.git/HEAD' + if not head_path.exists(): + return '' + ref = head_path.read_text().strip().split('ref: ')[-1] + commit = (head_path.parent / ref).read_text().strip() + return f'{ref.split("/")[-1]} -- {commit[:8]}' + + def _set_host_infos(self): + """ Gater host informations """ + self.ensure_one() + infos = {} + infos['OS'] = lsb_release.get_distro_information().get('DESCRIPTION', '') if lsb_release else '' # e.g. 'Debian GNU/Linux 11 (bullseye)' + infos['Platform'] = f'{platform.system()}-{platform.release()}' # e.g. 'Linux-5.10.0-13-amd64' + infos['Docker Lib'] = docker.__version__ # e.g. '4.1.0' + infos['Python'] = platform.python_version() # e.g. '3.9.2' + infos['Odoo Head'] = self._get_sources_head(Path(config['root_path']).parent) # e.g. '15.0 -- ff027d13' + infos['Runbot Head'] = self._get_sources_head(Path(get_module_path('runbot')).parent) + infos['Sys Load'] = os.getloadavg()[0] / os.cpu_count() * 100 # 1 min load average percent + self.host_infos = ' / '.join(f'{k}: {v}' for k,v in infos.items()) diff --git a/runbot/views/host_views.xml b/runbot/views/host_views.xml index 767dc3a25..60eca71a8 100644 --- a/runbot/views/host_views.xml +++ b/runbot/views/host_views.xml @@ -18,6 +18,7 @@ +
@@ -33,10 +34,11 @@ runbot.host - + +