random optimizations

fixes to watch history
fixes to library watch count
This commit is contained in:
tyler breese 2023-10-20 03:53:59 -04:00
commit 87eebeffe2
9 changed files with 114 additions and 91 deletions

View file

@ -427,7 +427,6 @@
if (s.media_type === 'track') {
// Update if artist changed
if (s.grandparent_rating_key !== instance.data('grandparent_rating_key').toString()) {
debugger;
$('#background-' + key).css('background-image', 'url(' + page('pms_image_proxy', s.art, s.rating_key, 500, 280, 40, '282828', 3, 'art', true, server_id=s.server_id) + ')');
$('#metadata-grandparent_title-' + key)
.attr('href', page('info', s.grandparent_rating_key, server_id=s.server_id))
@ -436,7 +435,6 @@
}
// Update cover if album changed
if (s.parent_rating_key !== instance.data('parent_rating_key').toString()) {
debugger;
$('#poster-' + key).css('background-image', 'url(' + page('pms_image_proxy', s.parent_thumb, s.parent_rating_key, 300, 300, null, null, null, 'poster', true, server_id=s.server_id) + ')');
$('#poster-' + key + '-bg').css('background-image', 'url(' + page('pms_image_proxy', s.parent_thumb, s.parent_rating_key, 300, 300, 60, '282828', 3, 'poster', true, server_id=s.server_id) + ')');
$('#poster-url-' + key)
@ -809,7 +807,6 @@
[height, fallback_poster, fallback_art] = [450, 'poster-live', 'art-live'];
}
var href = '#';
debugger;
if (stat_id === 'most_concurrent') {
return
} else if (stat_id === 'top_libraries') {

View file

@ -144,6 +144,8 @@ DEV = False
TRACKER = None
PLEX_REMOTE_ACCESS_UP = False
WIN_SYS_TRAY_ICON = None
MAC_SYS_TRAY_ICON = None

View file

@ -639,7 +639,7 @@ def schedule_callback(id, func=None, remove_job=False, args=None, **kwargs):
def force_stop_stream(session_key, title, user):
ap = activity_processor.ActivityProcessor()
session = ap.get_session_by_key(session_key=session_key)
if session:
row_id = ap.write_session_history(session=session)
if row_id:

View file

@ -231,7 +231,7 @@ class ActivityProcessor(object):
self.write_continued_session(user_id=session['user_id'],
machine_id=session['machine_id'],
media_type=session['media_type'],
stopped=stopped)
stopped=stopped, server_id=session['server_id'])
if str(session['rating_key']).isdigit() and session['media_type'] in ('movie', 'episode', 'track'):
logging_enabled = True
@ -278,7 +278,7 @@ class ActivityProcessor(object):
if not is_import:
logger.debug("Tautulli ActivityProcessor :: Fetching metadata for item ratingKey %s" % session['rating_key'])
for pms_connect in server_manager.ServerManger().get_server_list():
pms_connect = server_manager.ServerManger().get_server(server_id=session['server_id'])
if session['live']:
metadata = pms_connect.get_metadata_details(rating_key=str(session['rating_key']),
cache_key=session['session_key'],
@ -701,8 +701,8 @@ class ActivityProcessor(object):
"WHERE session_key = ?",
[1, session_key])
def write_continued_session(self, user_id=None, machine_id=None, media_type=None, stopped=None):
keys = {'user_id': user_id, 'machine_id': machine_id, 'media_type': media_type}
def write_continued_session(self, user_id=None, machine_id=None, media_type=None, stopped=None, server_id=None):
keys = {'user_id': user_id, 'machine_id': machine_id, 'media_type': media_type, 'server_id': server_id}
values = {'stopped': stopped}
self.db.upsert(table_name='sessions_continued', key_dict=keys, value_dict=values)

View file

@ -731,8 +731,8 @@ class DataFactory(object):
" GROUP BY %s) AS sh " \
"JOIN session_history_metadata AS shm ON shm.id = sh.id " \
"LEFT OUTER JOIN (SELECT * FROM library_sections WHERE deleted_section = 0) " \
" AS ls ON sh.section_id = ls.section_id " \
"GROUP BY sh.section_id " \
" AS ls ON sh.section_id = ls.section_id AND sh.server_id = ls.server_id " \
"GROUP BY sh.server_id " \
"ORDER BY %s DESC, sh.started DESC " \
"LIMIT %s OFFSET %s " % (timestamp, where_id, group_by, sort_type, stats_count, stats_start)
result = monitor_db.select(query)

View file

@ -87,6 +87,8 @@ class PmsConnect(object):
self.server_id = server_id
self.server_info = None
if not self.token:
# Check if we should use the admin token, or the guest server token
if session.get_session_user_id():
@ -118,7 +120,7 @@ class PmsConnect(object):
return request
def get_sessions_terminate(self, session_id='', reason='', server_id=None):
def get_sessions_terminate(self, session_id='', reason=''):
"""
Return current sessions.
@ -649,7 +651,7 @@ class PmsConnect(object):
'guids': guids,
'full_title': helpers.get_xml_attr(m, 'title'),
'child_count': helpers.get_xml_attr(m, 'childCount'),
'server_id': server_info['machine_identifier']
'server_id': self.server_id
}
recents_list.append(recent_item)
@ -2309,7 +2311,7 @@ class PmsConnect(object):
'optimized_version_profile': optimized_version_profile,
'user': user_details['username'], # Keep for backwards compatibility
'channel_stream': channel_stream,
'server_id': server_info['machine_identifier'],
'server_id': self.server_id,
'server_name': server_info['name'],
'server_ip': server_info['host'],
'server_port': server_info['port'],
@ -2332,7 +2334,7 @@ class PmsConnect(object):
return session_output
def terminate_session(self, session_key='', session_id='', message='', server_id=None):
def terminate_session(self, session_key='', session_id='', message=''):
"""
Terminates a streaming session.
"""
@ -2347,7 +2349,7 @@ class PmsConnect(object):
ap = activity_processor.ActivityProcessor()
if session_key:
session = ap.get_session_by_key(session_key=session_key, server_id=server_id)
session = ap.get_session_by_key(session_key=session_key, server_id=self.server_id)
if session and not session_id:
session_id = session['session_id']
@ -2359,7 +2361,7 @@ class PmsConnect(object):
if session_id:
logger.info("Tautulli Pmsconnect :: Terminating session %s (session_id %s)." % (session_key, session_id))
response = self.get_sessions_terminate(session_id=session_id, reason=message, server_id=server_id)
response = self.get_sessions_terminate(session_id=session_id, reason=message, server_id=self.server_id)
return response.ok
else:
msg = 'Missing session_id'
@ -2495,7 +2497,7 @@ class PmsConnect(object):
'labels': labels,
'collections': collections,
'full_title': helpers.get_xml_attr(m, 'title'),
'server_id': self.get_server_info()['machine_identifier']
'server_id': self.server_id
}
children_list.append(children_output)
@ -2602,17 +2604,21 @@ class PmsConnect(object):
def get_server_info(self):
"""
Return the base info of the current pms connection.
Return the base info of the current pms connection (cache it).
Output: dict
"""
server_info = {}
if self.server_info is None:
servers = self.get_servers_info()
current = self.get_server_identity()
current = ""
if self.server_id is not None:
current = self.server_id
else:
current = self.get_server_identity()['machine_identifier']
for server in servers:
if server['machine_identifier'] == current['machine_identifier']:
server_info = server
return server_info
if server['machine_identifier'] == current:
self.server_info = server
return self.server_info
def get_server_identity(self):
"""
@ -2633,7 +2639,8 @@ class PmsConnect(object):
server_identity = {"machine_identifier": helpers.get_xml_attr(a, 'machineIdentifier'),
"version": helpers.get_xml_attr(a, 'version'),
}
if self.server_id is None:
self.server_id = server_identity['machine_identifier']
return server_identity
def get_server_pref(self, pref=None):

View file

@ -21,24 +21,43 @@ if plexpy.PYTHON2:
else:
from plexpy import pmsconnect
pmsServers = []
totalServers = 0
class ServerManger(object):
"""
Return processed and validated library statistics.
Return list of cached servers
Output: array
Output: array of servers
"""
def get_server_list(self):
pmsServers = []
global totalServers
global pmsServers
if totalServers != 0 :
return pmsServers
for server in pmsconnect.PmsConnect().get_servers_info():
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
pmsServers.append(pmsconnect.PmsConnect(server['machine_identifier'], url=url))
totalServers = len(pmsServers)
return pmsServers
"""
Return server by id or None
Output: PmsConnect
"""
def get_server(self, server_id):
if server_id is not None:
global pmsServers
for server in pmsServers:
if server_id == server.server_id:
return server
for server in pmsconnect.PmsConnect().get_servers_info():
if server['machine_identifier'] == server_id:
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
return pmsconnect.PmsConnect(server_id, url=url)
new = pmsconnect.PmsConnect(server_id, url=url)
pmsServers.append(new)
return new
return None

View file

@ -92,7 +92,6 @@ class WebSocketServer(object):
self.WEBSOCKET = None
self.WS_CONNECTED = False
self.PLEX_SERVER_UP = None
self.PLEX_REMOTE_ACCESS_UP = None
self.server_id = server_id
def on_connect(self):

View file

@ -393,7 +393,7 @@ class WebInterface(object):
```
"""
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
result = pms_connect.terminate_session(session_key=session_key, session_id=session_id, message=message, server_id=server_id)
result = pms_connect.terminate_session(session_key=session_key, session_id=session_id, message=message)
if isinstance(result, str):
return {'result': 'error', 'message': 'Failed to terminate session: {}.'.format(result)}
@ -4845,7 +4845,8 @@ class WebInterface(object):
# the image does not exist, download it from pms
try:
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
if pms_connect is not None:
if pms_connect is None:
pms_connect = server_manager.ServerManger().get_server_list()[0]
pms_connect.request_handler._silent = True
result = pms_connect.get_image(img=img,
width=width,
@ -4866,8 +4867,6 @@ class WebInterface(object):
return result[0]
else:
raise Exception('PMS image request failed')
else:
raise Exception('PMS server not found')
except Exception as e:
logger.warn("Failed to get image %s, falling back to %s." % (img, fallback))