mirror of
https://github.com/odoo/runbot.git
synced 2025-03-22 02:45:51 +07:00
71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
import re
|
|
from odoo import models, fields
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class UpgradeExceptions(models.Model):
|
|
_name = 'runbot.upgrade.exception'
|
|
_description = 'Upgrade exception'
|
|
|
|
active = fields.Boolean('Active', default=True)
|
|
elements = fields.Text('Elements')
|
|
bundle_id = fields.Many2one('runbot.bundle', index=True)
|
|
info = fields.Text('Info')
|
|
team_id = fields.Many2one('runbot.team', 'Assigned team', index=True)
|
|
message = fields.Text('Upgrade exception message', compute="_compute_message")
|
|
|
|
def _compute_message(self):
|
|
message_layout = self.env['ir.config_parameter'].sudo().get_param('runbot.runbot_upgrade_exception_message')
|
|
for exception in self:
|
|
exception.message = message_layout.format(exception=exception, base_url=exception.get_base_url())
|
|
|
|
def _generate(self):
|
|
exceptions = self.search([])
|
|
if exceptions:
|
|
return 'suppress_upgrade_warnings=%s' % (','.join(exceptions.mapped('elements'))).replace(' ', '').replace('\n', ',')
|
|
return False
|
|
|
|
|
|
class UpgradeRegex(models.Model):
|
|
_name = 'runbot.upgrade.regex'
|
|
_description = 'Upgrade regex'
|
|
|
|
active = fields.Boolean('Active', default=True)
|
|
prefix = fields.Char('Type')
|
|
regex = fields.Char('Regex')
|
|
|
|
|
|
class BuildResult(models.Model):
|
|
_inherit = 'runbot.build'
|
|
|
|
def _parse_upgrade_errors(self):
|
|
ir_logs = self.env['ir.logging'].search([('level', 'in', ('ERROR', 'WARNING', 'CRITICAL')), ('type', '=', 'server'), ('build_id', 'in', self.ids)])
|
|
|
|
upgrade_regexes = self.env['runbot.upgrade.regex'].search([])
|
|
exception = {}
|
|
for log in ir_logs:
|
|
for upgrade_regex in upgrade_regexes:
|
|
m = re.search(upgrade_regex.regex, log.message)
|
|
if m:
|
|
exception['%s:%s' % (upgrade_regex.prefix, m.groups()[0])] = None
|
|
exception = list(exception)
|
|
if exception:
|
|
bundle = False
|
|
batches = self.top_parent.slot_ids.mapped('batch_id')
|
|
if batches:
|
|
bundle = batches[0].bundle_id.id
|
|
res = {
|
|
'name': 'Upgrade Exception',
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'runbot.upgrade.exception',
|
|
'view_mode': 'form',
|
|
'context': {
|
|
'default_elements': '\n'.join(exception),
|
|
'default_bundle_id': bundle,
|
|
'default_info': 'Automatically generated from build %s' % self.id
|
|
}
|
|
}
|
|
return res
|
|
else:
|
|
raise UserError('Nothing found here')
|