Add server uptime

This commit is contained in:
Jonathan Wong 2015-11-17 19:31:13 -08:00
parent c3ea35806e
commit 4fffbf8a0c
5 changed files with 78 additions and 5 deletions

View file

@ -902,6 +902,10 @@ available_notification_agents = sorted(notifiers.available_notification_agents()
<td width="150"><strong>{server_name}</strong></td> <td width="150"><strong>{server_name}</strong></td>
<td>The name of your Plex Server.</td> <td>The name of your Plex Server.</td>
</tr> </tr>
<tr>
<td width="150"><strong>{server_uptime}</strong></td>
<td>The uptime (in days, hours, mins, secs) of your Plex Server.</td>
</tr>
<tr> <tr>
<td width="150"><strong>{user}</strong></td> <td width="150"><strong>{user}</strong></td>
<td>The username of the person streaming.</td> <td>The username of the person streaming.</td>

View file

@ -26,6 +26,8 @@ ping_count = 0
def check_active_sessions(ws_request=False): def check_active_sessions(ws_request=False):
with monitor_lock: with monitor_lock:
global ping_count
pms_connect = pmsconnect.PmsConnect() pms_connect = pmsconnect.PmsConnect()
session_list = pms_connect.get_current_activity() session_list = pms_connect.get_current_activity()
monitor_db = database.MonitorDatabase() monitor_db = database.MonitorDatabase()
@ -33,6 +35,7 @@ def check_active_sessions(ws_request=False):
# logger.debug(u"PlexPy Monitor :: Checking for active streams.") # logger.debug(u"PlexPy Monitor :: Checking for active streams.")
if session_list: if session_list:
ping_count = 0
media_container = session_list['sessions'] media_container = session_list['sessions']
# Check our temp table for what we must do with the new streams # Check our temp table for what we must do with the new streams
@ -164,7 +167,6 @@ def check_active_sessions(ws_request=False):
else: else:
logger.debug(u"PlexPy Monitor :: Unable to read session list.") logger.debug(u"PlexPy Monitor :: Unable to read session list.")
response = pms_connect.get_server_response() response = pms_connect.get_server_response()
global ping_count
if not response: if not response:
ping_count += 1 ping_count += 1

View file

@ -1,4 +1,4 @@
# This file is part of PlexPy. # This file is part of PlexPy.
# #
# PlexPy is free software: you can redistribute it and/or modify # PlexPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -144,6 +144,31 @@ def now():
now = datetime.datetime.now() now = datetime.datetime.now()
return now.strftime("%Y-%m-%d %H:%M:%S") return now.strftime("%Y-%m-%d %H:%M:%S")
def human_duration(s):
hd = ''
if str(s).isdigit():
d = int(s / 84600)
h = int((s % 84600) / 3600)
m = int(((s % 84600) % 3600) / 60)
s = int(((s % 84600) % 3600) % 60)
hd_list = []
if d > 0:
hd_list.append(str(d) + ' days')
if h > 0:
hd_list.append(str(h) + ' hrs')
if m > 0:
hd_list.append(str(m) + ' mins')
if s > 0:
hd_list.append(str(s) + ' secs')
hd = ' '.join(hd_list)
return hd
else:
return hd
def get_age(date): def get_age(date):

View file

@ -13,7 +13,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with PlexPy. If not, see <http://www.gnu.org/licenses/>. # along with PlexPy. If not, see <http://www.gnu.org/licenses/>.
from plexpy import logger, config, notifiers, database, helpers from plexpy import logger, config, notifiers, database, helpers, plextv, pmsconnect
import plexpy import plexpy
import time import time
@ -269,12 +269,22 @@ def set_notify_state(session, state, agent_info):
def build_notify_text(session=None, timeline=None, state=None): def build_notify_text(session=None, timeline=None, state=None):
from plexpy import pmsconnect
import re import re
# Get the server name # Get the server name
server_name = plexpy.CONFIG.PMS_NAME server_name = plexpy.CONFIG.PMS_NAME
# Get the server uptime
plex_tv = plextv.PlexTV()
server_times = plex_tv.get_server_times()
if server_times:
updated_at = server_times[0]['updated_at']
server_uptime = helpers.human_duration(int(time.time() - helpers.cast_to_float(updated_at)))
else:
logger.error(u"PlexPy Notifier :: Unable to retrieve server uptime.")
server_uptime = 'N/A'
# Get metadata feed for item # Get metadata feed for item
if session: if session:
rating_key = session['rating_key'] rating_key = session['rating_key']
@ -388,6 +398,7 @@ def build_notify_text(session=None, timeline=None, state=None):
progress_percent = helpers.get_percent(view_offset, duration) progress_percent = helpers.get_percent(view_offset, duration)
available_params = {'server_name': server_name, available_params = {'server_name': server_name,
'server_uptime': server_uptime,
'user': user, 'user': user,
'platform': platform, 'platform': platform,
'player': player, 'player': player,
@ -597,10 +608,22 @@ def build_server_notify_text(state=None):
# Get the server name # Get the server name
server_name = plexpy.CONFIG.PMS_NAME server_name = plexpy.CONFIG.PMS_NAME
# Get the server uptime
plex_tv = plextv.PlexTV()
server_times = plex_tv.get_server_times()
if server_times:
updated_at = server_times[0]['updated_at']
server_uptime = helpers.human_duration(int(time.time() - helpers.cast_to_float(updated_at)))
else:
logger.error(u"PlexPy Notifier :: Unable to retrieve server uptime.")
server_uptime = 'N/A'
on_down_subject = plexpy.CONFIG.NOTIFY_ON_DOWN_SUBJECT_TEXT on_down_subject = plexpy.CONFIG.NOTIFY_ON_DOWN_SUBJECT_TEXT
on_down_body = plexpy.CONFIG.NOTIFY_ON_DOWN_BODY_TEXT on_down_body = plexpy.CONFIG.NOTIFY_ON_DOWN_BODY_TEXT
available_params = {'server_name': server_name} available_params = {'server_name': server_name,
'server_uptime': server_uptime}
# Default text # Default text
subject_text = 'PlexPy (%s)' % server_name subject_text = 'PlexPy (%s)' % server_name

View file

@ -444,3 +444,22 @@ class PlexTV(object):
return clean_servers return clean_servers
return json.dumps(clean_servers, indent=4) return json.dumps(clean_servers, indent=4)
def get_server_times(self):
servers = self.get_plextv_server_list(output_format='xml')
server_times = []
try:
xml_head = servers.getElementsByTagName('Server')
except:
logger.warn("Error parsing XML for Plex servers.")
return []
for a in xml_head:
if helpers.get_xml_attr(a, 'machineIdentifier') == plexpy.CONFIG.PMS_IDENTIFIER:
server_times.append({"created_at": helpers.get_xml_attr(a, 'createdAt'),
"updated_at": helpers.get_xml_attr(a, 'updatedAt')
})
break
return server_times