From 9d7ee83c5e8f13f6ab17d9741c7bc2ed8d3dcce3 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 6 Oct 2016 17:17:55 +0530 Subject: [PATCH] [refactor] scheduler log is now error log and as MyISAM (commit not required) (#2152) * [refactor] scheduler log is now error log * [minor] new naming series * [fix] engine * [fix] saved by tests --- frappe/__init__.py | 4 +- frappe/config/core.py | 2 +- frappe/config/setup.py | 2 +- frappe/core/doctype/doctype/doctype.json | 77 ++++++++++++++++++- frappe/core/doctype/error_log/__init__.py | 0 frappe/core/doctype/error_log/error_log.js | 8 ++ .../error_log.json} | 14 +++- .../error_log.py} | 10 +-- .../error_log_list.js} | 2 +- .../core/doctype/error_log/test_error_log.py | 12 +++ frappe/core/doctype/scheduler_log/README.md | 1 - frappe/core/doctype/scheduler_log/__init__.py | 3 - .../doctype/scheduler_log/scheduler_log.js | 8 -- .../scheduler_log/test_scheduler_log.py | 12 --- frappe/core/notifications.py | 2 +- frappe/data/Framework.sql | 1 + frappe/email/queue.py | 2 +- frappe/email/receive.py | 4 +- frappe/hooks.py | 2 +- frappe/integrations/razorpay.py | 27 +++---- frappe/model/db_schema.py | 5 +- frappe/patches.txt | 3 +- .../patches/v5_0/expire_old_scheduler_logs.py | 4 +- .../v7_1/rename_scheduler_log_to_error_log.py | 7 ++ .../pages/integrations/razorpay_checkout.py | 8 +- frappe/utils/scheduler.py | 11 ++- 26 files changed, 151 insertions(+), 80 deletions(-) create mode 100644 frappe/core/doctype/error_log/__init__.py create mode 100644 frappe/core/doctype/error_log/error_log.js rename frappe/core/doctype/{scheduler_log/scheduler_log.json => error_log/error_log.json} (91%) rename frappe/core/doctype/{scheduler_log/scheduler_log.py => error_log/error_log.py} (62%) rename frappe/core/doctype/{scheduler_log/scheduler_log_list.js => error_log/error_log_list.js} (84%) create mode 100644 frappe/core/doctype/error_log/test_error_log.py delete mode 100644 frappe/core/doctype/scheduler_log/README.md delete mode 100644 frappe/core/doctype/scheduler_log/__init__.py delete mode 100644 frappe/core/doctype/scheduler_log/scheduler_log.js delete mode 100644 frappe/core/doctype/scheduler_log/test_scheduler_log.py create mode 100644 frappe/patches/v7_1/rename_scheduler_log_to_error_log.py diff --git a/frappe/__init__.py b/frappe/__init__.py index ea9934caf8..43ec436a7a 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1249,8 +1249,8 @@ def logger(module=None, with_more_info=True): return get_logger(module or 'default', with_more_info=with_more_info) def log_error(message, title=None): - '''Log error to Scheduler Log''' - get_doc(dict(doctype='Scheduler Log', error=str(message), + '''Log error to Error Log''' + get_doc(dict(doctype='Error Log', error=str(message), method=title)).insert(ignore_permissions=True) def get_desk_link(doctype, name): diff --git a/frappe/config/core.py b/frappe/config/core.py index e24e317f8a..bdf39dfb3f 100644 --- a/frappe/config/core.py +++ b/frappe/config/core.py @@ -43,7 +43,7 @@ def get_data(): "items": [ { "type": "doctype", - "name": "Scheduler Log", + "name": "Error Log", "description": _("Errors in Background Events"), }, { diff --git a/frappe/config/setup.py b/frappe/config/setup.py index b9018a8e9e..9dc8b1feaf 100644 --- a/frappe/config/setup.py +++ b/frappe/config/setup.py @@ -75,7 +75,7 @@ def get_data(): }, { "type": "doctype", - "name": "Scheduler Log", + "name": "Error Log", "description": _("Log of error on automated events (scheduler).") }, { diff --git a/frappe/core/doctype/doctype/doctype.json b/frappe/core/doctype/doctype/doctype.json index 2974bb3159..58f57fd740 100644 --- a/frappe/core/doctype/doctype/doctype.json +++ b/frappe/core/doctype/doctype/doctype.json @@ -11,11 +11,13 @@ "doctype": "DocType", "document_type": "Document", "editable_grid": 0, + "engine": "InnoDB", "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sb0", "fieldtype": "Section Break", "hidden": 0, @@ -41,6 +43,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "module", "fieldtype": "Link", "hidden": 0, @@ -68,6 +71,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Child Tables are shown as a Grid in other DocTypes.", "fieldname": "istable", "fieldtype": "Check", @@ -95,6 +99,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "1", "depends_on": "istable", "fieldname": "editable_grid", @@ -122,6 +127,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Single Types have only one record no tables associated. Values are stored in tabSingles", "fieldname": "issingle", "fieldtype": "Check", @@ -149,6 +155,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "cb01", "fieldtype": "Column Break", "hidden": 0, @@ -172,6 +179,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "document_type", "fieldtype": "Select", "hidden": 0, @@ -199,6 +207,35 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "default": "InnoDB", + "fieldname": "engine", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Database Engine", + "length": 0, + "no_copy": 0, + "options": "InnoDB\nMyISAM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "fieldname": "icon", "fieldtype": "Data", "hidden": 0, @@ -223,6 +260,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "custom", "fieldtype": "Check", "hidden": 0, @@ -247,6 +285,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "beta", "fieldtype": "Check", "hidden": 0, @@ -272,6 +311,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "0", "depends_on": "eval: doc.image_field", "fieldname": "image_view", @@ -299,6 +339,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "app", "fieldtype": "Data", "hidden": 1, @@ -323,6 +364,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "fields_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -348,6 +390,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "fields", "fieldtype": "Table", "hidden": 0, @@ -375,6 +418,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sb1", "fieldtype": "Section Break", "hidden": 0, @@ -399,6 +443,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Naming Options:\n
  1. field:[fieldname] - By Field
  2. naming_series: - By Naming Series (field called naming_series must be present
  3. Prompt - Prompt user for a name
  4. [series] - Series by prefix (separated by a dot); for example PRE.#####
", "fieldname": "autoname", "fieldtype": "Data", @@ -426,6 +471,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "name_case", "fieldtype": "Select", "hidden": 0, @@ -453,6 +499,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "description", "fieldtype": "Small Text", "hidden": 0, @@ -479,6 +526,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "column_break_15", "fieldtype": "Column Break", @@ -503,6 +551,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.istable", "description": "Show this field as title", "fieldname": "title_field", @@ -529,6 +578,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.istable", "fieldname": "search_fields", "fieldtype": "Data", @@ -556,6 +606,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Must be of type \"Attach Image\"", "fieldname": "image_field", "fieldtype": "Data", @@ -582,6 +633,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "modified", "depends_on": "eval:!doc.istable", "description": "", @@ -609,6 +661,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "DESC", "depends_on": "eval:!doc.istable", "fieldname": "sort_order", @@ -636,6 +689,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.istable", "description": "Comments and Communications will be associated with this linked document", "fieldname": "timeline_field", @@ -663,6 +717,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.istable", "fieldname": "sb2", "fieldtype": "Section Break", @@ -688,6 +743,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "permissions", "fieldtype": "Table", @@ -716,6 +772,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.istable", "fieldname": "sb3", "fieldtype": "Section Break", @@ -740,6 +797,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "cb30", "fieldtype": "Column Break", "hidden": 0, @@ -764,6 +822,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "in_create", "fieldtype": "Check", "hidden": 0, @@ -790,6 +849,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "read_only", "fieldtype": "Check", "hidden": 0, @@ -816,6 +876,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "is_submittable", "fieldtype": "Check", "hidden": 0, @@ -840,6 +901,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Allow Import via Data Import Tool", "fieldname": "allow_import", "fieldtype": "Check", @@ -865,6 +927,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "allow_rename", "fieldtype": "Check", "hidden": 0, @@ -891,6 +954,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "in_dialog", "fieldtype": "Check", "hidden": 0, @@ -917,6 +981,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "read_only_onload", "fieldtype": "Check", "hidden": 0, @@ -943,6 +1008,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "max_attachments", "fieldtype": "Int", "hidden": 0, @@ -969,6 +1035,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "cb31", "fieldtype": "Column Break", "hidden": 0, @@ -993,6 +1060,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "hide_heading", "fieldtype": "Check", "hidden": 0, @@ -1019,6 +1087,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "hide_toolbar", "fieldtype": "Check", "hidden": 0, @@ -1045,6 +1114,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "allow_copy", "fieldtype": "Check", "hidden": 0, @@ -1071,6 +1141,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "track_seen", "fieldtype": "Check", "hidden": 0, @@ -1096,6 +1167,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "1", "fieldname": "quick_entry", "fieldtype": "Check", @@ -1122,6 +1194,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "default_print_format", "fieldtype": "Data", "hidden": 0, @@ -1154,7 +1227,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-25 12:18:27.724194", + "modified": "2016-10-06 03:09:39.138857", "modified_by": "Administrator", "module": "Core", "name": "DocType", @@ -1170,6 +1243,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1190,6 +1264,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, diff --git a/frappe/core/doctype/error_log/__init__.py b/frappe/core/doctype/error_log/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/core/doctype/error_log/error_log.js b/frappe/core/doctype/error_log/error_log.js new file mode 100644 index 0000000000..4fe8fde5d6 --- /dev/null +++ b/frappe/core/doctype/error_log/error_log.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, Frappe Technologies and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Error Log', { + refresh: function(frm) { + + } +}); diff --git a/frappe/core/doctype/scheduler_log/scheduler_log.json b/frappe/core/doctype/error_log/error_log.json similarity index 91% rename from frappe/core/doctype/scheduler_log/scheduler_log.json rename to frappe/core/doctype/error_log/error_log.json index 4412a78a8a..b7e9e1808a 100644 --- a/frappe/core/doctype/scheduler_log/scheduler_log.json +++ b/frappe/core/doctype/error_log/error_log.json @@ -2,7 +2,7 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "SCHLOG.#####", + "autoname": "Error-.#####", "beta": 0, "creation": "2013-01-16 13:09:40", "custom": 0, @@ -10,11 +10,14 @@ "docstatus": 0, "doctype": "DocType", "document_type": "System", + "editable_grid": 0, + "engine": "MyISAM", "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "0", "fieldname": "seen", "fieldtype": "Check", @@ -41,6 +44,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "method", "fieldtype": "Data", "hidden": 0, @@ -48,7 +52,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, - "label": "Method", + "label": "Title", "length": 0, "no_copy": 0, "permlevel": 0, @@ -65,6 +69,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "error", "fieldtype": "Code", "hidden": 0, @@ -97,10 +102,10 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-03 14:24:13.581374", + "modified": "2016-10-06 03:29:47.810715", "modified_by": "Administrator", "module": "Core", - "name": "Scheduler Log", + "name": "Error Log", "owner": "Administrator", "permissions": [ { @@ -113,6 +118,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, diff --git a/frappe/core/doctype/scheduler_log/scheduler_log.py b/frappe/core/doctype/error_log/error_log.py similarity index 62% rename from frappe/core/doctype/scheduler_log/scheduler_log.py rename to frappe/core/doctype/error_log/error_log.py index 4af039c8ee..5feeb946c6 100644 --- a/frappe/core/doctype/scheduler_log/scheduler_log.py +++ b/frappe/core/doctype/error_log/error_log.py @@ -1,19 +1,17 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies and contributors # For license information, please see license.txt from __future__ import unicode_literals import frappe - from frappe.model.document import Document -class SchedulerLog(Document): +class ErrorLog(Document): def onload(self): if not self.seen: self.seen = 1 self.save() def set_old_logs_as_seen(): - frappe.db.sql("""update `tabScheduler Log` set seen=1 + frappe.db.sql("""update `tabError Log` set seen=1 where seen=0 and datediff(curdate(), creation) > 7""") diff --git a/frappe/core/doctype/scheduler_log/scheduler_log_list.js b/frappe/core/doctype/error_log/error_log_list.js similarity index 84% rename from frappe/core/doctype/scheduler_log/scheduler_log_list.js rename to frappe/core/doctype/error_log/error_log_list.js index bb37614d78..a50bfe31f3 100644 --- a/frappe/core/doctype/scheduler_log/scheduler_log_list.js +++ b/frappe/core/doctype/error_log/error_log_list.js @@ -1,4 +1,4 @@ -frappe.listview_settings['Scheduler Log'] = { +frappe.listview_settings['Error Log'] = { add_fields: ["seen"], get_indicator: function(doc) { if(cint(doc.seen)) { diff --git a/frappe/core/doctype/error_log/test_error_log.py b/frappe/core/doctype/error_log/test_error_log.py new file mode 100644 index 0000000000..d93fe07c61 --- /dev/null +++ b/frappe/core/doctype/error_log/test_error_log.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Error Log') + +class TestErrorLog(unittest.TestCase): + pass diff --git a/frappe/core/doctype/scheduler_log/README.md b/frappe/core/doctype/scheduler_log/README.md deleted file mode 100644 index c4691907ac..0000000000 --- a/frappe/core/doctype/scheduler_log/README.md +++ /dev/null @@ -1 +0,0 @@ -Log exceptions (errors) raised when executing the scheduler. \ No newline at end of file diff --git a/frappe/core/doctype/scheduler_log/__init__.py b/frappe/core/doctype/scheduler_log/__init__.py deleted file mode 100644 index 0e57cb68c3..0000000000 --- a/frappe/core/doctype/scheduler_log/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - diff --git a/frappe/core/doctype/scheduler_log/scheduler_log.js b/frappe/core/doctype/scheduler_log/scheduler_log.js deleted file mode 100644 index ac3b026934..0000000000 --- a/frappe/core/doctype/scheduler_log/scheduler_log.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Scheduler Log', { - refresh: function(frm) { - - } -}); diff --git a/frappe/core/doctype/scheduler_log/test_scheduler_log.py b/frappe/core/doctype/scheduler_log/test_scheduler_log.py deleted file mode 100644 index 39594cdd95..0000000000 --- a/frappe/core/doctype/scheduler_log/test_scheduler_log.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import frappe -import unittest - -# test_records = frappe.get_test_records('Scheduler Log') - -class TestSchedulerLog(unittest.TestCase): - pass diff --git a/frappe/core/notifications.py b/frappe/core/notifications.py index 3f68e137eb..b689905daa 100644 --- a/frappe/core/notifications.py +++ b/frappe/core/notifications.py @@ -7,7 +7,7 @@ import frappe def get_notification_config(): return { "for_doctype": { - "Scheduler Log": {"seen": 0}, + "Error Log": {"seen": 0}, "Communication": {"status": "Open", "communication_type": "Communication"}, "ToDo": "frappe.core.notifications.get_things_todo", "Event": "frappe.core.notifications.get_todays_events", diff --git a/frappe/data/Framework.sql b/frappe/data/Framework.sql index 1c0a2a91b7..61aec9a4ea 100644 --- a/frappe/data/Framework.sql +++ b/frappe/data/Framework.sql @@ -146,6 +146,7 @@ CREATE TABLE `tabDocType` ( `tag_fields` varchar(255) DEFAULT NULL, `subject` varchar(255) DEFAULT NULL, `_last_update` varchar(32) DEFAULT NULL, + `engine` varchar(20) DEFAULT 'InnoDB', `default_print_format` varchar(255) DEFAULT NULL, `is_submittable` int(1) NOT NULL DEFAULT 0, `_user_tags` varchar(255) DEFAULT NULL, diff --git a/frappe/email/queue.py b/frappe/email/queue.py index e07abd288a..93d0f00ffc 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -340,7 +340,7 @@ def send_one(email, smtpserver=None, auto_commit=True, now=False): raise e else: - # log to scheduler log + # log to Error Log log('frappe.email.queue.flush', unicode(e)) def clear_outbox(): diff --git a/frappe/email/receive.py b/frappe/email/receive.py index fb57674587..238abd8976 100644 --- a/frappe/email/receive.py +++ b/frappe/email/receive.py @@ -76,7 +76,7 @@ class EmailServer: return True except _socket.error: - # log performs rollback and logs error in scheduler log + # log performs rollback and logs error in Error Log log("receive.connect_pop") # Invalid mail server -- due to refusing connection @@ -185,7 +185,7 @@ class EmailServer: raise LoginLimitExceeded, e else: - # log performs rollback and logs error in scheduler log + # log performs rollback and logs error in Error Log log("receive.get_messages", self.make_error_msg(msg_num, incoming_mail)) self.errors = True frappe.db.rollback() diff --git a/frappe/hooks.py b/frappe/hooks.py index 68070096aa..3c2414cc44 100755 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -135,7 +135,7 @@ scheduler_events = { "daily": [ "frappe.email.queue.clear_outbox", "frappe.desk.notifications.clear_notifications", - "frappe.core.doctype.scheduler_log.scheduler_log.set_old_logs_as_seen", + "frappe.core.doctype.error_log.error_log.set_old_logs_as_seen", "frappe.desk.doctype.event.event.send_event_digest", "frappe.sessions.clear_expired_sessions", "frappe.email.doctype.email_alert.email_alert.trigger_daily_alerts", diff --git a/frappe/integrations/razorpay.py b/frappe/integrations/razorpay.py index 0217c6bd44..04b1d400d9 100644 --- a/frappe/integrations/razorpay.py +++ b/frappe/integrations/razorpay.py @@ -146,23 +146,16 @@ class Controller(IntegrationController): redirect_message = data.get('notes', {}).get('redirect_message') or None try: - for tries in xrange(3): - resp = self.get_request("https://api.razorpay.com/v1/payments/{0}" - .format(self.data.razorpay_payment_id), auth=(settings.api_key, - settings.api_secret)) - - if resp.get('status') == 'created': - # just created wait for a few seconds and try again - import time - time.sleep(0.5) - - elif resp.get("status") == "authorized": - self.integration_request.db_set('status', 'Authorized', update_modified=False) - self.flags.status_changed_to = "Authorized" - break - - if self.flags.status_changed_to != 'Authorized': - frappe.log_error(str(resp), 'Razorpay Payment not authorized') + resp = self.get_request("https://api.razorpay.com/v1/payments/{0}" + .format(self.data.razorpay_payment_id), auth=(settings.api_key, + settings.api_secret)) + + if resp.get("status") == "authorized": + self.integration_request.db_set('status', 'Authorized', update_modified=False) + self.flags.status_changed_to = "Authorized" + + else: + frappe.log_error(str(resp), 'Razorpay Payment not authorized') except: frappe.log_error(frappe.get_traceback()) diff --git a/frappe/model/db_schema.py b/frappe/model/db_schema.py index 183d4bbf8d..bdea7ccaf8 100644 --- a/frappe/model/db_schema.py +++ b/frappe/model/db_schema.py @@ -174,10 +174,11 @@ class DbTable: parenttype varchar({varchar_len}), idx int(8) not null default '0', %sindex parent(parent)) - ENGINE=InnoDB + ENGINE={engine} ROW_FORMAT=COMPRESSED CHARACTER SET=utf8mb4 - COLLATE=utf8mb4_unicode_ci""".format(varchar_len=varchar_len) % (self.name, add_text)) + COLLATE=utf8mb4_unicode_ci""".format(varchar_len=varchar_len, + engine=self.meta.engine or 'InnoDB') % (self.name, add_text)) def get_column_definitions(self): column_list = [] + default_columns diff --git a/frappe/patches.txt b/frappe/patches.txt index 06e61c83f0..571a7e15a7 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -1,4 +1,5 @@ execute:frappe.db.sql("""update `tabPatch Log` set patch=replace(patch, '.4_0.', '.v4_0.')""") #2014-05-12 +frappe.patches.v7_1.rename_scheduler_log_to_error_log frappe.patches.v5_0.convert_to_barracuda_and_utf8mb4 frappe.patches.v7_0.update_auth frappe.patches.v6_1.rename_file_data @@ -140,4 +141,4 @@ frappe.patches.v7_1.rename_chinese_language_codes execute:frappe.core.doctype.language.language.update_language_names() execute:frappe.db.set_value("Print Settings", "Print Settings", "add_draft_heading", 1) frappe.patches.v7_0.cleanup_list_settings -execute:frappe.db.set_default('language', '') \ No newline at end of file +execute:frappe.db.set_default('language', '') diff --git a/frappe/patches/v5_0/expire_old_scheduler_logs.py b/frappe/patches/v5_0/expire_old_scheduler_logs.py index 3c4b12a356..2d107d26f6 100644 --- a/frappe/patches/v5_0/expire_old_scheduler_logs.py +++ b/frappe/patches/v5_0/expire_old_scheduler_logs.py @@ -1,7 +1,7 @@ import frappe def execute(): - frappe.reload_doctype("Scheduler Log") + frappe.reload_doctype("Error Log") - from frappe.core.doctype.scheduler_log.scheduler_log import set_old_logs_as_seen + from frappe.core.doctype.error_log.error_log import set_old_logs_as_seen set_old_logs_as_seen() diff --git a/frappe/patches/v7_1/rename_scheduler_log_to_error_log.py b/frappe/patches/v7_1/rename_scheduler_log_to_error_log.py new file mode 100644 index 0000000000..a94963130b --- /dev/null +++ b/frappe/patches/v7_1/rename_scheduler_log_to_error_log.py @@ -0,0 +1,7 @@ +import frappe + +def execute(): + if not 'tabError Log' in frappe.db.get_tables(): + frappe.rename_doc('DocType', 'Scheduler Log', 'Error Log') + frappe.db.commit() + frappe.db.sql('alter table `tabError Log` engine=MyISAM') \ No newline at end of file diff --git a/frappe/templates/pages/integrations/razorpay_checkout.py b/frappe/templates/pages/integrations/razorpay_checkout.py index 6ed01d6010..61d28754ee 100644 --- a/frappe/templates/pages/integrations/razorpay_checkout.py +++ b/frappe/templates/pages/integrations/razorpay_checkout.py @@ -43,10 +43,4 @@ def make_payment(razorpay_payment_id, options, reference_doctype, reference_docn "reference_doctype": reference_doctype }) - # let razorpay commit its payments! - import time - time.sleep(0.5) - - data = Controller().create_request(data) - frappe.db.commit() - return data + return Controller().create_request(data) diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 347225e74a..54205589e5 100755 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -14,10 +14,9 @@ import frappe import json import schedule import time -import os import MySQLdb import frappe.utils -from frappe.utils import get_sites, get_site_path, touch_file +from frappe.utils import get_sites from datetime import datetime from background_jobs import enqueue, get_jobs, queue_timeout from frappe.limits import has_expired @@ -165,7 +164,7 @@ def log(method, message=None): frappe.db.rollback() frappe.db.begin() - d = frappe.new_doc("Scheduler Log") + d = frappe.new_doc("Error Log") d.method = method d.error = message d.insert(ignore_permissions=True) @@ -205,7 +204,7 @@ def disable_scheduler(): toggle_scheduler(False) def get_errors(from_date, to_date, limit): - errors = frappe.db.sql("""select modified, method, error from `tabScheduler Log` + errors = frappe.db.sql("""select modified, method, error from `tabError Log` where date(modified) between %s and %s and error not like '%%[Errno 110] Connection timed out%%' order by modified limit %s""", (from_date, to_date, limit), as_dict=True) @@ -223,11 +222,11 @@ def get_error_report(from_date=None, to_date=None, limit=10): errors = get_errors(from_date, to_date, limit) if errors: - return 1, """

Scheduler Failed Events (max {limit}):

+ return 1, """

Error Logs (max {limit}):

URL: {url}


{errors}""".format( limit=limit, url=get_url(), errors="
".join(errors)) else: - return 0, "

Scheduler didn't encounter any problems.

" + return 0, "

No error logs

" def scheduler_task(site, event, handler, now=False): '''This is a wrapper function that runs a hooks.scheduler_events method'''