annotate memory_profiler_server.js @ 54:c451579bf83c

Built out more of the /objects/ method.
author Atul Varma <varmaa@toolness.com>
date Wed, 24 Jun 2009 18:15:03 -0700
parents 2b22291fa09a
children 4910bc49a182
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
1 var socket = new ServerSocket();
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
2
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 var PORT = 8080;
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 socket.bind("127.0.0.1", PORT);
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 socket.listen();
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 var NEWLINE = "\r\n";
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9 var DOUBLE_NEWLINE = NEWLINE + NEWLINE;
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 function getHeaders(conn) {
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
12 var headers = "";
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
13 while (1) {
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
14 var character = conn.recv(1);
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
15 if (character == null)
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
16 return null;
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 headers += character;
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18 if (headers.indexOf(DOUBLE_NEWLINE) != -1)
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19 return headers;
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 }
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 }
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23 print("Waiting for requests on port " + PORT + ".");
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
25 function processRequest(socket) {
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
26 var conn = socket.accept();
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
27
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
28 try {
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
29 var requestHeaders = getHeaders(conn);
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
30 if (requestHeaders == null)
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
31 return true;
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
32 var requestLines = requestHeaders.split("\r\n");
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
33 print(requestLines[0]);
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
34 var reqParts = requestLines[0].split(" ");
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
35 var method = reqParts[0];
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
36 var path = reqParts[1];
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
37
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
38 var code = "200 OK";
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
39 var toSend;
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
40
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
41 // TODO: We'd like to set the MIME type of JSON data to application/json,
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
42 // but Firefox doesn't let us browse a webserver this way, which is
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
43 // annoying, so we're just leaving it at text/plain for now.
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
44
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
45 if (path == "/gc-roots")
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
46 toSend = JSON.stringify(getGCRoots());
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
47
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
48 if (path == "/stop")
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
49 toSend = "Stopping server now!";
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
50
54
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
51 var objNum = path.match(/^\/objects\/(\d+)$/);
53
2b22291fa09a added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
52 if (objNum) {
2b22291fa09a added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
53 objNum = objNum[1];
54
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
54 var objInfo = getObjectInfo(objNum);
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
55 if (objInfo) {
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
56 toSend = JSON.stringify(objInfo);
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
57 } else {
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
58 code = "404 Not Found";
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
59 toSend = "Object " + objNum + " does not exist.";
c451579bf83c Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents: 53
diff changeset
60 }
53
2b22291fa09a added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
61 }
2b22291fa09a added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
62
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
63 if (!toSend) {
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
64 code = "404 Not Found";
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
65 toSend = "Not found, yo.";
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
66 }
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
67
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 //print("headers: " + uneval(requestHeaders));
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
69 var headerLines = ["HTTP/1.0 " + code,
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70 "Content-Type: text/plain",
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 "Connection: close",
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 "Content-Length: " + toSend.length];
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 var headers = headerLines.join("\r\n");
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74 var response = headers + DOUBLE_NEWLINE + toSend;
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 //print("response: " + uneval(response));
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 conn.send(response);
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77 conn.close();
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 //print("response sent.");
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
79 } catch (e) {
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
80 print(e.toString());
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
81 try { conn.close(); } catch (e) {}
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
82 }
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
83 if (path == "/stop")
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
84 return false;
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
85 return true;
50
853f80bd3b4b Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 }
52
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
87
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
88 while (processRequest(socket)) {}
a10cb805b5ab Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents: 51
diff changeset
89 socket.close();