Fix some log table styling.

Refresh user list on start-up and schedule refresh every 12 hours.
Handle malformed lines when reading Plex logs slightly more gracefully.
Send back empty list instead of None on some plex.tv requests.
This commit is contained in:
Tim 2015-07-04 12:20:37 +02:00
parent 0810584b46
commit b4f1bddc02
6 changed files with 63 additions and 30 deletions

View file

@ -19,11 +19,13 @@ var log_table_options = {
"columnDefs": [ "columnDefs": [
{ {
"targets": [0], "targets": [0],
"width": "15%" "width": "15%",
"className": "no-wrap"
}, },
{ {
"targets": [1], "targets": [1],
"width": "10%" "width": "10%",
"className": "no-wrap"
}, },
{ {
"targets": [2], "targets": [2],

View file

@ -19,11 +19,13 @@ var plex_log_table_options = {
"columnDefs": [ "columnDefs": [
{ {
"targets": [0], "targets": [0],
"width": "15%" "width": "15%",
"className": "no-wrap"
}, },
{ {
"targets": [1], "targets": [1],
"width": "10%" "width": "10%",
"className": "no-wrap"
}, },
{ {
"targets": [2], "targets": [2],

View file

@ -29,7 +29,7 @@ import uuid
from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger from apscheduler.triggers.interval import IntervalTrigger
from plexpy import versioncheck, logger, monitor from plexpy import versioncheck, logger, monitor, plextv
import plexpy.config import plexpy.config
PROG_DIR = None PROG_DIR = None
@ -162,6 +162,10 @@ def initialize(config_file):
else: else:
LATEST_VERSION = CURRENT_VERSION LATEST_VERSION = CURRENT_VERSION
# Refresh the users list on startup
if CONFIG.PMS_TOKEN:
plextv.refresh_users()
# Store the original umask # Store the original umask
UMASK = os.umask(0) UMASK = os.umask(0)
os.umask(UMASK) os.umask(UMASK)
@ -249,16 +253,21 @@ def initialize_scheduler():
# Check if scheduler should be started # Check if scheduler should be started
start_jobs = not len(SCHED.get_jobs()) start_jobs = not len(SCHED.get_jobs())
#Update check # Update check
if CONFIG.CHECK_GITHUB_INTERVAL: if CONFIG.CHECK_GITHUB_INTERVAL:
minutes = CONFIG.CHECK_GITHUB_INTERVAL minutes = CONFIG.CHECK_GITHUB_INTERVAL
else: else:
minutes = 0 minutes = 0
schedule_job(versioncheck.checkGithub, 'Check GitHub for updates', hours=0, minutes=minutes) schedule_job(versioncheck.checkGithub, 'Check GitHub for updates', hours=0, minutes=minutes)
# Start checking for new sessions every minute
if CONFIG.PMS_IP: if CONFIG.PMS_IP:
schedule_job(monitor.check_active_sessions, 'Check for active sessions', hours=0, minutes=0, seconds=60) schedule_job(monitor.check_active_sessions, 'Check for active sessions', hours=0, minutes=0, seconds=60)
# Refresh the users list every 12 hours (we will make this configurable later)
if CONFIG.PMS_TOKEN:
schedule_job(plextv.refresh_users, 'Refresh users list', hours=12, minutes=0, seconds=0)
# Start scheduler # Start scheduler
if start_jobs and len(SCHED.get_jobs()): if start_jobs and len(SCHED.get_jobs()):
try: try:

View file

@ -32,13 +32,23 @@ def get_log_tail(window=20):
return [] return []
log_lines = tail(logfile, window) log_lines = tail(logfile, window)
line_error = False
clean_lines = [] clean_lines = []
for i in log_lines: for i in log_lines:
log_time = i.split(' [')[0] try:
log_level = i.split('] ', 1)[1].split(' - ',1)[0] log_time = i.split(' [')[0]
log_msg = i.split('] ', 1)[1].split(' - ',1)[1] log_level = i.split('] ', 1)[1].split(' - ',1)[0]
full_line = [log_time, log_level, log_msg] log_msg = i.split('] ', 1)[1].split(' - ',1)[1]
clean_lines.append(full_line) full_line = [log_time, log_level, log_msg]
clean_lines.append(full_line)
except:
line_error = True
full_line = ['', '', 'Unable to parse log line.']
clean_lines.append(full_line)
if line_error:
logger.error('PlexPy was unable to parse some lines of the Plex Media Server log.')
return clean_lines return clean_lines

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, helpers, plexwatch from plexpy import logger, helpers, plexwatch, db
from xml.dom import minidom from xml.dom import minidom
from httplib import HTTPSConnection from httplib import HTTPSConnection
@ -21,6 +21,29 @@ from httplib import HTTPSConnection
import base64 import base64
import plexpy import plexpy
def refresh_users():
logger.info("Requesting users list refresh...")
result = PlexTV().get_full_users_list()
pw_db = db.DBConnection()
if len(result) > 0:
for item in result:
control_value_dict = {"username": item['username']}
new_value_dict = {"user_id": item['user_id'],
"username": item['username'],
"thumb": item['thumb'],
"email": item['email'],
"is_home_user": item['is_home_user'],
"is_allow_sync": item['is_allow_sync'],
"is_restricted": item['is_restricted']
}
pw_db.upsert('plexpy_users', new_value_dict, control_value_dict)
logger.info("Users list refreshed.")
else:
logger.warn("Unable to refresh users list.")
class PlexTV(object): class PlexTV(object):
""" """
@ -232,8 +255,10 @@ class PlexTV(object):
xml_parse = minidom.parseString(own_account) xml_parse = minidom.parseString(own_account)
except Exception, e: except Exception, e:
logger.warn("Error parsing XML for Plex account details: %s" % e) logger.warn("Error parsing XML for Plex account details: %s" % e)
return []
except: except:
logger.warn("Error parsing XML for Plex account details.") logger.warn("Error parsing XML for Plex account details.")
return []
xml_head = xml_parse.getElementsByTagName('user') xml_head = xml_parse.getElementsByTagName('user')
if not xml_head: if not xml_head:
@ -286,8 +311,10 @@ class PlexTV(object):
xml_parse = minidom.parseString(sync_list) xml_parse = minidom.parseString(sync_list)
except Exception, e: except Exception, e:
logger.warn("Error parsing XML for Plex sync lists: %s" % e) logger.warn("Error parsing XML for Plex sync lists: %s" % e)
return []
except: except:
logger.warn("Error parsing XML for Plex sync lists.") logger.warn("Error parsing XML for Plex sync lists.")
return []
xml_head = xml_parse.getElementsByTagName('SyncList') xml_head = xml_parse.getElementsByTagName('SyncList')

View file

@ -903,24 +903,7 @@ class WebInterface(object):
@cherrypy.expose @cherrypy.expose
def refresh_users_list(self, **kwargs): def refresh_users_list(self, **kwargs):
plex_tv = plextv.PlexTV() plextv.refresh_users()
result = plex_tv.get_full_users_list()
myDB = db.DBConnection()
for item in result:
control_value_dict = {"username": item['username']}
new_value_dict = {"user_id": item['user_id'],
"username": item['username'],
"thumb": item['thumb'],
"email": item['email'],
"is_home_user": item['is_home_user'],
"is_allow_sync": item['is_allow_sync'],
"is_restricted": item['is_restricted']
}
myDB.upsert('plexpy_users', new_value_dict, control_value_dict)
logger.info("Users list refreshed.")
raise cherrypy.HTTPRedirect("users") raise cherrypy.HTTPRedirect("users")
@cherrypy.expose @cherrypy.expose