Cache usernames for log filter

* Fixes #1705
This commit is contained in:
JonnyWong16 2022-07-18 15:31:23 -07:00
parent 9f1b7de623
commit 6e6de11aaa
No known key found for this signature in database
GPG key ID: B1F1F9807184697A
3 changed files with 25 additions and 13 deletions

View file

@ -548,6 +548,8 @@ def start():
global _STARTED global _STARTED
if _INITIALIZED: if _INITIALIZED:
logger.filter_usernames()
# Start refreshes on a separate thread # Start refreshes on a separate thread
threading.Thread(target=startup_refresh).start() threading.Thread(target=startup_refresh).start()

View file

@ -46,6 +46,7 @@ MAX_SIZE = 5000000 # 5 MB
MAX_FILES = 5 MAX_FILES = 5
_BLACKLIST_WORDS = set() _BLACKLIST_WORDS = set()
_FILTER_USERNAMES = []
# Tautulli logger # Tautulli logger
logger = logging.getLogger("tautulli") logger = logging.getLogger("tautulli")
@ -71,6 +72,19 @@ def blacklist_config(config):
_BLACKLIST_WORDS.update(blacklist) _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): class NoThreadFilter(logging.Filter):
""" """
Log filter for the current thread Log filter for the current thread
@ -126,18 +140,7 @@ class UsernameFilter(logging.Filter):
if not plexpy._INITIALIZED: if not plexpy._INITIALIZED:
return True return True
items = sorted( for username in _FILTER_USERNAMES:
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
try: try:
record.msg = self.replace(record.msg, username) record.msg = self.replace(record.msg, username)

View file

@ -60,6 +60,7 @@ def refresh_users():
# Keep track of user_id to update is_active status # Keep track of user_id to update is_active status
user_ids = [0] # Local user always considered active user_ids = [0] # Local user always considered active
new_users = []
for item in result: for item in result:
user_ids.append(helpers.cast_to_int(item['user_id'])) user_ids.append(helpers.cast_to_int(item['user_id']))
@ -92,11 +93,17 @@ def refresh_users():
if not item['username']: if not item['username']:
item['username'] = item['title'] 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))) 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) 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.") logger.info("Tautulli Users :: Users list refreshed.")
return True return True
else: else: