def save_state(self) -> None: # If Redis is enabled, save the current time indicating that the node # monitor was alive at this time, the current session index, era index, # and the last height checked. if self.redis_enabled: key_si = Keys.get_node_monitor_session_index(self.monitor_name) key_ei = Keys.get_node_monitor_era_index(self.monitor_name) key_lh = Keys.get_node_monitor_last_height_checked( self.monitor_name) key_alive = Keys.get_node_monitor_alive(self.monitor_name) self.logger.debug('Saving node monitor state: %s=%s, %s=%s, %s=%s', self._monitor_name, key_si, self._session_index, key_lh, self._last_height_checked, key_ei, self._era_index) # Set session and era index keys self.redis.set_multiple({ key_si: self._session_index, key_ei: self._era_index }) # Set last height checked key until = timedelta(seconds=self._redis_last_height_key_timeout) self.redis.set_for(key_lh, self._last_height_checked, until) # Set alive key (to be able to query latest update from Telegram) until = timedelta(seconds=self._redis_alive_key_timeout) self.redis.set_for(key_alive, str(datetime.now().timestamp()), until)
def load_state(self) -> None: # If Redis is enabled, load the session index, era index, and last # height checked for slashing if any. if self.redis_enabled: key_si = Keys.get_node_monitor_session_index(self.monitor_name) key_ei = Keys.get_node_monitor_era_index(self.monitor_name) key_lh = Keys.get_node_monitor_last_height_checked( self.monitor_name) self._session_index = self.redis.get_int(key_si, NONE) self._era_index = self.redis.get_int(key_ei, NONE) self._last_height_checked = self.redis.get_int(key_lh, NONE) self.logger.debug('Restored %s state: %s=%s, %s=%s, %s=%s', self._monitor_name, key_si, self._session_index, key_lh, self._last_height_checked, key_ei, self._era_index)