Compare commits

...

4 Commits

Author SHA1 Message Date
JonnyWong16
35a0242037 v2.2.3 2020-05-01 09:22:35 -07:00
JonnyWong16
e2e7063a29 Expose remote access check settings in the UI 2020-04-28 18:39:12 -07:00
JonnyWong16
03035d0eac Prevent spamming the logs with remote access failures 2020-04-28 18:04:05 -07:00
JonnyWong16
7ce9283421 Fix geopip lookup for IPv6 addresses 2020-04-28 08:42:00 -07:00
7 changed files with 57 additions and 30 deletions

View File

@@ -1,36 +1,28 @@
# Changelog # Changelog
## v2.2.3-beta (2020-04-27) ## v2.2.3 (2020-05-01)
* Notifications: * Notifications:
* Fix: Notification grouping by season/album and show/artist not enabled by default.
* Fix: The rating key notification parameter was being overwritten when 3rd party lookup was enabled.
* Fix: Missing artist value for Musicbrainz lookup in certain situations.
* New: Added notification trigger for Tautulli database corruption.
* New: Added TAUTULLI_PYTHON_VERSION to script notification environment variables.
* New: Added Plex Android / iOS App notification agent. * New: Added Plex Android / iOS App notification agent.
* New: Added bandwidth notification parameters. * New: Added bandwidth notification parameters.
* New: Added user thumb to notification parameters. * New: Added user thumb to notification parameters.
* New: Added initial stream notification parameter and threshold setting to determine if a stream is the first stream of a continuous streaming session. * New: Added initial stream notification parameter and threshold setting to determine if a stream is the first stream of a continuous streaming session.
* New: Added Plex remote access notification parameters. * New: Added Plex remote access notification parameters.
* Fix: The rating key notification parameter was being overwritten when 3rd party lookup was enabled.
* Fix: Missing artist value for Musicbrainz lookup in certain situations.
* UI:
* Fix: History table was not being refreshed after deleting entries.
* Other:
* Fix: Auto-updater was not scheduled when enabling the setting unless Tautulli was restarted.
* Change: Remove the unnecessary optional Plex logs volume from the Docker image.
* Change: Use Plex.tv for GeoIP lookup instead of requiring the MaxMind GeoLite2 database.
## v2.2.2-beta (2020-04-12)
* Notifications:
* New: Added notification trigger for Tautulli database corruption.
* New: Added TAUTULLI_PYTHON_VERSION to script notification environment variables.
* Fix: Notification grouping by season/album and show/artist not enabled by default.
* Change: The file size notification parameter is now reported in SI units. (Thanks @aaronldunlap) * Change: The file size notification parameter is now reported in SI units. (Thanks @aaronldunlap)
* UI: * UI:
* Fix: Delete lookup info from the media info page failing. * Fix: Delete lookup info from the media info page failing.
* Fix: XBMC platform icon not being redirected to the Kodi platform icon.
* Fix: History table was not being refreshed after deleting entries.
* New: Added icon on the users table to indicate if the user is not on the Plex server. * New: Added icon on the users table to indicate if the user is not on the Plex server.
* New: Added icon on the libraries table to indicate if the library is not on the Plex server. * New: Added icon on the libraries table to indicate if the library is not on the Plex server.
* Fix: XBMC platform icon not being redirected to the Kodi platform icon.
* Change: Improved deleting libraries so libraries with the same section ID are not also deleted. * Change: Improved deleting libraries so libraries with the same section ID are not also deleted.
* Mobile App:
* Fix: Temporary device token was not being invalidated after cancelling device registration.
* API: * API:
* Fix: Returning XML from the API failing due to unicode characters. * Fix: Returning XML from the API failing due to unicode characters.
* Fix: Grouping parameter for various API commands not falling back to default setting. * Fix: Grouping parameter for various API commands not falling back to default setting.
@@ -38,12 +30,13 @@
* New: Added an "is_active" return value to the get_user, get_users, get_library, and get_libraries API commands which indicates if the user or library is on the Plex server. * New: Added an "is_active" return value to the get_user, get_users, get_library, and get_libraries API commands which indicates if the user or library is on the Plex server.
* New: Added delete_history API command. * New: Added delete_history API command.
* Change: Added optional parameter for row_ids for delete_library, delete_user, delete_all_library_history, and delete_all_user_history API commands. * Change: Added optional parameter for row_ids for delete_library, delete_user, delete_all_library_history, and delete_all_user_history API commands.
* Mobile App:
* Fix: Temporary device token was not being invalidated after cancelling device registration.
* Other: * Other:
* Fix: Update failing on CentOS due to an older git version. * Fix: Update failing on CentOS due to an older git version.
* Fix: Manifest file for creating a web app had incorrect info. * Fix: Manifest file for creating a web app had incorrect info.
* Fix: Auto-updater was not scheduled when enabling the setting unless Tautulli was restarted.
* New: Docker images updated to support ARM platforms. * New: Docker images updated to support ARM platforms.
* Change: Remove the unnecessary optional Plex logs volume from the Docker image.
* Change: Use Plex.tv for GeoIP lookup instead of requiring the MaxMind GeoLite2 database.
## v2.2.1 (2020-03-28) ## v2.2.1 (2020-03-28)

View File

@@ -79,7 +79,7 @@
$('#ip_error').html('<i class="fa fa-exclamation-circle"></i> Internal request failed.').show(); $('#ip_error').html('<i class="fa fa-exclamation-circle"></i> Internal request failed.').show();
}, },
success: function (result) { success: function (result) {
if (result.results === 'error') { if (result.result === 'error') {
$('#ip_error').html('<i class="fa fa-exclamation-circle"></i> ' + result.message).show(); $('#ip_error').html('<i class="fa fa-exclamation-circle"></i> ' + result.message).show();
} else { } else {
var data = result.data; var data = result.data;

View File

@@ -850,6 +850,28 @@
<span id="remoteAccessCheck" class="settings-warning"></span> <span id="remoteAccessCheck" class="settings-warning"></span>
<p class="help-block">Enable to have Tautulli check if remote access to the Plex Media Server goes down.</p> <p class="help-block">Enable to have Tautulli check if remote access to the Plex Media Server goes down.</p>
</div> </div>
<div id="monitor_remote_access_options">
<div class="form-group advanced-setting">
<label for="remote_access_ping_interval">Remote Access Ping Interval</label>
<div class="row">
<div class="col-md-2">
<input type="text" class="form-control" data-parsley-type="integer" id="remote_access_ping_interval" name="remote_access_ping_interval" value="${config['remote_access_ping_interval']}" size="5" data-parsley-min="60" data-parsley-trigger="change" data-parsley-errors-container="#remote_access_ping_interval_error" required>
</div>
<div id="remote_access_ping_interval_error" class="alert alert-danger settings-alert" role="alert"></div>
</div>
<p class="help-block">The interval (in seconds) Tautulli will ping the Plex Media Server for the remote access status. Minimum 60.</p>
</div>
<div class="form-group advanced-setting">
<label for="remote_access_ping_threshold">Remote Access Ping Threshold</label>
<div class="row">
<div class="col-md-2">
<input type="text" class="form-control" data-parsley-type="integer" id="remote_access_ping_threshold" name="remote_access_ping_threshold" value="${config['remote_access_ping_threshold']}" size="5" data-parsley-min="1" data-parsley-trigger="change" data-parsley-errors-container="#remote_access_ping_threshold_error" required>
</div>
<div id="remote_access_ping_threshold_error" class="alert alert-danger settings-alert" role="alert"></div>
</div>
<p class="help-block">The number of consecutive remote access status failures to consider remote access as down. Minimum 1.</p>
</div>
</div>
<div class="form-group advanced-setting"> <div class="form-group advanced-setting">
<label for="refresh_users_interval">Users List Refresh Interval</label> <label for="refresh_users_interval">Users List Refresh Interval</label>
@@ -2043,6 +2065,7 @@ $(document).ready(function() {
initConfigCheckbox('#https_create_cert'); initConfigCheckbox('#https_create_cert');
initConfigCheckbox('#check_github'); initConfigCheckbox('#check_github');
initConfigCheckbox('#monitor_pms_updates'); initConfigCheckbox('#monitor_pms_updates');
initConfigCheckbox('#monitor_remote_access');
initConfigCheckbox('#newsletter_self_hosted'); initConfigCheckbox('#newsletter_self_hosted');
$('#menu_link_shutdown').click(function() { $('#menu_link_shutdown').click(function() {

View File

@@ -31,6 +31,7 @@ import web_socket
monitor_lock = threading.Lock() monitor_lock = threading.Lock()
ext_ping_count = 0 ext_ping_count = 0
ext_ping_error = None
int_ping_count = 0 int_ping_count = 0
@@ -309,17 +310,24 @@ def check_server_access():
server_response = pms_connect.get_server_response() server_response = pms_connect.get_server_response()
global ext_ping_count global ext_ping_count
global ext_ping_error
# Check for remote access # Check for remote access
if server_response: if server_response:
log = (server_response['mapping_error'] != ext_ping_error)
if server_response['reason']: if server_response['reason']:
ext_ping_count += 1 ext_ping_count += 1
logger.warn(u"Tautulli Monitor :: Remote access failed: %s, ping attempt %s." \ ext_ping_error = server_response['mapping_error']
if log:
logger.warn(u"Tautulli Monitor :: Remote access failed: %s, ping attempt %s."
% (server_response['reason'], str(ext_ping_count))) % (server_response['reason'], str(ext_ping_count)))
# Waiting for port mapping # Waiting for port mapping
elif server_response['mapping_state'] == 'waiting': elif server_response['mapping_state'] == 'waiting':
logger.warn(u"Tautulli Monitor :: Remote access waiting for port mapping, ping attempt %s." \ ext_ping_error = server_response['mapping_error']
if log:
logger.warn(u"Tautulli Monitor :: Remote access waiting for port mapping, ping attempt %s."
% str(ext_ping_count)) % str(ext_ping_count))
# Reset external ping counter # Reset external ping counter
@@ -330,8 +338,10 @@ def check_server_access():
plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extup', 'remote_access_info': server_response}) plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extup', 'remote_access_info': server_response})
ext_ping_count = 0 ext_ping_count = 0
ext_ping_error = None
if ext_ping_count == plexpy.CONFIG.REMOTE_ACCESS_PING_THRESHOLD: if ext_ping_count == plexpy.CONFIG.REMOTE_ACCESS_PING_THRESHOLD:
logger.info(u"Tautulli Monitor: Plex remote access is down.")
plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extdown', 'remote_access_info': server_response}) plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extdown', 'remote_access_info': server_response})

View File

@@ -933,7 +933,7 @@ class PlexTV(object):
return account_details return account_details
def get_geoip_lookup(self, ip_address=''): def get_geoip_lookup(self, ip_address=''):
if not ip_address or not helpers.is_public_ip(ip_address): if not ip_address or not helpers.is_valid_ip(ip_address):
return return
geoip_data = self.get_plextv_geoip(ip_address=ip_address, output_format='xml') geoip_data = self.get_plextv_geoip(ip_address=ip_address, output_format='xml')

View File

@@ -1,2 +1,2 @@
PLEXPY_BRANCH = "beta" PLEXPY_BRANCH = "master"
PLEXPY_RELEASE_VERSION = "v2.2.3-beta" PLEXPY_RELEASE_VERSION = "v2.2.3"

View File

@@ -2897,6 +2897,8 @@ class WebInterface(object):
"grouping_charts": checked(plexpy.CONFIG.GROUPING_CHARTS), "grouping_charts": checked(plexpy.CONFIG.GROUPING_CHARTS),
"monitor_pms_updates": checked(plexpy.CONFIG.MONITOR_PMS_UPDATES), "monitor_pms_updates": checked(plexpy.CONFIG.MONITOR_PMS_UPDATES),
"monitor_remote_access": checked(plexpy.CONFIG.MONITOR_REMOTE_ACCESS), "monitor_remote_access": checked(plexpy.CONFIG.MONITOR_REMOTE_ACCESS),
"remote_access_ping_interval": plexpy.CONFIG.REMOTE_ACCESS_PING_INTERVAL,
"remote_access_ping_threshold": plexpy.CONFIG.REMOTE_ACCESS_PING_THRESHOLD,
"refresh_libraries_interval": plexpy.CONFIG.REFRESH_LIBRARIES_INTERVAL, "refresh_libraries_interval": plexpy.CONFIG.REFRESH_LIBRARIES_INTERVAL,
"refresh_libraries_on_startup": checked(plexpy.CONFIG.REFRESH_LIBRARIES_ON_STARTUP), "refresh_libraries_on_startup": checked(plexpy.CONFIG.REFRESH_LIBRARIES_ON_STARTUP),
"refresh_users_interval": plexpy.CONFIG.REFRESH_USERS_INTERVAL, "refresh_users_interval": plexpy.CONFIG.REFRESH_USERS_INTERVAL,
@@ -3022,6 +3024,7 @@ class WebInterface(object):
kwargs.get('pms_update_check_interval') != str(plexpy.CONFIG.PMS_UPDATE_CHECK_INTERVAL) or \ kwargs.get('pms_update_check_interval') != str(plexpy.CONFIG.PMS_UPDATE_CHECK_INTERVAL) or \
kwargs.get('monitor_pms_updates') != plexpy.CONFIG.MONITOR_PMS_UPDATES or \ kwargs.get('monitor_pms_updates') != plexpy.CONFIG.MONITOR_PMS_UPDATES or \
kwargs.get('monitor_remote_access') != plexpy.CONFIG.MONITOR_REMOTE_ACCESS or \ kwargs.get('monitor_remote_access') != plexpy.CONFIG.MONITOR_REMOTE_ACCESS or \
kwargs.get('remote_access_ping_interval') != plexpy.CONFIG.REMOTE_ACCESS_PING_INTERVAL or \
kwargs.get('pms_url_manual') != plexpy.CONFIG.PMS_URL_MANUAL: kwargs.get('pms_url_manual') != plexpy.CONFIG.PMS_URL_MANUAL:
reschedule = True reschedule = True
@@ -5719,8 +5722,6 @@ class WebInterface(object):
message = 'No IP address provided.' message = 'No IP address provided.'
elif not helpers.is_valid_ip(ip_address): elif not helpers.is_valid_ip(ip_address):
message = 'Invalid IP address provided: %s' % ip_address message = 'Invalid IP address provided: %s' % ip_address
elif not helpers.is_public_ip(ip_address):
message = 'Non-public IP address provided: %s' % ip_address
if message: if message:
return {'result': 'error', 'message': message} return {'result': 'error', 'message': message}