var JSON_FILENAME = '/srv/analysis.sesse.net/www/analysis.json';
var HISTORY_TO_KEEP = 5;
+// If set to 1, we are already processing a JSON update and should not
+// start a new one. If set to 2, we are _also_ having one in the queue.
+var json_lock = 0;
+
// The current contents of the file to hand out, and its last modified time.
var json = undefined;
new_json.gzip = buffer;
json = new_json;
diff_json = new_diff_json;
+ json_lock = 0;
// Finally, wake up any sleeping clients.
possibly_wakeup_clients();
zlib.gzip(diff_text, function(err, buffer) {
if (err) throw err;
new_diff_json[histobj.last_modified] = {
- plain: diff,
- text: diff_text,
+ parsed: diff,
+ plain: diff_text,
gzip: buffer,
last_modified: new_json.last_modified,
};
if (filename != path.basename(JSON_FILENAME)) {
return;
}
+ if (json_lock >= 2) {
+ return;
+ }
+ if (json_lock == 1) {
+ // Already processing; wait a bit.
+ json_lock = 2;
+ setTimeout(function() { json_lock = 1; reread_file(event, filename); }, 100);
+ return;
+ }
+ json_lock = 1;
+
console.log("Rereading " + JSON_FILENAME);
fs.open(JSON_FILENAME, 'r+', function(err, fd) {
if (err) throw err;
var headers = {
'Content-Type': 'text/json',
- 'X-Remoteglot-Last-Modified': this_json.last_modified,
- 'X-Remoteglot-Num-Viewers': num_viewers,
- 'Access-Control-Expose-Headers': 'X-Remoteglot-Last-Modified, X-Remoteglot-Num-Viewers',
- 'Expires': 'Mon, 01 Jan 1970 00:00:00 UTC',
+ 'X-RGLM': this_json.last_modified,
+ 'X-RGNV': num_viewers,
+ 'Access-Control-Expose-Headers': 'X-RGLM, X-RGNV',
'Vary': 'Accept-Encoding',
};
if (accept_gzip) {
+ headers['Content-Length'] = this_json.gzip.length;
headers['Content-Encoding'] = 'gzip';
response.writeHead(200, headers);
response.write(this_json.gzip);
} else {
+ headers['Content-Length'] = this_json.plain.length;
response.writeHead(200, headers);
- response.write(this_json.text);
+ response.write(this_json.plain);
}
response.end();
}