From: Quentin Smith Date: Tue, 11 Aug 2009 04:54:09 +0000 (-0400) Subject: ajaxterm! X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/commitdiff_plain/3c2392c9ed9aae4fd4a86bd3e230cb05a7c229d2 ajaxterm! svn path=/package_branches/invirt-web/ajaxterm-rebased/; revision=2752 --- diff --git a/code/main.py b/code/main.py index 0f8ed77..10e282f 100755 --- a/code/main.py +++ b/code/main.py @@ -406,6 +406,27 @@ console will suffer artifacts. hostname=cherrypy.request.local.name) return d + @cherrypy.expose + def at(self, machine_id, k=None, c=0): + machine = validation.Validate(cherrypy.request.login, cherrypy.request.state, machine_id=machine_id).machine + if machine_id in self.atsessions: + term = self.atsessions[machine_id] + else: + print >>sys.stderr, "spawning new session for terminal to ",machine_id + term = self.atsessions[machine_id] = self.atmulti.create( + ["ssh", "-e","none", "-l", machine.name, config.console.hostname] + ) + if k: + self.atmulti.proc_write(term,k) + time.sleep(0.002) + dump=self.atmulti.dump(term,c) + cherrypy.response.headers['Content-Type']='text/xml' + if isinstance(dump,str): + return dump + else: + del self.atsessions[machine_id] + return '' + machine = MachineView() diff --git a/code/static/ajaxterm/ajaxterm.js b/code/static/ajaxterm/ajaxterm.js index 07eca3b..d876861 100644 --- a/code/static/ajaxterm/ajaxterm.js +++ b/code/static/ajaxterm/ajaxterm.js @@ -1,10 +1,10 @@ ajaxterm={}; -ajaxterm.Terminal_ctor=function(id,width,height) { +ajaxterm.Terminal_ctor=function(id,machine_id) { var ie=0; if(window.ActiveXObject) ie=1; - var sid=""+Math.round(Math.random()*1000000000); - var query0="s="+sid+"&w="+width+"&h="+height; + var base_path="machine/"+machine_id+"/at"; + var query0=""; var query1=query0+"&c=1&k="; var buf=""; var timeout; @@ -103,12 +103,12 @@ ajaxterm.Terminal_ctor=function(id,width,height) { } var query=query1+send; if(opt_get.className=='on') { - r.open("GET","u?"+query,true); + r.open("GET",base_path+"?"+query,true); if(ie) { r.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); } } else { - r.open("POST","u",true); + r.open("POST",base_path,true); } r.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); r.onreadystatechange = function () { @@ -273,7 +273,7 @@ ajaxterm.Terminal_ctor=function(id,width,height) { } init(); } -ajaxterm.Terminal=function(id,width,height) { - return new this.Terminal_ctor(id,width,height); +ajaxterm.Terminal=function(id,machine_id) { + return new this.Terminal_ctor(id,machine_id); } diff --git a/code/templates/terminal.mako b/code/templates/terminal.mako index 246c29d..7df313d 100644 --- a/code/templates/terminal.mako +++ b/code/templates/terminal.mako @@ -20,9 +20,10 @@ ${parent.header_extra()}
+