mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 15:56:07 -07:00
Attempt at improved library updating
This commit is contained in:
parent
9e83f6d779
commit
52bed5bf98
3 changed files with 55 additions and 33 deletions
|
@ -15,7 +15,7 @@
|
||||||
<div id="update_section_ids_message" style="text-align: center; margin-top: 20px;">
|
<div id="update_section_ids_message" style="text-align: center; margin-top: 20px;">
|
||||||
<i class="fa fa-refresh fa-spin"></i> PlexPy is updating library IDs in the database. This could take a few minutes to hours depending on the size of your database.
|
<i class="fa fa-refresh fa-spin"></i> PlexPy is updating library IDs in the database. This could take a few minutes to hours depending on the size of your database.
|
||||||
<br />
|
<br />
|
||||||
You may leave this page and come back later. Note: All monitoring has been disabled while this update is in progress.
|
You may leave this page and come back later.
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
<div class='table-card-header'>
|
<div class='table-card-header'>
|
||||||
|
@ -177,7 +177,7 @@
|
||||||
$("#refresh-libraries-list").click(function () {
|
$("#refresh-libraries-list").click(function () {
|
||||||
if ("${config['update_section_ids']}" == "1") {
|
if ("${config['update_section_ids']}" == "1") {
|
||||||
$('#update_section_ids_message').html(
|
$('#update_section_ids_message').html(
|
||||||
'<i class="fa fa-refresh fa-spin"></i> PlexPy is updating library IDs in the database. This could take a few minutes depending on the size of your database.' +
|
'<i class="fa fa-refresh fa-spin"></i> PlexPy is updating library IDs in the database. This could take a few minutes to hours depending on the size of your database.' +
|
||||||
'<br />' +
|
'<br />' +
|
||||||
'You may leave this page and come back later.');
|
'You may leave this page and come back later.');
|
||||||
$(this).prop('disabled', true);
|
$(this).prop('disabled', true);
|
||||||
|
|
|
@ -18,25 +18,27 @@ import plexpy
|
||||||
|
|
||||||
def update_section_ids():
|
def update_section_ids():
|
||||||
from plexpy import pmsconnect, activity_pinger
|
from plexpy import pmsconnect, activity_pinger
|
||||||
import threading
|
#import threading
|
||||||
|
|
||||||
plexpy.CONFIG.UPDATE_SECTION_IDS = -1
|
plexpy.CONFIG.UPDATE_SECTION_IDS = -1
|
||||||
|
|
||||||
logger.info(u"PlexPy Libraries :: Updating section_id's in database.")
|
logger.info(u"PlexPy Libraries :: Updating section_id's in database.")
|
||||||
|
|
||||||
logger.debug(u"PlexPy Libraries :: Disabling monitoring while update in progress.")
|
#logger.debug(u"PlexPy Libraries :: Disabling monitoring while update in progress.")
|
||||||
plexpy.schedule_job(activity_pinger.check_active_sessions, 'Check for active sessions',
|
#plexpy.schedule_job(activity_pinger.check_active_sessions, 'Check for active sessions',
|
||||||
hours=0, minutes=0, seconds=0)
|
# hours=0, minutes=0, seconds=0)
|
||||||
plexpy.schedule_job(activity_pinger.check_recently_added, 'Check for recently added items',
|
#plexpy.schedule_job(activity_pinger.check_recently_added, 'Check for recently added items',
|
||||||
hours=0, minutes=0, seconds=0)
|
# hours=0, minutes=0, seconds=0)
|
||||||
plexpy.schedule_job(activity_pinger.check_server_response, 'Check for server response',
|
#plexpy.schedule_job(activity_pinger.check_server_response, 'Check for server response',
|
||||||
hours=0, minutes=0, seconds=0)
|
# hours=0, minutes=0, seconds=0)
|
||||||
|
|
||||||
monitor_db = database.MonitorDatabase()
|
monitor_db = database.MonitorDatabase()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
query = 'SELECT id, rating_key FROM session_history_metadata WHERE section_id IS NULL'
|
query = 'SELECT id, rating_key FROM session_history_metadata WHERE section_id IS NULL'
|
||||||
result = monitor_db.select(query=query)
|
history_results = monitor_db.select(query=query)
|
||||||
|
query = 'SELECT section_id, section_type FROM library_sections'
|
||||||
|
library_results = monitor_db.select(query=query)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn(u"PlexPy Libraries :: Unable to execute database query for update_section_ids: %s." % e)
|
logger.warn(u"PlexPy Libraries :: Unable to execute database query for update_section_ids: %s." % e)
|
||||||
|
|
||||||
|
@ -44,36 +46,55 @@ def update_section_ids():
|
||||||
plexpy.CONFIG.__setattr__('UPDATE_SECTION_IDS', 1)
|
plexpy.CONFIG.__setattr__('UPDATE_SECTION_IDS', 1)
|
||||||
plexpy.CONFIG.write()
|
plexpy.CONFIG.write()
|
||||||
|
|
||||||
logger.debug(u"PlexPy Libraries :: Re-enabling monitoring.")
|
#logger.debug(u"PlexPy Libraries :: Re-enabling monitoring.")
|
||||||
plexpy.initialize_scheduler()
|
#plexpy.initialize_scheduler()
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Add thread filter to the logger
|
# Add thread filter to the logger
|
||||||
logger.debug(u"PlexPy Libraries :: Disabling logging in the current thread while update in progress.")
|
#logger.debug(u"PlexPy Libraries :: Disabling logging in the current thread while update in progress.")
|
||||||
thread_filter = logger.NoThreadFilter(threading.current_thread().name)
|
#thread_filter = logger.NoThreadFilter(threading.current_thread().name)
|
||||||
for handler in logger.logger.handlers:
|
#for handler in logger.logger.handlers:
|
||||||
handler.addFilter(thread_filter)
|
# handler.addFilter(thread_filter)
|
||||||
|
|
||||||
|
# Get rating_key: section_id mapping pairs
|
||||||
|
key_mappings = {}
|
||||||
|
section_type_child = {'movie': 'movie',
|
||||||
|
'show': 'episode',
|
||||||
|
'artist': 'track'}
|
||||||
|
|
||||||
pms_connect = pmsconnect.PmsConnect()
|
pms_connect = pmsconnect.PmsConnect()
|
||||||
|
for library in library_results:
|
||||||
|
section_id = library['section_id']
|
||||||
|
section_type = section_type_child.get(library['section_type'], None)
|
||||||
|
|
||||||
|
if section_type:
|
||||||
|
library_children = pms_connect.get_library_children_details(section_id=section_id,
|
||||||
|
section_type=section_type)
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if library_children:
|
||||||
|
children_list = library_children['childern_list']
|
||||||
|
key_mappings.update({child['rating_key']:child['section_id'] for child in children_list})
|
||||||
|
else:
|
||||||
|
logger.warn(u"PlexPy Libraries :: Unable to get a list of library items for section_id %s." % section_id)
|
||||||
|
|
||||||
error_keys = set()
|
error_keys = set()
|
||||||
for item in result:
|
for item in history_results:
|
||||||
id = item['id']
|
|
||||||
rating_key = item['rating_key']
|
rating_key = item['rating_key']
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=rating_key)
|
section_id = key_mappings.get(str(rating_key), None)
|
||||||
|
|
||||||
if metadata:
|
if section_id:
|
||||||
metadata = metadata['metadata']
|
section_keys = {'id': item['id']}
|
||||||
section_keys = {'id': id}
|
section_values = {'section_id': section_id}
|
||||||
section_values = {'section_id': metadata['section_id']}
|
|
||||||
monitor_db.upsert('session_history_metadata', key_dict=section_keys, value_dict=section_values)
|
monitor_db.upsert('session_history_metadata', key_dict=section_keys, value_dict=section_values)
|
||||||
else:
|
else:
|
||||||
error_keys.add(rating_key)
|
error_keys.add(rating_key)
|
||||||
|
|
||||||
# Remove thread filter from the logger
|
# Remove thread filter from the logger
|
||||||
for handler in logger.logger.handlers:
|
#for handler in logger.logger.handlers:
|
||||||
handler.removeFilter(thread_filter)
|
# handler.removeFilter(thread_filter)
|
||||||
logger.debug(u"PlexPy Libraries :: Re-enabling logging in the current thread.")
|
#logger.debug(u"PlexPy Libraries :: Re-enabling logging in the current thread.")
|
||||||
|
|
||||||
if error_keys:
|
if error_keys:
|
||||||
logger.info(u"PlexPy Libraries :: Updated all section_id's in database except for rating_keys: %s." %
|
logger.info(u"PlexPy Libraries :: Updated all section_id's in database except for rating_keys: %s." %
|
||||||
|
@ -84,8 +105,8 @@ def update_section_ids():
|
||||||
plexpy.CONFIG.__setattr__('UPDATE_SECTION_IDS', 0)
|
plexpy.CONFIG.__setattr__('UPDATE_SECTION_IDS', 0)
|
||||||
plexpy.CONFIG.write()
|
plexpy.CONFIG.write()
|
||||||
|
|
||||||
logger.debug(u"PlexPy Libraries :: Re-enabling monitoring.")
|
#logger.debug(u"PlexPy Libraries :: Re-enabling monitoring.")
|
||||||
plexpy.initialize_scheduler()
|
#plexpy.initialize_scheduler()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -72,10 +72,11 @@ def refresh_libraries():
|
||||||
plexpy.CONFIG.__setattr__('HOME_LIBRARY_CARDS', library_keys)
|
plexpy.CONFIG.__setattr__('HOME_LIBRARY_CARDS', library_keys)
|
||||||
plexpy.CONFIG.write()
|
plexpy.CONFIG.write()
|
||||||
|
|
||||||
if plexpy.CONFIG.UPDATE_SECTION_IDS == 1:
|
if plexpy.CONFIG.UPDATE_SECTION_IDS == 1 or plexpy.CONFIG.UPDATE_SECTION_IDS == -1:
|
||||||
from plexpy import libraries
|
from plexpy import libraries
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
# Start library section_id update on it's own thread
|
||||||
threading.Thread(target=libraries.update_section_ids).start()
|
threading.Thread(target=libraries.update_section_ids).start()
|
||||||
|
|
||||||
logger.info(u"PlexPy Pmsconnect :: Libraries list refreshed.")
|
logger.info(u"PlexPy Pmsconnect :: Libraries list refreshed.")
|
||||||
|
@ -1588,9 +1589,9 @@ class PmsConnect(object):
|
||||||
sort_type = ''
|
sort_type = ''
|
||||||
|
|
||||||
if str(section_id).isdigit():
|
if str(section_id).isdigit():
|
||||||
library_data = self.get_library_list(section_id, list_type, count, sort_type, output_format='xml')
|
library_data = self.get_library_list(str(section_id), list_type, count, sort_type, output_format='xml')
|
||||||
elif str(rating_key).isdigit():
|
elif str(rating_key).isdigit():
|
||||||
library_data = self.get_children_list(rating_key, output_format='xml')
|
library_data = self.get_children_list(str(rating_key), output_format='xml')
|
||||||
else:
|
else:
|
||||||
logger.warn(u"PlexPy Pmsconnect :: get_library_children called by invalid section_id or rating_key provided.")
|
logger.warn(u"PlexPy Pmsconnect :: get_library_children called by invalid section_id or rating_key provided.")
|
||||||
return []
|
return []
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue