From 42fc641fd9a7de17e5eff8d2d4244eeb11968a50 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Thu, 9 May 2019 14:22:47 +0530 Subject: [PATCH 1/2] feat(sync_site): sync site via central agent --- frappe/hooks.py | 3 ++- frappe/limits.py | 8 +++++++- frappe/utils/__init__.py | 5 ++++- frappe/utils/user.py | 15 ++++++++++----- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/frappe/hooks.py b/frappe/hooks.py index 0cd68d18f7..10d6d5457c 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -157,6 +157,7 @@ scheduler_events = { "frappe.utils.error.collect_error_snapshots", "frappe.desk.page.backups.backups.delete_downloadable_backups", "frappe.limits.update_space_usage", + "frappe.limits.update_site_usage", "frappe.desk.doctype.auto_repeat.auto_repeat.make_auto_repeat_entry", "frappe.deferred_insert.save_to_db", "frappe.desk.form.document_follow.send_hourly_updates" @@ -285,4 +286,4 @@ user_privacy_documents = [ 'applies_to_website_user': 1 }, -] \ No newline at end of file +] diff --git a/frappe/limits.py b/frappe/limits.py index fe800e3fe5..8295de5a34 100755 --- a/frappe/limits.py +++ b/frappe/limits.py @@ -5,7 +5,8 @@ from frappe.utils import now_datetime, getdate, flt, cint, get_fullname from frappe.installer import update_site_config from frappe.utils.data import formatdate from frappe.utils.user import get_enabled_system_users, disable_users -import os, subprocess +from frappe.utils.__init__ import get_site_info +import os, subprocess, json from six.moves.urllib.parse import parse_qsl, urlsplit, urlunsplit, urlencode from six import string_types @@ -225,3 +226,8 @@ def get_folder_size(path): if os.path.exists(path): return flt(subprocess.check_output(['du', '-ms', path]).split()[0], 2) +def update_site_usage(): + data = get_site_info() + with open(os.path.join(frappe.get_site_path(), 'site_data.json'), 'w') as outfile: + json.dump(data, outfile) + outfile.close() diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 78e6b56fe2..73cd7deec3 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -541,6 +541,8 @@ def get_site_info(): system_settings = frappe.db.get_singles_dict('System Settings') space_usage = frappe._dict((frappe.local.conf.limits or {}).get('space_usage', {})) + kwargs = {"fields": ["user", "creation", "full_name"], "filters":{"Operation": "Login", "Status": "Success"}, "limit": "10 + site_info = { 'installed_apps': get_installed_apps_info(), 'users': users, @@ -555,7 +557,8 @@ def get_site_info(): 'space_used': flt((space_usage.total or 0) / 1024.0, 2), 'database_size': space_usage.database_size, 'backup_size': space_usage.backup_size, - 'files_size': space_usage.files_size + 'files_size': space_usage.files_size, + 'last_logins': frappe.get_all("Activity Log", **kwargs) } # from other apps diff --git a/frappe/utils/user.py b/frappe/utils/user.py index 725fb3056a..22f1e964e3 100755 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -311,12 +311,17 @@ def disable_users(limits=None): return if limits.get('users'): - system_manager = get_system_managers(only_name=True)[-1] + system_manager = get_system_managers(only_name=True) + user_list = ['Administrator', 'Guest'] + if system_manager: + user_list.append(system_manager[-1]) #exclude system manager from active user list - active_users = frappe.db.sql_list("""select name from tabUser - where name not in ('Administrator', 'Guest', %s) and user_type = 'System User' and enabled=1 - order by creation desc""", system_manager) + # active_users = frappe.db.sql_list("""select name from tabUser + # where name not in ('Administrator', 'Guest', %s) and user_type = 'System User' and enabled=1 + # order by creation desc""", system_manager) + + active_users = frappe.get_all("User", filters={"user_type":"System User", "enabled":1, "name": ["not in", user_list]}, fields=["name"]) user_limit = cint(limits.get('users')) - 1 @@ -365,4 +370,4 @@ def get_users_with_role(role): WHERE `tabHas Role`.`role`=%s AND `tabUser`.`name`!='Administrator' AND `tabHas Role`.`parent`=`tabUser`.`name` - AND `tabUser`.`enabled`=1""", role)] \ No newline at end of file + AND `tabUser`.`enabled`=1""", role)] From 0eb9fc5eec1def4e919aa78d7e629e10e98c9f66 Mon Sep 17 00:00:00 2001 From: Sahil Khan Date: Thu, 9 May 2019 14:52:37 +0530 Subject: [PATCH 2/2] fix(sync_site): syntax error --- frappe/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 73cd7deec3..88d02be625 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -541,7 +541,7 @@ def get_site_info(): system_settings = frappe.db.get_singles_dict('System Settings') space_usage = frappe._dict((frappe.local.conf.limits or {}).get('space_usage', {})) - kwargs = {"fields": ["user", "creation", "full_name"], "filters":{"Operation": "Login", "Status": "Success"}, "limit": "10 + kwargs = {"fields": ["user", "creation", "full_name"], "filters":{"Operation": "Login", "Status": "Success"}, "limit": "10"} site_info = { 'installed_apps': get_installed_apps_info(),