This commit is contained in:
gsinghpal
2026-04-02 17:55:32 -04:00
parent f715570e0c
commit 1c560c6df2
5 changed files with 87 additions and 8 deletions

View File

@@ -1,5 +1,12 @@
import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
SUCCESS_RETENTION_DAYS = 30
ERROR_RETENTION_DAYS = 90
class WooSyncLog(models.Model):
_name = 'woo.sync.log'
@@ -32,11 +39,50 @@ class WooSyncLog(models.Model):
@api.model
def _cron_cleanup_logs(self):
"""Purge sync logs older than 90 days (180 for errors)."""
cutoff_success = fields.Datetime.subtract(fields.Datetime.now(), hours=90 * 24)
cutoff_error = fields.Datetime.subtract(fields.Datetime.now(), hours=180 * 24)
self.search([
"""Purge success/conflict logs older than 30 days, errors older than 90."""
now = fields.Datetime.now()
cutoff_success = fields.Datetime.subtract(now, days=SUCCESS_RETENTION_DAYS)
cutoff_error = fields.Datetime.subtract(now, days=ERROR_RETENTION_DAYS)
logs = self.search([
'|',
'&', ('state', '!=', 'failed'), ('create_date', '<', cutoff_success),
'&', ('state', '=', 'failed'), ('create_date', '<', cutoff_error),
]).unlink()
])
count = len(logs)
if count:
logs.unlink()
_logger.info("WooCommerce: purged %d old sync log entries", count)
def action_purge_old_logs(self):
"""Manual purge: delete success logs > 7 days, error logs > 30 days."""
self.env['woo.sync.log'].check_access_rights('unlink')
now = fields.Datetime.now()
cutoff_success = fields.Datetime.subtract(now, days=7)
cutoff_error = fields.Datetime.subtract(now, days=30)
logs = self.env['woo.sync.log'].search([
'|',
'&', ('state', '!=', 'failed'), ('create_date', '<', cutoff_success),
'&', ('state', '=', 'failed'), ('create_date', '<', cutoff_error),
])
count = len(logs)
logs.unlink()
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'title': 'Sync Logs Purged',
'message': f'{count} old log entries deleted.',
'type': 'success',
'next': {'type': 'ir.actions.act_window_close'},
},
}
@api.model
def action_clear_errors(self):
"""Clear all failed sync log entries. Called from dashboard."""
self.check_access_rights('unlink')
logs = self.search([('state', '=', 'failed')])
count = len(logs)
logs.unlink()
_logger.info("WooCommerce: manually cleared %d error log entries", count)
return count