ajaxterm!
authorQuentin Smith <quentin@mit.edu>
Tue, 11 Aug 2009 04:54:09 +0000 (00:54 -0400)
committerQuentin Smith <quentin@mit.edu>
Tue, 11 Aug 2009 04:54:09 +0000 (00:54 -0400)
svn path=/package_branches/invirt-web/ajaxterm-rebased/; revision=2752

code/main.py
code/static/ajaxterm/ajaxterm.js
code/templates/terminal.mako

index 0f8ed77..10e282f 100755 (executable)
@@ -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 '<?xml version="1.0"?><idem></idem>'
+
     machine = MachineView()
 
 
index 07eca3b..d876861 100644 (file)
@@ -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);
 }
 
index 246c29d..7df313d 100644 (file)
@@ -20,9 +20,10 @@ ${parent.header_extra()}
 <script type="text/javascript" src="static/ajaxterm/ajaxterm.js"></script>
 <script type="text/javascript">
 window.onload=function() {
-       t=ajaxterm.Terminal("term", 80,25);
+       t=ajaxterm.Terminal("term", ${machine.machine_id});
 }
 </script>
 </%def>
 
 <div id="term"></div>
+<div style="clear: both;"></div>