Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions database_tools/data/backup_data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<field name="name">Database Backups</field>
<field name="model">db.database</field>
<field name="function">cron_database_backup</field>
<field name="interval_type">work_days</field>
<field name="interval_type">hours</field>
<field name="user_id" ref="base.user_root"/>
<!-- Pongo 05 asi ajusta con el gmt y queda a las 2 de AR -->
<field name="nextcall" eval="datetime.strftime(datetime.today()+timedelta(days=1),'%Y-%m-%d 05:%M:%S')"/>
Expand All @@ -23,7 +23,7 @@

<record id="db_self_database" model="db.database">
<field name="type">self</field>
<field name="backup_preserve_rule_ids" eval="[(6, False, [ref('backup_preserve_rule_daily'),ref('backup_preserve_rule_weekly'),ref('backup_preserve_rule_monthly')])]"/>
<field name="backup_preserve_rule_ids" eval="[(6, False, [ref('backup_preserve_rule_hourly'),ref('backup_preserve_rule_daily'),ref('backup_preserve_rule_weekly'),ref('backup_preserve_rule_monthly')])]"/>
</record>
</data>
</openerp>
8 changes: 8 additions & 0 deletions database_tools/data/backups_preserve_rules_data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
<openerp>
<data noupdate="1">

<record id="backup_preserve_rule_hourly" model="db.database.backup.preserve_rule">
<field name="name">Hourly (1/24)</field>
<field name="term" eval="1"/>
<field name="term_type">hourly</field>
<field name="interval" eval="24"/>
<field name="interval_type">hourly</field>
</record>

<record id="backup_preserve_rule_daily" model="db.database.backup.preserve_rule">
<field name="name">Daily (1/7)</field>
<field name="term" eval="7"/>
Expand Down
30 changes: 17 additions & 13 deletions database_tools/models/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@
import os
import shutil
from datetime import datetime
from datetime import date
from openerp import fields, models, api, _, modules
from openerp.exceptions import Warning
from openerp.service import db as db_ws
from dateutil.relativedelta import relativedelta
from openerp.addons.server_mode.mode import get_mode
import time
import logging
_logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -53,12 +51,13 @@ def _get_preserve_rules(self):
this folder'
# TODO agregar boton para probar que se tiene permisos
)
backup_next_date = fields.Date(
backup_next_date = fields.Datetime(
string='Date of Next Backup',
default=fields.Date.context_today,
required=True,
)
backup_rule_type = fields.Selection([
('hourly', 'Hour(s)'),
('daily', 'Day(s)'),
('weekly', 'Week(s)'),
('monthly', 'Month(s)'),
Expand Down Expand Up @@ -171,7 +170,7 @@ def cron_database_backup(self):
the parameter database.backups.enable with value True')
return False
_logger.info('Running backups cron')
current_date = time.strftime('%Y-%m-%d')
current_date = fields.Datetime.now()
# get databases
databases = self.search([
('backup_next_date', '<=', current_date),
Expand All @@ -181,8 +180,8 @@ def cron_database_backup(self):
# we make a loop to commit after each backup
for database in databases:
database.database_backup(
'automatic',
backup_format=self.backup_format)
bu_type='automatic',
backup_format=database.backup_format)
database._cr.commit()

# clean databases
Expand All @@ -196,7 +195,9 @@ def cron_database_backup(self):

@api.model
def relative_delta(self, from_date, interval, rule_type):
if rule_type == 'daily':
if rule_type == 'hourly':
next_date = from_date+relativedelta(hours=+interval)
elif rule_type == 'daily':
next_date = from_date+relativedelta(days=+interval)
elif rule_type == 'weekly':
next_date = from_date+relativedelta(weeks=+interval)
Expand All @@ -221,7 +222,7 @@ def database_backup_clean(self, bu_type=None):
* automatic or manual. only backups of that type are going to be kept
and going to be deleted
"""
term_to_date = date.today()
term_to_date = datetime.now()
preserve_backups_ids = []
for rule in self.backup_preserve_rule_ids:
term_from_date = self.relative_delta(
Expand All @@ -238,8 +239,10 @@ def database_backup_clean(self, bu_type=None):
interval_from_date, interval_to_date, self.ids))
domain = [
('database_id', 'in', self.ids),
('date', '>', interval_from_date.strftime('%Y-%m-%d')),
('date', '<=', interval_to_date.strftime('%Y-%m-%d')),
('date', '>', fields.Datetime.to_string(
interval_from_date)),
('date', '<=', fields.Datetime.to_string(
interval_to_date)),
]
if bu_type:
domain.append(('type', '=', bu_type))
Expand Down Expand Up @@ -321,19 +324,20 @@ def database_backup(self, bu_type, backup_format='zip'):
backup.close()
else:
backup.close()
database.backup_ids.create({
backup_vals = {
'database_id': database.id,
'name': backup_name,
'path': database.backups_path,
'date': now,
'type': bu_type,
})
}
database.backup_ids.create(backup_vals)
_logger.info('Backup %s Created' % backup_name)

if bu_type == 'automatic':
_logger.info('Reconfiguring next backup')
new_date = self.relative_delta(
date.today(),
datetime.now(),
self.backup_interval,
self.backup_rule_type)
database.backup_next_date = new_date
Expand Down
2 changes: 2 additions & 0 deletions database_tools/models/database_backup_preserve_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class db_database_backup_preserve_rule(models.Model):
required=True,
)
interval_type = fields.Selection([
('hourly', 'Hour(s)'),
('daily', 'Day(s)'),
('weekly', 'Week(s)'),
('monthly', 'Month(s)'),
Expand All @@ -31,6 +32,7 @@ class db_database_backup_preserve_rule(models.Model):
required=True,
)
term_type = fields.Selection([
('hourly', 'Hour(s)'),
('daily', 'Day(s)'),
('weekly', 'Week(s)'),
('monthly', 'Month(s)'),
Expand Down