You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
# Copyright 2016 ABF OSIELL <https://osiell.com>
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
import logging
|
|
from datetime import datetime, timedelta
|
|
|
|
from odoo import models, fields, api
|
|
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AuditlogAutovacuum(models.TransientModel):
|
|
_name = 'auditlog.autovacuum'
|
|
_description = "Auditlog - Delete old logs"
|
|
|
|
@api.model
|
|
def autovacuum(self, days):
|
|
"""Delete all logs older than ``days``. This includes:
|
|
- CRUD logs (create, read, write, unlink)
|
|
- HTTP requests
|
|
- HTTP user sessions
|
|
|
|
Called from a cron.
|
|
"""
|
|
days = (days > 0) and int(days) or 0
|
|
deadline = datetime.now() - timedelta(days=days)
|
|
data_models = (
|
|
'auditlog.log',
|
|
'auditlog.http.request',
|
|
'auditlog.http.session',
|
|
)
|
|
for data_model in data_models:
|
|
records = self.env[data_model].search(
|
|
[('create_date', '<=', fields.Datetime.to_string(deadline))])
|
|
nb_records = len(records)
|
|
records.unlink()
|
|
_logger.info(
|
|
"AUTOVACUUM - %s '%s' records deleted",
|
|
nb_records, data_model)
|
|
return True
|