forked from cory/tildefriends
Add File.stat. Use it to cache manifests to speed up task start. async spreads like a virus.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3377 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
26
core/core.js
26
core/core.js
@ -105,7 +105,7 @@ function databaseGetAll() {
|
||||
return getDatabase(this).getAll();
|
||||
}
|
||||
|
||||
function getPackages() {
|
||||
async function getPackages() {
|
||||
var packages = [];
|
||||
var packageOwners = File.readDirectory("packages/");
|
||||
for (var i = 0; i < packageOwners.length; i++) {
|
||||
@ -116,7 +116,7 @@ function getPackages() {
|
||||
packages.push({
|
||||
owner: packageOwners[i],
|
||||
name: packageNames[j],
|
||||
manifest: getManifest("packages/" + packageOwners[i] + "/" + packageNames[j] + "/" + packageNames[j] + ".js"),
|
||||
manifest: await getManifest("packages/" + packageOwners[i] + "/" + packageNames[j] + "/" + packageNames[j] + ".js"),
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -195,7 +195,17 @@ function readFileUtf8(fileName) {
|
||||
return new TextDecoder("UTF-8").decode(File.readFile(fileName));
|
||||
}
|
||||
|
||||
function getManifest(fileName) {
|
||||
let gManifestCache = {};
|
||||
|
||||
async function getManifest(fileName) {
|
||||
let oldEntry = gManifestCache[fileName];
|
||||
let stat = await File.stat(fileName);
|
||||
if (oldEntry) {
|
||||
if (oldEntry.stat.mtime == stat.mtime && oldEntry.stat.size == stat.size) {
|
||||
return oldEntry.manifest;
|
||||
}
|
||||
}
|
||||
|
||||
let manifest = [];
|
||||
let lines = readFileUtf8(fileName).split("\n").map(x => x.trimRight());
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
@ -212,6 +222,12 @@ function getManifest(fileName) {
|
||||
print("ERROR: getManifest(" + fileName + "): ", error);
|
||||
// Oh well. No manifest.
|
||||
}
|
||||
|
||||
gManifestCache[fileName] = {
|
||||
stat: stat,
|
||||
manifest: result,
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -220,7 +236,7 @@ function packageNameToPath(name) {
|
||||
return "packages/" + process.packageOwner + "/" + name + "/";
|
||||
}
|
||||
|
||||
function getProcess(packageOwner, packageName, key, options) {
|
||||
async function getProcess(packageOwner, packageName, key, options) {
|
||||
var process = gProcesses[key];
|
||||
if (!process
|
||||
&& !(options && "create" in options && !options.create)
|
||||
@ -229,7 +245,7 @@ function getProcess(packageOwner, packageName, key, options) {
|
||||
try {
|
||||
print("Creating task for " + packageName + " " + key);
|
||||
var fileName = "packages/" + packageOwner + "/" + packageName + "/" + packageName + ".js";
|
||||
var manifest = getManifest(fileName);
|
||||
var manifest = await getManifest(fileName);
|
||||
process = {};
|
||||
process.key = key;
|
||||
process.index = gProcessIndex++;
|
||||
|
@ -143,7 +143,7 @@ function socket(request, response, client) {
|
||||
}
|
||||
options.credentials = credentials;
|
||||
|
||||
response.onMessage = function(event) {
|
||||
response.onMessage = async function(event) {
|
||||
if (event.opCode == 0x1 || event.opCode == 0x2) {
|
||||
var message;
|
||||
try {
|
||||
@ -164,7 +164,7 @@ function socket(request, response, client) {
|
||||
response.send(JSON.stringify({lines: [{action: "session", sessionId: sessionId, credentials: credentials}]}), 0x1);
|
||||
|
||||
options.terminalApi = message.terminalApi || [];
|
||||
process = getSessionProcess(packageOwner, packageName, sessionId, options);
|
||||
process = await getSessionProcess(packageOwner, packageName, sessionId, options);
|
||||
process.terminal.readOutput(function(message) {
|
||||
response.send(JSON.stringify(message), 0x1);
|
||||
});
|
||||
@ -226,7 +226,7 @@ function socket(request, response, client) {
|
||||
}
|
||||
}
|
||||
|
||||
function handler(request, response, packageOwner, packageName, uri) {
|
||||
async function handler(request, response, packageOwner, packageName, uri) {
|
||||
var found = false;
|
||||
|
||||
if (badName(packageOwner) || badName(packageName)) {
|
||||
@ -292,7 +292,7 @@ function handler(request, response, packageOwner, packageName, uri) {
|
||||
}
|
||||
}
|
||||
} else if (uri === "/submit") {
|
||||
var process = getServiceProcess(packageOwner, packageName, "submit");
|
||||
var process = await getServiceProcess(packageOwner, packageName, "submit");
|
||||
process.lastActive = Date.now();
|
||||
return process.ready.then(function() {
|
||||
var payload = form.decodeForm(request.body, form.decodeForm(request.query));
|
||||
@ -308,7 +308,7 @@ function handler(request, response, packageOwner, packageName, uri) {
|
||||
});
|
||||
});
|
||||
} else if (uri === "/atom") {
|
||||
var process = getServiceProcess(packageOwner, packageName, "atom");
|
||||
var process = await getServiceProcess(packageOwner, packageName, "atom");
|
||||
process.lastActive = Date.now();
|
||||
return process.ready.then(function() {
|
||||
var payload = form.decodeForm(request.body, form.decodeForm(request.query));
|
||||
|
Reference in New Issue
Block a user