82 lines
3.4 KiB
JavaScript
82 lines
3.4 KiB
JavaScript
import { sortJsonArrayByKey } from "Library.js";
|
|
|
|
/** @param {NS} ns */
|
|
export async function main(ns) {
|
|
//ns.tail();
|
|
ns.disableLog("scp");
|
|
let aArgs = ns.args;
|
|
const sScript = aArgs.shift();
|
|
let nThreads = aArgs.shift();
|
|
if (nThreads === undefined) { nThreads = 1 };
|
|
|
|
ns.print(aArgs);
|
|
|
|
const aScriptFiles = ns.ls("home", ".js");
|
|
const aTXTFiles = ns.ls("home", ".txt");
|
|
//ns.tprint(aScriptFiles);
|
|
//ns.tprint(aTXTFiles);
|
|
|
|
const sWeakenScript = "RMweaken.js";
|
|
const sGrowScript = "RMgrow.js";
|
|
const sListName = "serverList.txt";
|
|
|
|
if (!ns.fileExists(sListName, "home")) { ns.print(`ERROR ${sListName} does not exist.`); return false; };
|
|
let sServerList = ns.read(sListName);
|
|
let aSortedList;
|
|
if (sScript === sWeakenScript || sScript === sGrowScript) {
|
|
aSortedList = sortJsonArrayByKey(sServerList, "serverCores", "maxRam").reverse();
|
|
} else {
|
|
aSortedList = sortJsonArrayByKey(sServerList, "serverCores", "maxRam");
|
|
}
|
|
|
|
ns.print(sScript);
|
|
ns.print(nThreads);
|
|
|
|
const nScriptSize = ns.getScriptRam(sScript, "home");
|
|
let nTotalSize = nScriptSize * nThreads;
|
|
|
|
ns.print("nScriptSize = " + nScriptSize);
|
|
ns.print("nTotalSize = " + nTotalSize);
|
|
|
|
aSortedList.forEach((entry) => {
|
|
let sHost = entry.serverName;
|
|
ns.print("sHost = " + sHost)
|
|
let nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
|
|
if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nTotalSize && entry.serverName !== "home") {
|
|
ns.scp(aScriptFiles, sHost), "home";
|
|
ns.scp(aTXTFiles, sHost), "home";
|
|
ns.exec(sScript, sHost, nThreads, ...aArgs);
|
|
nThreads = 0;
|
|
nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
|
|
}
|
|
else if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nScriptSize && entry.serverName !== "home") {
|
|
let nThreadsDist = Math.floor(nFreeRAM / nScriptSize);
|
|
ns.scp(aScriptFiles, sHost), "home";
|
|
ns.scp(aTXTFiles, sHost), "home";
|
|
ns.print("room for : " + nThreadsDist + " scripts");
|
|
ns.exec(sScript, sHost, nThreadsDist, ...aArgs);
|
|
nThreads -= nThreadsDist;
|
|
nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
|
|
}
|
|
else if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nTotalSize) {
|
|
if (entry.serverName !== "home"){
|
|
ns.scp(aScriptFiles, sHost), "home";
|
|
ns.scp(aTXTFiles, sHost), "home";
|
|
}
|
|
ns.exec(sScript, sHost, nThreads, ...aArgs);
|
|
nThreads = 0;
|
|
nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
|
|
}
|
|
else if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nScriptSize) {
|
|
let nThreadsDist = Math.floor(nFreeRAM / nScriptSize);
|
|
if (entry.serverName !== "home"){
|
|
ns.scp(aScriptFiles, sHost), "home";
|
|
ns.scp(aTXTFiles, sHost), "home";
|
|
}
|
|
ns.print("room for : " + nThreadsDist + " scripts");
|
|
ns.exec(sScript, sHost, nThreadsDist, ...aArgs);
|
|
nThreads -= nThreadsDist;
|
|
nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
|
|
}
|
|
});
|
|
} |