This is an automated email from the git hooks/post-receive script. x2go pushed a commit to annotated tag 0.1.4.2 in repository x2goclient.
commit 3e307a9bfbb2f945dcb8c887b122cd8bb9087b4b Author: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> Date: Wed Aug 17 02:03:22 2011 +0200 Multiple achievements with this commit... 1. Translate cmd line options into python-x2go options 2. Allow ,,ALL'' as session name when suspending -> will suspend all sessions of the connecting user. 3. Allow ,,ALL'' as session name when terminating -> will terminate all sessions of the connecting user. 4. Allow ,,NEWEST'' and ,,OLDEST'' as session name when resuming (closes upstream issue #86). --- debian/changelog | 8 ++++- pyhoca-cli | 4 +-- pyhoca/cli/frontend.py | 87 +++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 84 insertions(+), 15 deletions(-) diff --git a/debian/changelog b/debian/changelog index d4cdc19b..981b6c5c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,13 @@ pyhoca-cli (0.1.4.2-0~x2go1) UNRELEASED; urgency=low * New upstream version (0.1.4.2): - - nothing yet + - Translate cmd line options into python-x2go options + - Allow ,,ALL'' as session name when suspending -> will suspend + all sessions of the connecting user. + - Allow ,,ALL'' as session name when terminating -> will terminate + all sessions of the connecting user. + - Allow ,,NEWEST'' and ,,OLDEST'' as session name when resuming (closes + upstream issue #86). -- Mike Gabriel <mike.gabr...@das-netzwerkteam.de> Wed, 06 Jul 2011 22:18:01 +0200 diff --git a/pyhoca-cli b/pyhoca-cli index 34fb2977..71f75916 100755 --- a/pyhoca-cli +++ b/pyhoca-cli @@ -220,9 +220,9 @@ Possible values for the --pack NX option are: if not (a.session_profile or a.list_profiles): - # the --server options is required for most operations + # the --server (or --session-profile) option is required for most operations if not a.server: - runtime_error ("argument --server is required", parser=p, exitcode=1) + runtime_error ("argument --server (or --session-profile) is required", parser=p, exitcode=1) # check for mutual exclusiveness of -N, -R, -S, -T and -L, -N is default if none of them is set if bool(a.new) + bool(a.resume) + bool(a.share_desktop) + bool(a.suspend) + bool(a.terminate) + bool(a.list_sessions) + bool(a.list_desktops) + bool(a.list_profiles)> 1: diff --git a/pyhoca/cli/frontend.py b/pyhoca/cli/frontend.py index 8931e3de..82487d47 100644 --- a/pyhoca/cli/frontend.py +++ b/pyhoca/cli/frontend.py @@ -166,6 +166,24 @@ class PyHocaCLI(x2go.X2goClient): self.logger('command from session profile to run is: %s' % self.session_registry(self.x2go_session_hash).get_session_cmd(), loglevel=x2go.loglevel_DEBUG, ) self._X2goClient__start_session(s_hash) + def _auto_resume_newest(self, s_hash): + session_infos = self._X2goClient__list_sessions(s_hash) + if session_infos: + newest_session_name = x2go.utils.session_names_by_timestamp(session_infos)[-1] + self._pyhoca_logger("Resuming newest X2go session %s..." % newest_session_name, loglevel=x2go.loglevel_NOTICE, ) + self._X2goClient__resume_session(s_hash, newest_session_name) + return True + return False + + def _auto_resume_oldest(self, s_hash): + session_infos = self._X2goClient__list_sessions(s_hash) + if session_infos: + oldest_session_name = x2go.utils.session_names_by_timestamp(session_infos)[0] + self._pyhoca_logger("Resuming oldest X2go session %s..." % oldest_session_name, loglevel=x2go.loglevel_NOTICE, ) + self._X2goClient__resume_session(s_hash, oldest_session_name) + return True + return False + def resume_session(self, s_hash): """\ STILL UNDOCUMENTED @@ -173,7 +191,11 @@ class PyHocaCLI(x2go.X2goClient): # resume a running session self.logger('resuming X2go session: %s' % self.args.resume, loglevel=x2go.loglevel_INFO, ) available_sessions = self._X2goClient__list_sessions(s_hash) - if self.args.resume in available_sessions.keys(): + if available_sessions and self.args.resume == 'OLDEST': + self._auto_resume_oldest(s_hash) + elif available_sessions and self.args.resume == 'NEWEST': + self._auto_resume_newest(s_hash) + elif self.args.resume in available_sessions.keys(): self._X2goClient__resume_session(s_hash, self.args.resume) else: self._runtime_error('requested session not available on X2go server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=20) @@ -199,26 +221,54 @@ class PyHocaCLI(x2go.X2goClient): # send a suspend request to a session self.logger('requesting X2go session suspend of session: %s' % self.args.suspend, loglevel=x2go.loglevel_INFO, ) available_sessions = self._X2goClient__list_sessions(s_hash) - if self.args.suspend in available_sessions.keys(): - self._X2goClient__suspend_session(s_hash, self.args.suspend) + + if self.args.suspend == "ALL": + _session_names = available_sessions else: - self._runtime_error('requested session not available on X2go server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=21) + _session_names = [ self.args.suspend ] + + for _session_name in _session_names: + if _session_name in available_sessions.keys(): + self._X2goClient__suspend_session(s_hash, _session_name) + self._pyhoca_logger("X2go session %s has been suspended" % _session_name, loglevel=x2go.loglevel_NOTICE, ) + else: + _server = self.args.server + _remote_ssh_port = self.args.remote_ssh_port + if not self.args.server and self.args.session_profile: + _server = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'host') + _remote_ssh_port = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'sshport') + self._runtime_error('session %s not available on X2go server [%s]:%s' % (_session_name, _server, _remote_ssh_port), exitcode=21) def terminate_session(self, s_hash): """\ STILL UNDOCUMENTED + """ # send a terminate request to a session self.logger('requesting X2go session terminate of session: %s' % self.args.terminate, loglevel=x2go.loglevel_INFO, ) available_sessions = self._X2goClient__list_sessions(s_hash) - if self.args.terminate in available_sessions.keys(): - self._X2goClient__terminate_session(s_hash, self.args.terminate) + + if self.args.terminate == "ALL": + _session_names = available_sessions else: - self._runtime_error('requested session not available on X2go server [%s]:%s' % (self.args.server, self.args.remote_ssh_port), exitcode=22) + _session_names = [ self.args.terminate ] + + for _session_name in _session_names: + if _session_name in available_sessions.keys(): + self._X2goClient__terminate_session(s_hash, _session_name) + self._pyhoca_logger("X2go session %s has been terminated" % _session_name, loglevel=x2go.loglevel_NOTICE, ) + else: + _server = self.args.server + _remote_ssh_port = self.args.remote_ssh_port + if not self.args.server and self.args.session_profile: + _server = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'host') + _remote_ssh_port = self.session_profiles.get_value(self.session_profiles.to_profile_id(self.args.session_profile), 'sshport') + self._runtime_error('session %s not available on X2go server [%s]:%s' % (_session_name, _server, _remote_ssh_port), exitcode=22) def __init__(self, args, logger=None, liblogger=None): """\ STILL UNDOCUMENTED + """ self.args = args if logger is None: @@ -238,12 +288,25 @@ class PyHocaCLI(x2go.X2goClient): if self.args.session_profile: + _cmdlineopt_to_sessionopt = { + 'command': 'cmd', + 'kb_layout': 'kblayout', + 'kb_type': 'kbtype', + 'sound': 'snd_system', + 'ssh_privkey': 'key_filename', + 'server': 'hostname', + 'remote_ssh_port': 'port', + } + # override session profile options by option values from the arg parser kwargs={} if hasattr(self.args, 'parser'): for a, v in self.args._get_kwargs(): if v != self.args.parser.get_default(a): - kwargs[a] = v + try: + kwargs[_cmdlineopt_to_sessionopt[a]] = v + except KeyError: + kwargs[a] = v # setup up the session profile based X2go session self.x2go_session_hash = self._X2goClient__register_session(profile_name=self.args.session_profile, @@ -359,14 +422,13 @@ class PyHocaCLI(x2go.X2goClient): elif self.args.new: self.new_session(self.x2go_session_hash) - # finally call the MainLoop of PyHocaCLI if not (self.args.new or self.args.resume or self.args.share_desktop or self.args.session_profile): sys.exit(0) - # give the session some time to come up... - # no CTRL-C is allowed during this phase... + if self.args.resume or self.args.new: + self._pyhoca_logger("give the X2go session some time to come up...", loglevel=x2go.loglevel_NOTICE, ) + i=0 - self._pyhoca_logger("give the X2go session some time to come up...", loglevel=x2go.loglevel_NOTICE, ) while i < self.args.time_to_wait: time.sleep(1) i+=1 @@ -381,6 +443,7 @@ class PyHocaCLI(x2go.X2goClient): self._pyhoca_logger("Press CTRL+C to end desktop sharing for this session...", loglevel=x2go.loglevel_NOTICE, ) else: self._pyhoca_logger("Press CTRL+C to suspend the running session...", loglevel=x2go.loglevel_NOTICE, ) + try: session_duration = 0 -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git _______________________________________________ x2go-commits mailing list x2go-commits@lists.x2go.org https://lists.x2go.org/listinfo/x2go-commits