diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 861ff8fc..b11f46d7 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -548,6 +548,8 @@ def start(): global _STARTED if _INITIALIZED: + logger.filter_usernames() + # Start refreshes on a separate thread threading.Thread(target=startup_refresh).start() diff --git a/plexpy/logger.py b/plexpy/logger.py index 5a1c0f0f..a1631610 100644 --- a/plexpy/logger.py +++ b/plexpy/logger.py @@ -46,6 +46,7 @@ MAX_SIZE = 5000000 # 5 MB MAX_FILES = 5 _BLACKLIST_WORDS = set() +_FILTER_USERNAMES = [] # Tautulli logger logger = logging.getLogger("tautulli") @@ -71,6 +72,19 @@ def blacklist_config(config): _BLACKLIST_WORDS.update(blacklist) +def filter_usernames(new_users=None): + global _FILTER_USERNAMES + + if new_users is None: + new_users = [user['username'] for user in users.Users().get_users()] + + for username in new_users: + if username.lower() not in ('local', 'guest') and username not in _FILTER_USERNAMES: + _FILTER_USERNAMES.append(username) + + _FILTER_USERNAMES = sorted(_FILTER_USERNAMES, key=len, reverse=True) + + class NoThreadFilter(logging.Filter): """ Log filter for the current thread @@ -126,18 +140,7 @@ class UsernameFilter(logging.Filter): if not plexpy._INITIALIZED: return True - items = sorted( - users.Users().get_users(), - key=lambda x: len(x['username']), - reverse=True - ) - - for item in items: - username = item['username'] - - if username.lower() in ('local', 'guest'): - continue - + for username in _FILTER_USERNAMES: try: record.msg = self.replace(record.msg, username) diff --git a/plexpy/users.py b/plexpy/users.py index 2c988050..5ec093ff 100644 --- a/plexpy/users.py +++ b/plexpy/users.py @@ -60,6 +60,7 @@ def refresh_users(): # Keep track of user_id to update is_active status user_ids = [0] # Local user always considered active + new_users = [] for item in result: user_ids.append(helpers.cast_to_int(item['user_id'])) @@ -92,11 +93,17 @@ def refresh_users(): if not item['username']: item['username'] = item['title'] - monitor_db.upsert('users', key_dict=keys_dict, value_dict=item) + result = monitor_db.upsert('users', key_dict=keys_dict, value_dict=item) + + if result == 'insert': + new_users.append(item['username']) query = 'UPDATE users SET is_active = 0 WHERE user_id NOT IN ({})'.format(', '.join(['?'] * len(user_ids))) monitor_db.action(query=query, args=user_ids) + # Add new users to loger username filter + logger.filter_usernames(new_users) + logger.info("Tautulli Users :: Users list refreshed.") return True else: