Merge lp:~jfb-tempo-consulting/unifield-server/US-6010 into lp:unifield-server

Proposed by jftempo
Status: Merged
Merged at revision: 5532
Proposed branch: lp:~jfb-tempo-consulting/unifield-server/US-6010
Merge into: lp:unifield-server
Diff against target: 192 lines (+80/-5)
6 files modified
bin/addons/msf_doc_import/purchase_order.py (+4/-1)
bin/addons/msf_profile/i18n/fr_MF.po (+17/-0)
bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv (+1/-1)
bin/addons/sync_client/hq_monitor_view.xml (+18/-0)
bin/addons/sync_client/monitor.py (+2/-0)
bin/addons/sync_client/sync_client.py (+38/-3)
To merge this branch: bzr merge lp:~jfb-tempo-consulting/unifield-server/US-6010
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+373884@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/addons/msf_doc_import/purchase_order.py'
2--- bin/addons/msf_doc_import/purchase_order.py 2019-09-03 09:22:54 +0000
3+++ bin/addons/msf_doc_import/purchase_order.py 2019-10-09 13:13:17 +0000
4@@ -390,7 +390,9 @@
5 context.update({'po_not_found': True})
6
7 processed, rejected = [], []
8- for index, po_id in enumerate(po_ids):
9+ cr.execute('select id from purchase_order where id in %s for update skip locked', (tuple(po_ids),))
10+ index = 0
11+ for po_id, in cr.fetchall():
12 # generate report:
13 report_name = 'validated.purchase.order_xls' if export_wiz.export_format == 'excel' else 'validated.purchase.order_xml'
14 datas = {'ids': [po_id]}
15@@ -453,6 +455,7 @@
16 self.write(cr, uid, [po_id], {'auto_exported_ok': True}, context=context)
17 processed.append((index, [po_id, po_name]))
18 self.infolog(cr, uid, _('%s successfully exported') % po_name)
19+ index += 1
20
21 return processed, rejected, ['PO id', 'PO name']
22
23
24=== modified file 'bin/addons/msf_profile/i18n/fr_MF.po'
25--- bin/addons/msf_profile/i18n/fr_MF.po 2019-10-03 14:01:19 +0000
26+++ bin/addons/msf_profile/i18n/fr_MF.po 2019-10-09 13:13:17 +0000
27@@ -107550,3 +107550,20 @@
28 #, python-format
29 msgid "No Analytic Journal %s found for the Proprietary Instance %s."
30 msgstr "Aucun Journal Analytique %s trouvé pour l'Instance Propriétaire %s."
31+
32+#. module: sync_client
33+#: field:sync.version.instance.monitor,nb_late_vi:0
34+msgid "# late VI jobs"
35+msgstr "# tâches VI en retard"
36+
37+
38+#. module: sync_client
39+#: field:sync.version.instance.monitor,vi_details:0
40+msgid "Last exec VI job"
41+msgstr "Tâche VI dernière exec"
42+
43+#. module: sync_client
44+#: view:sync.version.instance.monitor:0
45+msgid "Late jobs"
46+msgstr "Tâches en retard"
47+
48
49=== modified file 'bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv'
50--- bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2019-09-06 13:45:52 +0000
51+++ bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2019-10-09 13:13:17 +0000
52@@ -146,7 +146,7 @@
53 msf_sync_data_server.button_access_rules2,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('is_remote_wh', '=', False)]","['active', 'comment', 'group_ids/id', 'group_names', 'label', 'model_id/id', 'name', 'type', 'view_id/id', 'xmlname', 'bar_type']",OC,msf_button_access_rights.button_access_rule,,Button Access Rules,Valid,,715
54 msf_sync_data_server.window_actions,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('res_model','!=','audittrail.log.line'), ('is_remote_wh', '=', False)]",['groups_id/id'],OC,ir.actions.act_window,,Window Action groups,Valid,,706
55 msf_sync_data.sync_monitor,TRUE,TRUE,FALSE,FALSE,bidirectional,Up,"[('status', '=', 'ok'),('instance_id', '!=', False)]","['instance_id/id', 'nb_msg_pull', 'nb_data_pull', 'nb_msg_push', 'nb_data_push', 'nb_msg_not_run', 'nb_data_not_run', 'start', 'end', 'destination_instance_id/id']",OC,sync.monitor,destination_instance_id,Sync Monitor,Valid,,720
56-msf_sync_data.sync_version_instance_monitor,TRUE,TRUE,FALSE,FALSE,bidirectional,Up,[],"['backup_date', 'backup_path', 'backup_size', 'instance_id/id', 'version', 'postgresql_disk_space', 'unifield_disk_space', 'cloud_date', 'cloud_backup', 'cloud_size']",OC,sync.version.instance.monitor,,Sync Version Instance Monitor,Valid,,725
57+msf_sync_data.sync_version_instance_monitor,TRUE,TRUE,FALSE,FALSE,bidirectional,Up,[],"['backup_date', 'backup_path', 'backup_size', 'instance_id/id', 'version', 'postgresql_disk_space', 'unifield_disk_space', 'cloud_date', 'cloud_backup', 'cloud_size', 'nb_late_vi', 'vi_details']",OC,sync.version.instance.monitor,,Sync Version Instance Monitor,Valid,,725
58 msf_sync_data_server.trigger_something,TRUE,TRUE,TRUE,TRUE,cp_to_rw,Down,"[]","['name']",OC,sync.trigger.something,,Trigger Something,Valid,,11
59 msf_sync_data.msf_instance_cloud,TRUE,TRUE,FALSE,FALSE,bidirectional,Bidirectional-Private,[],"['cloud_url', 'cloud_login', 'cloud_password', 'cloud_schedule_time', 'instance', 'cloud_retry_from', 'cloud_retry_to']",OC,msf.instance.cloud,instance,Cloud backup config,Valid,,728
60 msf_sync_data_server.ir_translation,TRUE,TRUE,TRUE,TRUE,cp_to_rw,Down,"[('res_id', '!=', 0), ('src', '!=', False), ('xml_id', '!=', False), ('lang', '!=', 'en_US'), ('type', '=', 'model'), ('name', 'in', ['res.partner.category,name','product.uom,name','product.template,description_purchase','product.template,description','product.template,description_sale','product.uom.categ,name','product.pricelist,name','product.category,name','product.nomenclature,name','product.product,form_value','product.product,function_value','product.product,fit_value','res.currency,currency_name','res.country,name','product.ul,name','product.price.type,name','product.pricelist.type,name','product.pricelist.version,name','account.analytic.account,name','account.fiscal.position,note','hr.employee.marital.status,name','account.period,name','account.tax.code,name','account.journal,name','account.tax,name','account.analytic.journal,name','account.account,name','stock.reason.type,name','product.template,name','product.justification.code,code'])]","['lang', 'src', 'name', 'value', 'type', 'xml_id']",OC,ir.translation,,Translations,Valid,,730
61
62=== modified file 'bin/addons/sync_client/hq_monitor_view.xml'
63--- bin/addons/sync_client/hq_monitor_view.xml 2018-05-04 09:58:02 +0000
64+++ bin/addons/sync_client/hq_monitor_view.xml 2019-10-09 13:13:17 +0000
65@@ -69,6 +69,8 @@
66 <field name="postgresql_disk_space" />
67 <field name="unifield_disk_space" />
68 <field name="instance_state" />
69+ <field name="nb_late_vi"/>
70+ <field name="vi_details" />
71 </tree>
72 </field>
73 </record>
74@@ -91,10 +93,25 @@
75 <field name="postgresql_disk_space"/>
76 <field name="unifield_disk_space"/>
77 <field name="instance_state"/>
78+ <field name="nb_late_vi"/>
79+ <field name="vi_details" colspan="4" />
80 </form>
81 </field>
82 </record>
83
84+ <record id="sync_hq_instance_version_search" model="ir.ui.view">
85+ <field name="name">sync.vestion.monitor.search</field>
86+ <field name="model">sync.version.instance.monitor</field>
87+ <field name="type">search</field>
88+ <field name="priority" eval="210" />
89+ <field name="arch" type="xml">
90+ <search>
91+ <filter string="Late jobs" icon="terp-gnome-cpu-frequency-applet+" domain="[('nb_late_vi', '>', 0)]"/>
92+ <field name="instance_id"/>
93+ </search>
94+ </field>
95+ </record>
96+
97 <record model="ir.actions.act_window" id="sync_hq_instance_version_action">
98 <field name="name">Version Instances Monitor</field>
99 <field name="res_model">sync.version.instance.monitor</field>
100@@ -102,6 +119,7 @@
101 <field name="view_mode">tree,form</field>
102 <field name="domain">[('instance_id', '!=', False)]</field>
103 <field name="view_id" ref="sync_hq_instance_version_tree" />
104+ <field name="search_view_id" ref="sync_hq_instance_version_search" />
105 </record>
106
107 <menuitem id="sync_hq_instance_version_menu" name="Version Instances Monitor"
108
109=== modified file 'bin/addons/sync_client/monitor.py'
110--- bin/addons/sync_client/monitor.py 2018-10-04 11:59:07 +0000
111+++ bin/addons/sync_client/monitor.py 2019-10-09 13:13:17 +0000
112@@ -379,6 +379,8 @@
113 'cloud_backup': fields.char('Cloud Dump', size=256, readonly=True),
114 'cloud_error': fields.text('Cloud last error', readonly=True),
115 'cloud_size': fields.integer('Cloud Size Zipped', readonly=True),
116+ 'nb_late_vi': fields.integer('# late VI jobs'),
117+ 'vi_details': fields.text('Last exec VI job'),
118 }
119
120 _defaults = {
121
122=== modified file 'bin/addons/sync_client/sync_client.py'
123--- bin/addons/sync_client/sync_client.py 2019-09-10 09:07:56 +0000
124+++ bin/addons/sync_client/sync_client.py 2019-10-09 13:13:17 +0000
125@@ -31,7 +31,7 @@
126 import os
127 import math
128 import hashlib
129-
130+import time
131 from random import random
132
133 from psycopg2 import OperationalError
134@@ -1248,21 +1248,56 @@
135 self._logger.info("Start synchronization")
136
137 version_instance_module = self.pool.get('sync.version.instance.monitor')
138+ version_data = {}
139 try:
140 version = self.pool.get('backup.config').get_server_version(cr, uid, context=context)
141 postgres_disk_space = version_instance_module._get_default_postgresql_disk_space(cr, uid)
142 unifield_disk_space = version_instance_module._get_default_unifield_disk_space(cr, uid)
143- version_instance_module.create(cr, uid, {
144+ version_data = {
145 'version': version,
146 'postgresql_disk_space': postgres_disk_space,
147 'unifield_disk_space': unifield_disk_space,
148- }, context=context)
149+ }
150+
151
152 except Exception:
153 cr.rollback()
154 logging.getLogger('version.instance.monitor').exception('Cannot generate instance monitor data')
155 # do not block sync
156 pass
157+
158+ try:
159+ # list VI jobs
160+ job_details = []
161+ nb_late = 0
162+ now = time.strftime('%Y-%m-%d %H:%M:%S')
163+
164+ dt_format = '%d/%b/%Y %H:%M'
165+ for auto_job in ['automated.export', 'automated.import']:
166+ job_obj = self.pool.get(auto_job)
167+ job_ids = job_obj.search(cr, uid, [('active', '=', True), ('cron_id', '!=', False)], context=context)
168+ if job_ids:
169+ end_time_by_job = {}
170+ job_field = "%s_id" % auto_job.split('.')[-1]
171+ cr.execute("select "+job_field+", max(end_time) from "+auto_job.replace('.', '_')+"_job where "+job_field+" in %s and state in ('done', 'error') group by "+job_field, (tuple(job_ids), )) # not_a_user_entry
172+ for end in cr.fetchall():
173+ end_time_by_job[end[0]] = end[1] and time.strftime(dt_format, time.strptime(end[1], '%Y-%m-%d %H:%M:%S'))
174+
175+ for job in job_obj.browse(cr, uid, job_ids, fields_to_fetch=['name', 'cron_id', 'last_exec'], context=context):
176+ if job.cron_id.nextcall < now:
177+ nb_late += 1
178+ job_name = '%s*' % job.name
179+ else:
180+ job_name = job.name
181+
182+ job_details.append('%s: %s' % (job_name, end_time_by_job.get(job.id, 'never')))
183+
184+ version_data['nb_late_vi'] = nb_late
185+ version_data['vi_details'] = "\n".join(job_details)
186+ version_instance_module.create(cr, uid, version_data, context=context)
187+ except Exception:
188+ cr.rollback()
189+ logging.getLogger('version.instance.monitor').exception('Cannot generate instance monitor data')
190 self.check_user_rights(cr, uid, context=context)
191 self.set_rules(cr, uid, context=context)
192 self.pull_update(cr, uid, context=context)

Subscribers

People subscribed via source and target branches