Skip to content

Commit 5577d25

Browse files
committed
bin/jsx-profile-server works! (refers to etc/profiler and $HOME/.jsx/profile)
1 parent 263b028 commit 5577d25

File tree

1 file changed

+48
-41
lines changed

1 file changed

+48
-41
lines changed

bin/jsx-profile-server

100644100755
Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#!/usr/bin/env node
12
/***
23
* JSX development server started by `make server`
34
* includes JSX compiler for web (try/build/jsx-compiler.js).
@@ -24,6 +25,21 @@ catch(e) {
2425
console.warn("Unexpected node.js version (>=0.6.0 required), because: %s", e.toString());
2526
}
2627

28+
function homeDir() {
29+
if (process.env.HOME) {
30+
return process.env.HOME;
31+
}
32+
return process.env.USERPROFILE;
33+
}
34+
35+
function mkdir(dir) {
36+
try {
37+
fs.mkdirSync(dir);
38+
} catch (e) {
39+
// FIXME ignore EEXIST only, but how?
40+
}
41+
}
42+
2743
function finish(response, uri, status, content_type, content) {
2844
var len = content.length;
2945

@@ -83,11 +99,10 @@ function serveFile(response, uri, filename) {
8399
}
84100

85101
function saveProfile(request, response) {
86-
var profileDir = "web/.profile";
87-
88102
response.setHeader("Access-Control-Allow-Origin", "*");
89103
response.setHeader("Access-Control-Allow-Methods", "POST,PUT,GET,OPTIONS");
90104
response.setHeader("Access-Control-Allow-Headers", "Content-Type,*");
105+
console.log(request.method);
91106
if (request.method != "POST" || request.method == "PUT") {
92107
response.end();
93108
return;
@@ -128,35 +143,38 @@ function saveProfile(request, response) {
128143
return;
129144
}
130145
// save
131-
try {
132-
fs.mkdirSync(profileDir);
133-
} catch (e) {
134-
// FIXME ignore EEXIST only, but how?
135-
}
146+
var home = homeDir();
147+
mkdir(path.join(home, '.jsx'));
148+
mkdir(path.join(home, '.jsx', 'profile'));
136149
var id = YYYYmmddHHMMSS();
150+
console.log(id);
137151

138-
fs.writeFileSync(profileDir + "/" + id + ".json", JSON.stringify(json));
152+
fs.writeFileSync(path.join(home, '.jsx', 'profile', id + '.json'), JSON.stringify(json));
139153
// send response
140154
response.writeHead(200, "OK", {
141-
"Location" : "http://" + request.headers.host + "/web/profiler.html?" + id,
155+
"Location" : "http://" + request.headers.host + "/index.html?" + id,
142156
"Content-Type": "text/plain"
143157
});
144-
response.write("saved profile at http://" + request.headers.host + "/web/profiler.html?" + id);
158+
response.write("saved profile at http://" + request.headers.host + "/index.html?" + id);
145159
response.end();
146160

147-
console.info("[I] saved profile at http://" + request.headers.host + "/web/profiler.html?" + id);
161+
console.info("[I] saved profile at http://" + request.headers.host + "/index.html?" + id);
148162
});
149163
}
150164

151165
function listProfileResults(request, response) {
152-
var results = fs.readdirSync("web/.profile").filter(function (file) {
153-
return /\d{4}-\d{2}-\d{2}-\d{4}/.test(file);
154-
}).map(function (file) {
155-
return file.replace(/\.\w+$/, "");
156-
}).sort(function (a, b) {
157-
return b.localeCompare(a)
158-
});
159-
166+
var home = homeDir();
167+
var profileDir = path.join(home, '.jsx', 'profile');
168+
var results = [];
169+
if (fs.existsSync(profileDir)) {
170+
results = fs.readdirSync(profileDir).filter(function (file) {
171+
return /\d{4}-\d{2}-\d{2}-\d{6}/.test(file);
172+
}).map(function (file) {
173+
return file.replace(/\.\w+$/, "");
174+
}).sort(function (a, b) {
175+
return b.localeCompare(a)
176+
});
177+
}
160178
response.writeHead(200, "OK", {
161179
"Content-Type": "application/json"
162180
});
@@ -165,43 +183,32 @@ function listProfileResults(request, response) {
165183
}
166184

167185
function main(args) {
168-
var port = args[0] || "5000";
186+
var port = args[0] || "2012";
169187

170188
var httpd = http.createServer(function(request, response) {
171189
var uri = url.parse(request.url).pathname;
172-
173190
if(uri === "/") {
174-
response.writeHead(301, {
175-
Location: "try/"
176-
});
177-
response.end();
178-
return;
191+
uri = 'index.html';
179192
}
180193

181194
// profiler stuff
195+
var filepath;
182196
if (/^\/post-profile\/?$/.test(uri)) {
197+
console.log("save-profile");
183198
return saveProfile(request, response);
184199
}
185200
else if (/\/\.profile\/results\.json$/.test(uri)) {
201+
console.log("list-profile");
186202
return listProfileResults(request, response);
187203
}
188-
189-
var filename = path.join(process.cwd(), uri);
190-
191-
if(/(?:\.html|\/)$/.test(filename)) {
192-
child_process.execFile(
193-
"perl", ["web/build.pl"],
194-
function(error, stdout, stderr) {
195-
if(error) {
196-
finish(response, uri, 500, "text/plain", error + "\n");
197-
return;
198-
}
199-
serveFile(response, uri, filename);
200-
});
204+
else if (/\/\.profile\/\d{4}-\d{2}-\d{2}-\d{6}\.json/.test(uri)) {
205+
filepath = path.resolve(homeDir(), '.jsx', 'profile', uri.match(/\d{4}-\d{2}-\d{2}-\d{6}.json/)[0]);
201206
}
202-
else {
203-
serveFile(response, uri, filename);
207+
else if (uri[0] === '/') {
208+
uri = uri.slice(1);
209+
filepath = path.resolve(__dirname, '..', 'etc', 'profiler', uri);
204210
}
211+
serveFile(response, uri, filepath);
205212
});
206213
httpd.listen(parseInt(port, 10));
207214

0 commit comments

Comments
 (0)