mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-22 14:13:40 -07:00
random optimizations
fixes to watch history fixes to library watch count
This commit is contained in:
parent
4989464420
commit
87eebeffe2
9 changed files with 114 additions and 91 deletions
|
@ -427,7 +427,6 @@
|
||||||
if (s.media_type === 'track') {
|
if (s.media_type === 'track') {
|
||||||
// Update if artist changed
|
// Update if artist changed
|
||||||
if (s.grandparent_rating_key !== instance.data('grandparent_rating_key').toString()) {
|
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) + ')');
|
$('#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)
|
$('#metadata-grandparent_title-' + key)
|
||||||
.attr('href', page('info', s.grandparent_rating_key, server_id=s.server_id))
|
.attr('href', page('info', s.grandparent_rating_key, server_id=s.server_id))
|
||||||
|
@ -436,7 +435,6 @@
|
||||||
}
|
}
|
||||||
// Update cover if album changed
|
// Update cover if album changed
|
||||||
if (s.parent_rating_key !== instance.data('parent_rating_key').toString()) {
|
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).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-' + 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)
|
$('#poster-url-' + key)
|
||||||
|
@ -809,7 +807,6 @@
|
||||||
[height, fallback_poster, fallback_art] = [450, 'poster-live', 'art-live'];
|
[height, fallback_poster, fallback_art] = [450, 'poster-live', 'art-live'];
|
||||||
}
|
}
|
||||||
var href = '#';
|
var href = '#';
|
||||||
debugger;
|
|
||||||
if (stat_id === 'most_concurrent') {
|
if (stat_id === 'most_concurrent') {
|
||||||
return
|
return
|
||||||
} else if (stat_id === 'top_libraries') {
|
} else if (stat_id === 'top_libraries') {
|
||||||
|
|
|
@ -144,6 +144,8 @@ DEV = False
|
||||||
|
|
||||||
TRACKER = None
|
TRACKER = None
|
||||||
|
|
||||||
|
PLEX_REMOTE_ACCESS_UP = False
|
||||||
|
|
||||||
WIN_SYS_TRAY_ICON = None
|
WIN_SYS_TRAY_ICON = None
|
||||||
MAC_SYS_TRAY_ICON = None
|
MAC_SYS_TRAY_ICON = None
|
||||||
|
|
||||||
|
|
|
@ -639,7 +639,7 @@ def schedule_callback(id, func=None, remove_job=False, args=None, **kwargs):
|
||||||
def force_stop_stream(session_key, title, user):
|
def force_stop_stream(session_key, title, user):
|
||||||
ap = activity_processor.ActivityProcessor()
|
ap = activity_processor.ActivityProcessor()
|
||||||
session = ap.get_session_by_key(session_key=session_key)
|
session = ap.get_session_by_key(session_key=session_key)
|
||||||
|
if session:
|
||||||
row_id = ap.write_session_history(session=session)
|
row_id = ap.write_session_history(session=session)
|
||||||
|
|
||||||
if row_id:
|
if row_id:
|
||||||
|
|
|
@ -231,7 +231,7 @@ class ActivityProcessor(object):
|
||||||
self.write_continued_session(user_id=session['user_id'],
|
self.write_continued_session(user_id=session['user_id'],
|
||||||
machine_id=session['machine_id'],
|
machine_id=session['machine_id'],
|
||||||
media_type=session['media_type'],
|
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'):
|
if str(session['rating_key']).isdigit() and session['media_type'] in ('movie', 'episode', 'track'):
|
||||||
logging_enabled = True
|
logging_enabled = True
|
||||||
|
@ -278,7 +278,7 @@ class ActivityProcessor(object):
|
||||||
if not is_import:
|
if not is_import:
|
||||||
logger.debug("Tautulli ActivityProcessor :: Fetching metadata for item ratingKey %s" % session['rating_key'])
|
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']:
|
if session['live']:
|
||||||
metadata = pms_connect.get_metadata_details(rating_key=str(session['rating_key']),
|
metadata = pms_connect.get_metadata_details(rating_key=str(session['rating_key']),
|
||||||
cache_key=session['session_key'],
|
cache_key=session['session_key'],
|
||||||
|
@ -701,8 +701,8 @@ class ActivityProcessor(object):
|
||||||
"WHERE session_key = ?",
|
"WHERE session_key = ?",
|
||||||
[1, session_key])
|
[1, session_key])
|
||||||
|
|
||||||
def write_continued_session(self, user_id=None, machine_id=None, media_type=None, stopped=None):
|
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}
|
keys = {'user_id': user_id, 'machine_id': machine_id, 'media_type': media_type, 'server_id': server_id}
|
||||||
values = {'stopped': stopped}
|
values = {'stopped': stopped}
|
||||||
self.db.upsert(table_name='sessions_continued', key_dict=keys, value_dict=values)
|
self.db.upsert(table_name='sessions_continued', key_dict=keys, value_dict=values)
|
||||||
|
|
||||||
|
|
|
@ -731,8 +731,8 @@ class DataFactory(object):
|
||||||
" GROUP BY %s) AS sh " \
|
" GROUP BY %s) AS sh " \
|
||||||
"JOIN session_history_metadata AS shm ON shm.id = sh.id " \
|
"JOIN session_history_metadata AS shm ON shm.id = sh.id " \
|
||||||
"LEFT OUTER JOIN (SELECT * FROM library_sections WHERE deleted_section = 0) " \
|
"LEFT OUTER JOIN (SELECT * FROM library_sections WHERE deleted_section = 0) " \
|
||||||
" AS ls ON sh.section_id = ls.section_id " \
|
" AS ls ON sh.section_id = ls.section_id AND sh.server_id = ls.server_id " \
|
||||||
"GROUP BY sh.section_id " \
|
"GROUP BY sh.server_id " \
|
||||||
"ORDER BY %s DESC, sh.started DESC " \
|
"ORDER BY %s DESC, sh.started DESC " \
|
||||||
"LIMIT %s OFFSET %s " % (timestamp, where_id, group_by, sort_type, stats_count, stats_start)
|
"LIMIT %s OFFSET %s " % (timestamp, where_id, group_by, sort_type, stats_count, stats_start)
|
||||||
result = monitor_db.select(query)
|
result = monitor_db.select(query)
|
||||||
|
|
|
@ -87,6 +87,8 @@ class PmsConnect(object):
|
||||||
|
|
||||||
self.server_id = server_id
|
self.server_id = server_id
|
||||||
|
|
||||||
|
self.server_info = None
|
||||||
|
|
||||||
if not self.token:
|
if not self.token:
|
||||||
# Check if we should use the admin token, or the guest server token
|
# Check if we should use the admin token, or the guest server token
|
||||||
if session.get_session_user_id():
|
if session.get_session_user_id():
|
||||||
|
@ -118,7 +120,7 @@ class PmsConnect(object):
|
||||||
|
|
||||||
return request
|
return request
|
||||||
|
|
||||||
def get_sessions_terminate(self, session_id='', reason='', server_id=None):
|
def get_sessions_terminate(self, session_id='', reason=''):
|
||||||
"""
|
"""
|
||||||
Return current sessions.
|
Return current sessions.
|
||||||
|
|
||||||
|
@ -649,7 +651,7 @@ class PmsConnect(object):
|
||||||
'guids': guids,
|
'guids': guids,
|
||||||
'full_title': helpers.get_xml_attr(m, 'title'),
|
'full_title': helpers.get_xml_attr(m, 'title'),
|
||||||
'child_count': helpers.get_xml_attr(m, 'childCount'),
|
'child_count': helpers.get_xml_attr(m, 'childCount'),
|
||||||
'server_id': server_info['machine_identifier']
|
'server_id': self.server_id
|
||||||
}
|
}
|
||||||
|
|
||||||
recents_list.append(recent_item)
|
recents_list.append(recent_item)
|
||||||
|
@ -2309,7 +2311,7 @@ class PmsConnect(object):
|
||||||
'optimized_version_profile': optimized_version_profile,
|
'optimized_version_profile': optimized_version_profile,
|
||||||
'user': user_details['username'], # Keep for backwards compatibility
|
'user': user_details['username'], # Keep for backwards compatibility
|
||||||
'channel_stream': channel_stream,
|
'channel_stream': channel_stream,
|
||||||
'server_id': server_info['machine_identifier'],
|
'server_id': self.server_id,
|
||||||
'server_name': server_info['name'],
|
'server_name': server_info['name'],
|
||||||
'server_ip': server_info['host'],
|
'server_ip': server_info['host'],
|
||||||
'server_port': server_info['port'],
|
'server_port': server_info['port'],
|
||||||
|
@ -2332,7 +2334,7 @@ class PmsConnect(object):
|
||||||
|
|
||||||
return session_output
|
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.
|
Terminates a streaming session.
|
||||||
"""
|
"""
|
||||||
|
@ -2347,7 +2349,7 @@ class PmsConnect(object):
|
||||||
ap = activity_processor.ActivityProcessor()
|
ap = activity_processor.ActivityProcessor()
|
||||||
|
|
||||||
if session_key:
|
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:
|
if session and not session_id:
|
||||||
session_id = session['session_id']
|
session_id = session['session_id']
|
||||||
|
|
||||||
|
@ -2359,7 +2361,7 @@ class PmsConnect(object):
|
||||||
|
|
||||||
if session_id:
|
if session_id:
|
||||||
logger.info("Tautulli Pmsconnect :: Terminating session %s (session_id %s)." % (session_key, 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
|
return response.ok
|
||||||
else:
|
else:
|
||||||
msg = 'Missing session_id'
|
msg = 'Missing session_id'
|
||||||
|
@ -2495,7 +2497,7 @@ class PmsConnect(object):
|
||||||
'labels': labels,
|
'labels': labels,
|
||||||
'collections': collections,
|
'collections': collections,
|
||||||
'full_title': helpers.get_xml_attr(m, 'title'),
|
'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)
|
children_list.append(children_output)
|
||||||
|
|
||||||
|
@ -2602,17 +2604,21 @@ class PmsConnect(object):
|
||||||
|
|
||||||
def get_server_info(self):
|
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
|
Output: dict
|
||||||
"""
|
"""
|
||||||
server_info = {}
|
if self.server_info is None:
|
||||||
servers = self.get_servers_info()
|
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:
|
for server in servers:
|
||||||
if server['machine_identifier'] == current['machine_identifier']:
|
if server['machine_identifier'] == current:
|
||||||
server_info = server
|
self.server_info = server
|
||||||
return server_info
|
return self.server_info
|
||||||
|
|
||||||
def get_server_identity(self):
|
def get_server_identity(self):
|
||||||
"""
|
"""
|
||||||
|
@ -2633,7 +2639,8 @@ class PmsConnect(object):
|
||||||
server_identity = {"machine_identifier": helpers.get_xml_attr(a, 'machineIdentifier'),
|
server_identity = {"machine_identifier": helpers.get_xml_attr(a, 'machineIdentifier'),
|
||||||
"version": helpers.get_xml_attr(a, 'version'),
|
"version": helpers.get_xml_attr(a, 'version'),
|
||||||
}
|
}
|
||||||
|
if self.server_id is None:
|
||||||
|
self.server_id = server_identity['machine_identifier']
|
||||||
return server_identity
|
return server_identity
|
||||||
|
|
||||||
def get_server_pref(self, pref=None):
|
def get_server_pref(self, pref=None):
|
||||||
|
|
|
@ -21,24 +21,43 @@ if plexpy.PYTHON2:
|
||||||
else:
|
else:
|
||||||
from plexpy import pmsconnect
|
from plexpy import pmsconnect
|
||||||
|
|
||||||
|
pmsServers = []
|
||||||
|
totalServers = 0
|
||||||
|
|
||||||
class ServerManger(object):
|
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):
|
def get_server_list(self):
|
||||||
pmsServers = []
|
global totalServers
|
||||||
|
global pmsServers
|
||||||
|
if totalServers != 0 :
|
||||||
|
return pmsServers
|
||||||
for server in pmsconnect.PmsConnect().get_servers_info():
|
for server in pmsconnect.PmsConnect().get_servers_info():
|
||||||
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
|
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
|
||||||
pmsServers.append(pmsconnect.PmsConnect(server['machine_identifier'], url=url))
|
pmsServers.append(pmsconnect.PmsConnect(server['machine_identifier'], url=url))
|
||||||
|
totalServers = len(pmsServers)
|
||||||
return pmsServers
|
return pmsServers
|
||||||
|
|
||||||
|
"""
|
||||||
|
Return server by id or None
|
||||||
|
|
||||||
|
Output: PmsConnect
|
||||||
|
|
||||||
|
"""
|
||||||
def get_server(self, server_id):
|
def get_server(self, server_id):
|
||||||
if server_id is not None:
|
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():
|
for server in pmsconnect.PmsConnect().get_servers_info():
|
||||||
if server['machine_identifier'] == server_id:
|
if server['machine_identifier'] == server_id:
|
||||||
url = 'http://{hostname}:{port}'.format(hostname=server["host"], port=server["port"])
|
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
|
return None
|
|
@ -92,7 +92,6 @@ class WebSocketServer(object):
|
||||||
self.WEBSOCKET = None
|
self.WEBSOCKET = None
|
||||||
self.WS_CONNECTED = False
|
self.WS_CONNECTED = False
|
||||||
self.PLEX_SERVER_UP = None
|
self.PLEX_SERVER_UP = None
|
||||||
self.PLEX_REMOTE_ACCESS_UP = None
|
|
||||||
self.server_id = server_id
|
self.server_id = server_id
|
||||||
|
|
||||||
def on_connect(self):
|
def on_connect(self):
|
||||||
|
|
|
@ -393,7 +393,7 @@ class WebInterface(object):
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
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):
|
if isinstance(result, str):
|
||||||
return {'result': 'error', 'message': 'Failed to terminate session: {}.'.format(result)}
|
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
|
# the image does not exist, download it from pms
|
||||||
try:
|
try:
|
||||||
pms_connect = server_manager.ServerManger().get_server(server_id=server_id)
|
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
|
pms_connect.request_handler._silent = True
|
||||||
result = pms_connect.get_image(img=img,
|
result = pms_connect.get_image(img=img,
|
||||||
width=width,
|
width=width,
|
||||||
|
@ -4866,8 +4867,6 @@ class WebInterface(object):
|
||||||
return result[0]
|
return result[0]
|
||||||
else:
|
else:
|
||||||
raise Exception('PMS image request failed')
|
raise Exception('PMS image request failed')
|
||||||
else:
|
|
||||||
raise Exception('PMS server not found')
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn("Failed to get image %s, falling back to %s." % (img, fallback))
|
logger.warn("Failed to get image %s, falling back to %s." % (img, fallback))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue