fix: Better proxy for active site and disable on selfhosted

This commit is contained in:
Ankush Menat 2025-02-21 20:09:40 +05:30
parent 0d85bec58f
commit 6db7cb096d
3 changed files with 25 additions and 29 deletions

View file

@ -558,7 +558,8 @@
"fieldtype": "Datetime",
"label": "Last Active",
"no_copy": 1,
"read_only": 1
"read_only": 1,
"search_index": 1
},
{
"description": "Stores the JSON of last known versions of various installed apps. It is used to show release notes.",
@ -888,7 +889,7 @@
"link_fieldname": "user"
}
],
"modified": "2024-12-31 19:35:17.052698",
"modified": "2025-02-21 20:11:36.150167",
"modified_by": "Administrator",
"module": "Core",
"name": "User",
@ -920,6 +921,7 @@
],
"quick_entry": 1,
"route": "user",
"row_format": "Dynamic",
"search_fields": "full_name",
"show_name_in_global_search": 1,
"sort_field": "creation",

View file

@ -61,42 +61,34 @@ class TestScheduler(IntegrationTestCase):
# 1st job is in the queue (or running), don't enqueue it again
self.assertFalse(job.enqueue())
def test_is_dormant(self):
@patch.object(frappe.utils.frappecloud, "on_frappecloud", return_value=True)
@patch.dict(frappe.conf, {"developer_mode": 0})
def test_is_dormant(self, _mock):
last_activity = frappe.db.get_value("User", filters={}, fieldname="max(last_active)")
self.assertTrue(is_dormant(check_time=get_datetime("2100-01-01 00:00:00")))
self.assertTrue(is_dormant(check_time=add_days(frappe.db.get_last_created("Activity Log"), 5)))
self.assertFalse(is_dormant(check_time=frappe.db.get_last_created("Activity Log")))
self.assertTrue(is_dormant(check_time=add_days(last_activity, 5)))
self.assertFalse(is_dormant(check_time=last_activity))
def test_once_a_day_for_dormant(self):
@patch.object(frappe.utils.frappecloud, "on_frappecloud", return_value=True)
@patch.dict(frappe.conf, {"developer_mode": 0})
def test_once_a_day_for_dormant(self, _mocks):
last_activity = frappe.db.get_value("User", filters={}, fieldname="max(last_active)")
frappe.db.truncate("Scheduled Job Log")
self.assertTrue(schedule_jobs_based_on_activity(check_time=get_datetime("2100-01-01 00:00:00")))
self.assertTrue(
schedule_jobs_based_on_activity(
check_time=add_days(frappe.db.get_last_created("Activity Log"), 5)
)
)
self.assertTrue(schedule_jobs_based_on_activity(check_time=add_days(last_activity, 5)))
# create a fake job executed 5 days from now
job = get_test_job(method="frappe.tests.test_scheduler.test_method", frequency="Daily")
job.execute()
job_log = frappe.get_doc("Scheduled Job Log", dict(scheduled_job_type=job.name))
job_log.db_set(
"creation", add_days(_get_last_creation_timestamp("Activity Log"), 5), update_modified=False
)
job_log.db_set("creation", add_days(last_activity, 5), update_modified=False)
schedule_jobs_based_on_activity.clear_cache()
# inactive site with recent job, don't run
self.assertFalse(
schedule_jobs_based_on_activity(
check_time=add_days(_get_last_creation_timestamp("Activity Log"), 5)
)
)
self.assertFalse(schedule_jobs_based_on_activity(check_time=add_days(last_activity, 5)))
# one more day has passed
self.assertTrue(
schedule_jobs_based_on_activity(
check_time=add_days(_get_last_creation_timestamp("Activity Log"), 6)
)
)
self.assertTrue(schedule_jobs_based_on_activity(check_time=add_days(last_activity, 6)))
def test_real_time_alignment(self):
test_cases = {

View file

@ -220,17 +220,19 @@ def schedule_jobs_based_on_activity(check_time=None):
def is_dormant(check_time=None):
if frappe.conf.developer_mode:
return False # Assume never dormant if developer_mode is enabled
from frappe.utils.frappecloud import on_frappecloud
if frappe.conf.developer_mode or not on_frappecloud():
return False
threshold = cint(frappe.get_system_settings("dormant_days")) * 86400
if not threshold:
return False
last_activity_log_timestamp = _get_last_creation_timestamp("Activity Log")
last_activity = frappe.db.get_value("User", filters={}, fieldname="max(last_active)")
if not last_activity_log_timestamp:
if not last_activity:
return True
if ((check_time or now_datetime()) - last_activity_log_timestamp).total_seconds() >= threshold:
if ((check_time or now_datetime()) - last_activity).total_seconds() >= threshold:
return True
return False