def get_unscannable_suite_info(host, suite, owner=None): """Return a map like cylc scan --raw for states and last update time.""" summaries = get_stop_state_summary(cat_state(suite, host, owner)) suite_info = {} if summaries is None: return suite_info global_summary, task_summary = summaries for item in task_summary.values(): # Note: item['label'] equivalent to item['point'] for states_point in (KEY_STATES, KEY_STATES + ":" + item['label']): suite_info.setdefault(states_point, {}) suite_info[states_point].setdefault(item['state'], 0) suite_info[states_point][item['state']] += 1 suite_info[KEY_UPDATE_TIME] = global_summary["last_updated"] return suite_info
def set_stopped(self): """Reset data and clients when suite is stopped.""" if cylc.flags.debug: sys.stderr.write("%s NOT CONNECTED\n" % get_current_time_string()) self.full_mode = True self.connected = False self.set_status(SUITE_STATUS_STOPPED) self.update_interval += 1.0 if self.update_interval > self.max_update_interval: self.update_interval = self.max_update_interval self.state_summary = {} self.full_state_summary = {} self.fam_state_summary = {} self.full_fam_state_summary = {} self.all_families = {} self.global_summary = {} self.cfg.port = None self.client = None gobject.idle_add(self.app_window.set_title, str(self.cfg.suite)) # Use info bar to display stop summary if available. # Otherwise, just display the reconnect count down. if self.cfg.suite and self.stop_summary is None: stop_summary = get_stop_state_summary( cat_state(self.cfg.suite, self.cfg.host, self.cfg.owner)) if stop_summary != self.stop_summary: self.stop_summary = stop_summary self.status = SUITE_STATUS_STOPPED gobject.idle_add( self.info_bar.set_stop_summary, stop_summary) self.last_update_time = time() try: update_time_str = time2str(self.stop_summary[0]["last_updated"]) except (AttributeError, IndexError, KeyError, TypeError): update_time_str = None gobject.idle_add( self.info_bar.set_update_time, update_time_str, self.info_bar.DISCONNECTED_TEXT) gobject.idle_add(self.info_bar.prog_bar_stop)
def reconnect(self): """Try to reconnect to the suite daemon.""" if cylc.flags.debug: print >> sys.stderr, " reconnection...", # Reset Pyro clients. self.suite_log_client.reset() self.state_summary_client.reset() self.suite_info_client.reset() self.suite_command_client.reset() try: self.daemon_version = self.suite_info_client.get_info( 'get_cylc_version') except KeyError: self.daemon_version = "??? (pre 6.1.2?)" if cylc.flags.debug: print >> sys.stderr, "succeeded (old daemon)" except PortFileError as exc: if cylc.flags.debug: traceback.print_exc() # Failed to (re)connect. # Probably normal shutdown; get a stop summary if available. if not self.connect_fail_warned: self.connect_fail_warned = True gobject.idle_add(self.warn, str(exc)) if self.cfg.suite and self.stop_summary is None: self.stop_summary = get_stop_state_summary( cat_state(self.cfg.suite, self.cfg.host, self.cfg.owner)) self.last_update_time = time() if self.stop_summary is not None and any(self.stop_summary): gobject.idle_add( self.info_bar.set_stop_summary, self.stop_summary) else: self.info_bar.set_update_time( None, self.info_bar.DISCONNECTED_TEXT) return except Pyro.errors.NamingError as exc: if cylc.flags.debug: traceback.print_exc() return except Exception as exc: if cylc.flags.debug: traceback.print_exc() if not self.connect_fail_warned: self.connect_fail_warned = True if isinstance(exc, Pyro.errors.ConnectionDeniedError): gobject.idle_add( self.warn, "ERROR: %s\n\nIncorrect suite passphrase?" % exc) else: gobject.idle_add(self.warn, str(exc)) return gobject.idle_add( self.app_window.set_title, "%s - %s:%s" % ( self.cfg.suite, self.suite_info_client.host, self.suite_info_client.port)) if cylc.flags.debug: print >> sys.stderr, "succeeded" # Connected. self.connected = True # This status will be very transient: self.set_status(SUITE_STATUS_CONNECTED) self.connect_fail_warned = False self.connect_schd.stop() if cylc.flags.debug: print >> sys.stderr, ( "succeeded: daemon v %s" % self.daemon_version) if (self.daemon_version != CYLC_VERSION and not self.version_mismatch_warned): # (warn only once - reconnect() will be called multiple times # during initialisation of daemons at <= 6.4.0 (for which the state # summary object is not connected until all tasks are loaded). gobject.idle_add( self.warn, "Warning: cylc version mismatch!\n\n" + "Suite running with %r.\n" % self.daemon_version + "gcylc at %r.\n" % CYLC_VERSION) self.version_mismatch_warned = True self.stop_summary = None self.err_log_lines = [] self.err_log_size = 0 self.last_update_time = time()
def reconnect(self): """Try to reconnect to the suite daemon.""" if cylc.flags.debug: print >> sys.stderr, " reconnection...", # Reset comms clients. self.suite_log_client.reset() self.state_summary_client.reset() self.suite_info_client.reset() self.suite_command_client.reset() try: self.daemon_version = self.suite_info_client.get_info( 'get_cylc_version') except ConnectionDeniedError as exc: if cylc.flags.debug: traceback.print_exc() if not self.connect_fail_warned: self.connect_fail_warned = True gobject.idle_add( self.warn, "ERROR: %s\n\nIncorrect suite passphrase?" % exc) return except ConnectionError as exc: # Failed to (re)connect # Suite not running, starting up or just stopped. if cylc.flags.debug: traceback.print_exc() # Use info bar to display stop summary if available. # Otherwise, just display the reconnect count down. if self.cfg.suite and self.stop_summary is None: stop_summary = get_stop_state_summary( cat_state(self.cfg.suite, self.cfg.host, self.cfg.owner)) self.last_update_time = time() if stop_summary != self.stop_summary: self.stop_summary = stop_summary self.status = SUITE_STATUS_STOPPED gobject.idle_add( self.info_bar.set_stop_summary, stop_summary) try: update_time_str = get_time_string_from_unix_time( self.stop_summary[0]["last_updated"]) except (AttributeError, IndexError, KeyError, TypeError): update_time_str = None gobject.idle_add( self.info_bar.set_update_time, update_time_str, self.info_bar.DISCONNECTED_TEXT) return except Exception as exc: if cylc.flags.debug: traceback.print_exc() if not self.connect_fail_warned: self.connect_fail_warned = True gobject.idle_add(self.warn, str(exc)) return gobject.idle_add( self.app_window.set_title, "%s - %s:%s" % ( self.cfg.suite, self.suite_info_client.host, self.suite_info_client.port)) if cylc.flags.debug: print >> sys.stderr, "succeeded" # Connected. self.connected = True # This status will be very transient: self.set_status(SUITE_STATUS_CONNECTED) self.connect_fail_warned = False self.connect_schd.stop() if cylc.flags.debug: print >> sys.stderr, ( "succeeded: daemon v %s" % self.daemon_version) if (self.daemon_version != CYLC_VERSION and not self.version_mismatch_warned): # (warn only once - reconnect() will be called multiple times # during initialisation of daemons at <= 6.4.0 (for which the state # summary object is not connected until all tasks are loaded). gobject.idle_add( self.warn, "Warning: cylc version mismatch!\n\n" + "Suite running with %r.\n" % self.daemon_version + "gcylc at %r.\n" % CYLC_VERSION) self.version_mismatch_warned = True self.stop_summary = None self.err_log_lines = [] self.err_log_size = 0 self.last_update_time = time()
def reconnect(self): """Try to reconnect to the suite daemon.""" if cylc.flags.debug: print >> sys.stderr, " reconnection...", # Reset Pyro clients. self.suite_log_client.reset() self.state_summary_client.reset() self.suite_info_client.reset() self.suite_command_client.reset() try: self.daemon_version = self.suite_info_client.get_info( 'get_cylc_version') except KeyError: self.daemon_version = "??? (pre 6.1.2?)" if cylc.flags.debug: print >> sys.stderr, "succeeded (old daemon)" except PortFileError as exc: if cylc.flags.debug: traceback.print_exc() # Failed to (re)connect. # Probably normal shutdown; get a stop summary if available. if not self.connect_fail_warned: self.connect_fail_warned = True gobject.idle_add(self.warn, str(exc)) if self.cfg.suite and self.stop_summary is None: self.stop_summary = get_stop_state_summary( cat_state(self.cfg.suite, self.cfg.host, self.cfg.owner)) self.last_update_time = time() if self.stop_summary is not None and any(self.stop_summary): gobject.idle_add(self.info_bar.set_stop_summary, self.stop_summary) else: self.info_bar.set_update_time(None, self.info_bar.DISCONNECTED_TEXT) return except Pyro.errors.NamingError as exc: if cylc.flags.debug: traceback.print_exc() return except Exception as exc: if cylc.flags.debug: traceback.print_exc() if not self.connect_fail_warned: self.connect_fail_warned = True if isinstance(exc, Pyro.errors.ConnectionDeniedError): gobject.idle_add( self.warn, "ERROR: %s\n\nIncorrect suite passphrase?" % exc) else: gobject.idle_add(self.warn, str(exc)) return gobject.idle_add( self.app_window.set_title, "%s - %s:%s" % (self.cfg.suite, self.suite_info_client.host, self.suite_info_client.port)) if cylc.flags.debug: print >> sys.stderr, "succeeded" # Connected. self.connected = True # This status will be very transient: self.set_status(SUITE_STATUS_CONNECTED) self.connect_fail_warned = False self.connect_schd.stop() if cylc.flags.debug: print >> sys.stderr, ("succeeded: daemon v %s" % self.daemon_version) if (self.daemon_version != CYLC_VERSION and not self.version_mismatch_warned): # (warn only once - reconnect() will be called multiple times # during initialisation of daemons at <= 6.4.0 (for which the state # summary object is not connected until all tasks are loaded). gobject.idle_add( self.warn, "Warning: cylc version mismatch!\n\n" + "Suite running with %r.\n" % self.daemon_version + "gcylc at %r.\n" % CYLC_VERSION) self.version_mismatch_warned = True self.stop_summary = None self.err_log_lines = [] self.err_log_size = 0 self.last_update_time = time()
def reconnect(self): """Try to reconnect to the suite daemon.""" if cylc.flags.debug: print >> sys.stderr, " reconnection...", # Reset comms clients. self.suite_log_client.reset() self.state_summary_client.reset() self.suite_info_client.reset() self.suite_command_client.reset() try: self.daemon_version = self.suite_info_client.get_info( 'get_cylc_version') except (ConnectionError) as exc: # Failed to (re)connect # Suite not running, starting up or just stopped. if cylc.flags.debug: traceback.print_exc() # Use info bar to display stop summary if available. # Otherwise, just display the reconnect count down. if self.cfg.suite and self.stop_summary is None: stop_summary = get_stop_state_summary( cat_state(self.cfg.suite, self.cfg.host, self.cfg.owner)) self.last_update_time = time() if stop_summary != self.stop_summary: self.stop_summary = stop_summary self.status = SUITE_STATUS_STOPPED gobject.idle_add( self.info_bar.set_stop_summary, stop_summary) try: update_time_str = get_time_string_from_unix_time( self.stop_summary[0]["last_updated"]) except (AttributeError, IndexError, KeyError, TypeError): update_time_str = None gobject.idle_add( self.info_bar.set_update_time, update_time_str, self.info_bar.DISCONNECTED_TEXT) return except ConnectionDeniedError as exc: if cylc.flags.debug: traceback.print_exc() if not self.connect_fail_warned: self.connect_fail_warned = True gobject.idle_add( self.warn, "ERROR: %s\n\nIncorrect suite passphrase?" % exc) return except Exception as exc: if cylc.flags.debug: traceback.print_exc() if not self.connect_fail_warned: self.connect_fail_warned = True gobject.idle_add(self.warn, str(exc)) return gobject.idle_add( self.app_window.set_title, "%s - %s:%s" % ( self.cfg.suite, self.suite_info_client.host, self.suite_info_client.port)) if cylc.flags.debug: print >> sys.stderr, "succeeded" # Connected. self.connected = True # This status will be very transient: self.set_status(SUITE_STATUS_CONNECTED) self.connect_fail_warned = False self.connect_schd.stop() if cylc.flags.debug: print >> sys.stderr, ( "succeeded: daemon v %s" % self.daemon_version) if (self.daemon_version != CYLC_VERSION and not self.version_mismatch_warned): # (warn only once - reconnect() will be called multiple times # during initialisation of daemons at <= 6.4.0 (for which the state # summary object is not connected until all tasks are loaded). gobject.idle_add( self.warn, "Warning: cylc version mismatch!\n\n" + "Suite running with %r.\n" % self.daemon_version + "gcylc at %r.\n" % CYLC_VERSION) self.version_mismatch_warned = True self.stop_summary = None self.err_log_lines = [] self.err_log_size = 0 self.last_update_time = time()