diff --git a/plexpy/activity_pinger.py b/plexpy/activity_pinger.py index 073a0323..7454245f 100644 --- a/plexpy/activity_pinger.py +++ b/plexpy/activity_pinger.py @@ -312,31 +312,27 @@ def check_server_access(): # Check for remote access if server_response: - - mapping_state = server_response['mapping_state'] - mapping_error = server_response['mapping_error'] - - # Check if the port is mapped - if not mapping_state == 'mapped': + if server_response['reason']: ext_ping_count += 1 - logger.warn(u"Tautulli Monitor :: Plex remote access port not mapped, ping attempt %s." \ - % str(ext_ping_count)) - # Check if the port is open - elif mapping_error == 'unreachable': - ext_ping_count += 1 - logger.warn(u"Tautulli Monitor :: Plex remote access port mapped, but mapping failed, ping attempt %s." \ + logger.warn(u"Tautulli Monitor :: Remote access failed: %s, ping attempt %s." \ + % (server_response['reason'], str(ext_ping_count))) + + # Waiting for port mapping + elif server_response['mapping_state'] == 'waiting': + logger.warn(u"Tautulli Monitor :: Remote access waiting for port mapping, ping attempt %s." \ % str(ext_ping_count)) + # Reset external ping counter else: if ext_ping_count >= plexpy.CONFIG.REMOTE_ACCESS_PING_THRESHOLD: logger.info(u"Tautulli Monitor :: Plex remote access is back up.") - plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extup'}) + plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extup', 'remote_access_info': server_response}) ext_ping_count = 0 if ext_ping_count == plexpy.CONFIG.REMOTE_ACCESS_PING_THRESHOLD: - plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extdown'}) + plexpy.NOTIFY_QUEUE.put({'notify_action': 'on_extdown', 'remote_access_info': server_response}) def check_server_updates(): diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 16cba489..1fde9995 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -2963,10 +2963,26 @@ class PmsConnect(object): for a in xml_head: server_response = {'mapping_state': helpers.get_xml_attr(a, 'mappingState'), 'mapping_error': helpers.get_xml_attr(a, 'mappingError'), + 'sign_in_state': helpers.get_xml_attr(a, 'signInState'), 'public_address': helpers.get_xml_attr(a, 'publicAddress'), - 'public_port': helpers.get_xml_attr(a, 'publicPort') + 'public_port': helpers.get_xml_attr(a, 'publicPort'), + 'private_address': helpers.get_xml_attr(a, 'privateAddress'), + 'private_port': helpers.get_xml_attr(a, 'privatePort') } + if server_response['mapping_state'] == 'unknown': + server_response['reason'] = 'Plex remote access port mapping unknown' + elif server_response['mapping_state'] not in ('mapped', 'waiting'): + server_response['reason'] = 'Plex remote access port not mapped' + elif server_response['mapping_error'] == 'unreachable': + server_response['reason'] = 'Plex remote access port mapped, ' \ + 'but the port is unreachable from Plex.tv' + elif server_response['mapping_error'] == 'publisherror': + server_response['reason'] = 'Plex remote access port mapped, ' \ + 'but failed to publish the port to Plex.tv' + else: + server_response['reason'] = '' + return server_response def get_update_staus(self):