Compare commits

..

2 Commits

4 changed files with 67 additions and 103 deletions

View File

@@ -260,6 +260,12 @@ export async function RunAndWait(ns, sScript, ...args) {
while (ns.isRunning(sScript, ...args)) { await ns.sleep(100); } while (ns.isRunning(sScript, ...args)) { await ns.sleep(100); }
} }
/** @param {NS} ns */
export async function DistributeRunAndWait(ns, sScript, ...args) {
if (!ns.isRunning(sScript, ...args)) { drun(ns, sScript, ...args); }
while (ns.isRunning(sScript, ...args)) { await ns.sleep(100); }
}
/** @param {NS} ns */ /** @param {NS} ns */
export function listWorkServers(ns) { export function listWorkServers(ns) {
ns.disableLog("ALL"); ns.disableLog("ALL");
@@ -338,18 +344,36 @@ export function sortJsonArrayByKey(array, primaryKey, secondaryKey) {
/** @param {NS} ns */ /** @param {NS} ns */
export async function distributeScript(ns, sScript, nThreads, [...args]) { export async function drun(ns, ...args ){
//ns.tail(); //ns.tail();
ns.disableLog("ALL"); ns.disableLog("scp");
ns.print(args);
let aArgs = 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");
const sWeakenScript = "RMweaken.js";
const sGrowScript = "RMgrow.js";
const sListName = "serverList.txt"; const sListName = "serverList.txt";
if (!ns.fileExists(sListName, "home")) { ns.print(`ERROR ${sListName} does not exist.`); return false; }; if (!ns.fileExists(sListName, "home")) { ns.print(`ERROR ${sListName} does not exist.`); return false; };
let sServerList = ns.read(sListName); let sServerList = ns.read(sListName);
let aSortedList = sortJsonArrayByKey(sServerList, "serverCores", "maxRam").reverse(); let aSortedList;
if (sScript === sWeakenScript || sScript === sGrowScript) {
aSortedList = sortJsonArrayByKey(sServerList, "serverCores", "maxRam").reverse();
} else {
aSortedList = sortJsonArrayByKey(sServerList, "serverCores", "maxRam");
}
ns.print(sScript); ns.print(sScript);
ns.print(nThreads); ns.print(nThreads);
ns.print(...args);
const nScriptSize = ns.getScriptRam(sScript, "home"); const nScriptSize = ns.getScriptRam(sScript, "home");
let nTotalSize = nScriptSize * nThreads; let nTotalSize = nScriptSize * nThreads;
@@ -360,19 +384,40 @@ export async function distributeScript(ns, sScript, nThreads, [...args]) {
aSortedList.forEach((entry) => { aSortedList.forEach((entry) => {
let sHost = entry.serverName; let sHost = entry.serverName;
ns.print("sHost = " + sHost) ns.print("sHost = " + sHost)
let nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName); let nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nTotalSize) { if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nTotalSize && entry.serverName !== "home") {
ns.scp(sScript, sHost); ns.scp(aScriptFiles, sHost), "home";
ns.exec(sScript, sHost, nThreads, ...args); 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; nThreads = 0;
nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName); nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
} }
else if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nScriptSize) { else if (nThreads >= 1 && entry.rootAccess && nFreeRAM >= nScriptSize) {
let nThreadsDist = Math.floor(nFreeRAM / nScriptSize); let nThreadsDist = Math.floor(nFreeRAM / nScriptSize);
ns.scp(sScript, sHost); if (entry.serverName !== "home") {
ns.scp(aScriptFiles, sHost), "home";
ns.scp(aTXTFiles, sHost), "home";
}
ns.print("room for : " + nThreadsDist + " scripts"); ns.print("room for : " + nThreadsDist + " scripts");
ns.exec(sScript, sHost, nThreadsDist, ...args); ns.exec(sScript, sHost, nThreadsDist, ...aArgs);
nThreads -= nThreadsDist; nThreads -= nThreadsDist;
nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName); nFreeRAM = ns.getServerMaxRam(entry.serverName) - ns.getServerUsedRam(entry.serverName);
} }

View File

@@ -1,82 +1,6 @@
import { sortJsonArrayByKey } from "Library.js"; import { drun } from "./Library";
/** @param {NS} ns */ /** @param {NS} ns */
export async function main(ns) { export async function main(ns) {
//ns.tail(); await drun(ns, ...ns.args);
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);
}
});
} }

View File

@@ -1,4 +1,4 @@
import { RunAndWait } from "./Library"; import { DistributeRunAndWait, drun, RunAndWait } from "./Library";
/** @param {NS} ns */ /** @param {NS} ns */
export async function main(ns) { export async function main(ns) {
@@ -14,23 +14,18 @@ export async function main(ns) {
const sServerListFile = "serverList.txt"; const sServerListFile = "serverList.txt";
const sBestServerFile = "bestTarget.txt"; const sBestServerFile = "bestTarget.txt";
const sWorkerList = "WorkerList.js"; const sWorkerList = "WorkerList.js";
const sCorpControl = "CorpControl.js";
await RunAndWait(ns, sServerListScript); await RunAndWait(ns, sServerListScript);
/* if (!ns.isRunning(sWorkerList)) { ns.run(sWorkerList); }
const oServerList = JSON.parse(ns.read(sServerListFile)); if (!ns.isRunning(sGangScript)) { drun(ns, sGangScript); }
const oHome = oServerList["home"]; //if (!ns.isRunning(sCorpControl)) { ns.run(sCorpControl); }
const nHomeMaxRAM = oHome.maxRam; if (!ns.isRunning(sPServScript)) { drun(ns, sPServScript); }
ns.print("nHomeMaxRAM = " + nHomeMaxRAM); await DistributeRunAndWait(ns, sBackdoorScript);
*/ await DistributeRunAndWait(ns, sUpdateTarget);
let oServerlist = JSON.parse(ns.read(sServerListFile)); let oServerlist = JSON.parse(ns.read(sServerListFile));
let nHomeMaxRAM = oServerlist.find((entry) => entry.serverName === "home").maxRam; let nHomeMaxRAM = oServerlist.find((entry) => entry.serverName === "home").maxRam;
ns.print("nHomeMaxRAM = " + nHomeMaxRAM); ns.print("nHomeMaxRAM = " + nHomeMaxRAM);
if (!ns.isRunning(sGangScript)) { ns.run(sGangScript); }
if (!ns.isRunning(sPServScript)) { ns.run(sPServScript); }
await RunAndWait(ns, sBackdoorScript);
await RunAndWait(ns, sUpdateTarget);
//await RunAndWait(ns, sBatchController);
if (nHomeMaxRAM >= 256) { if (!ns.isRunning(sMonitorScript)) { ns.run(sMonitorScript); } } if (nHomeMaxRAM >= 256) { if (!ns.isRunning(sMonitorScript)) { ns.run(sMonitorScript); } }
} }

View File

@@ -1,4 +1,4 @@
import { distributeScript, getGrowThreads, getSetting, sortJsonArrayByKey } from "../Library"; import { getGrowThreads, getSetting, sortJsonArrayByKey } from "../Library";
/** @param {NS} ns */ /** @param {NS} ns */
export async function main(ns) { export async function main(ns) {