From d46c22dca380f301115d053e9ba8506f54e522f2 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Jun 2011 13:46:50 +0200 Subject: [PATCH 1/6] Make Spotify backend fail early if settings is incomplete --- mopidy/backends/spotify/__init__.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/spotify/__init__.py b/mopidy/backends/spotify/__init__.py index 87997059..774273e3 100644 --- a/mopidy/backends/spotify/__init__.py +++ b/mopidy/backends/spotify/__init__.py @@ -72,19 +72,22 @@ class SpotifyBackend(ThreadingActor, Backend): self.gstreamer = None self.spotify = None + # Fail early if settings are not present + self.username = settings.SPOTIFY_USERNAME + self.password = settings.SPOTIFY_PASSWORD + def on_start(self): gstreamer_refs = ActorRegistry.get_by_class(GStreamer) assert len(gstreamer_refs) == 1, 'Expected exactly one running gstreamer.' self.gstreamer = gstreamer_refs[0].proxy() + logger.info(u'Mopidy uses SPOTIFY(R) CORE') self.spotify = self._connect() def _connect(self): from .session_manager import SpotifySessionManager - logger.info(u'Mopidy uses SPOTIFY(R) CORE') logger.debug(u'Connecting to Spotify') - spotify = SpotifySessionManager( - settings.SPOTIFY_USERNAME, settings.SPOTIFY_PASSWORD) + spotify = SpotifySessionManager(self.username, self.password) spotify.start() return spotify From ce8cc55f7932092b0153359d5effd0ab0e8c57f3 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Jun 2011 13:48:50 +0200 Subject: [PATCH 2/6] Log GStreamer output addition at debug level --- mopidy/gstreamer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mopidy/gstreamer.py b/mopidy/gstreamer.py index f52292d2..166c487e 100644 --- a/mopidy/gstreamer.py +++ b/mopidy/gstreamer.py @@ -298,7 +298,7 @@ class GStreamer(ThreadingActor): output.sync_state_with_parent() # Required to add to running pipe gst.element_link_many(self._tee, output) self._outputs.append(output) - logger.info('Added %s', output.get_name()) + logger.debug('GStreamer added %s', output.get_name()) def list_outputs(self): """ From fbc47a041a75d10cebd35576abe98a10005e3054 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Jun 2011 14:15:17 +0200 Subject: [PATCH 3/6] Add more debug logging to stop_all_actors --- mopidy/utils/process.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mopidy/utils/process.py b/mopidy/utils/process.py index 5b09148d..2e18280e 100644 --- a/mopidy/utils/process.py +++ b/mopidy/utils/process.py @@ -22,9 +22,13 @@ def exit_handler(signum, frame): def stop_all_actors(): num_actors = len(ActorRegistry.get_all()) while num_actors: + logger.debug(u'Seeing %d actor and %d non-actor thread(s): %s', + num_actors, threading.active_count() - num_actors, + ', '.join([t.name for t in threading.enumerate()])) logger.debug(u'Stopping %d actor(s)...', num_actors) ActorRegistry.stop_all() num_actors = len(ActorRegistry.get_all()) + logger.debug(u'All actors stopped.') class BaseThread(threading.Thread): def __init__(self): From 2453e6826f93301a0003b869e46d4cb41aeb81b7 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Jun 2011 14:17:29 +0200 Subject: [PATCH 4/6] Add exit_process() function for shutting down Mopidy instead of ActorRegistry.stop_all() --- mopidy/core.py | 5 ++--- mopidy/utils/process.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/mopidy/core.py b/mopidy/core.py index b89a5456..8138f198 100644 --- a/mopidy/core.py +++ b/mopidy/core.py @@ -40,11 +40,10 @@ def main(): setup_mixer() setup_backend() setup_frontends() - while ActorRegistry.get_all(): + while True: time.sleep(1) - logger.info(u'No actors left. Exiting...') except KeyboardInterrupt: - logger.info(u'User interrupt. Exiting...') + logger.info(u'Interrupted. Exiting...') stop_all_actors() def parse_options(): diff --git a/mopidy/utils/process.py b/mopidy/utils/process.py index 2e18280e..c1d1c9f5 100644 --- a/mopidy/utils/process.py +++ b/mopidy/utils/process.py @@ -1,5 +1,6 @@ import logging import signal +import thread import threading import gobject @@ -12,12 +13,17 @@ from mopidy import SettingsError logger = logging.getLogger('mopidy.utils.process') +def exit_process(): + logger.debug(u'Interrupting main...') + thread.interrupt_main() + logger.debug(u'Interrupted main') + def exit_handler(signum, frame): """A :mod:`signal` handler which will exit the program on signal.""" signals = dict((k, v) for v, k in signal.__dict__.iteritems() if v.startswith('SIG') and not v.startswith('SIG_')) - logger.info(u'Got %s. Exiting...', signals[signum]) - stop_all_actors() + logger.info(u'Got %s signal', signals[signum]) + exit_process() def stop_all_actors(): num_actors = len(ActorRegistry.get_all()) From 51e43487c37faafe236ac67234d99cc0591d0862 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Jun 2011 14:18:09 +0200 Subject: [PATCH 5/6] Log traceback for exceptions popping up to main() --- mopidy/core.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mopidy/core.py b/mopidy/core.py index 8138f198..8c6e9833 100644 --- a/mopidy/core.py +++ b/mopidy/core.py @@ -44,6 +44,9 @@ def main(): time.sleep(1) except KeyboardInterrupt: logger.info(u'Interrupted. Exiting...') + except Exception as e: + logger.exception(e) + finally: stop_all_actors() def parse_options(): From 8e983c337f4569547c70da9cb7a5f82554d693d9 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Jun 2011 14:18:38 +0200 Subject: [PATCH 6/6] Only log the error message for SettingsError --- mopidy/core.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mopidy/core.py b/mopidy/core.py index 8c6e9833..65472a29 100644 --- a/mopidy/core.py +++ b/mopidy/core.py @@ -42,6 +42,8 @@ def main(): setup_frontends() while True: time.sleep(1) + except SettingsError as e: + logger.error(e.message) except KeyboardInterrupt: logger.info(u'Interrupted. Exiting...') except Exception as e: