-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget_stats.js
More file actions
99 lines (93 loc) · 2.73 KB
/
get_stats.js
File metadata and controls
99 lines (93 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
* @param {NS} ns
**/
/*
Gets stats of each hacked server.
RAM: 2.55GB
*/
function get_all_servers(ns, all=false) {
/*
Scans and iterates through all servers.
If all is false, only servers with root access and have money are returned.
*/
var servers = ["home"]
var result = []
var i = 0
while (i < servers.length) {
var server = servers[i]
var s = ns.scan(server)
for (var j in s) {
var con = s[j]
if (servers.indexOf(con) < 0) {
servers.push(con)
if (all || (ns.hasRootAccess(con) && parseInt(ns.getServerMaxMoney(con)) > 0)) {
result.push(con)
}
}
}
i += 1
}
return result
}
function get_action(ns, host) {
/*
Gets the first action in the list and returns it.
*/
var actions = ns.ps(host)
if (actions.length == 0) {
return null
}
return actions[0].filename.replace("scripts/", "").replace(".js", "")
}
function pad_str(string, len) {
/*
Prepends the requested padding to the string.
*/
var pad = " "
return String(pad + string).slice(-len)
}
function get_server_data(ns, server) {
/*
Creates the info text for each server. Currently gets money, security, and ram.
NOTE: ns.getServer() can return a server object and obtain all of the necessary properties.
However, ns.getServer() costs 2GB, which doubles the RAM requirement for this script.
*/
var moneyAvailable = ns.getServerMoneyAvailable(server)
var moneyMax = ns.getServerMaxMoney(server)
var securityLvl = ns.getServerSecurityLevel(server)
var securityMin = ns.getServerMinSecurityLevel(server)
var ram = ns.getServerMaxRam(server)
return `${pad_str(server, 17)}`+
` money:${pad_str(parseInt(moneyAvailable), 12)}/${pad_str(parseInt(moneyMax), 12)}(${pad_str((moneyAvailable / moneyMax).toFixed(2), 4)})` +
` security:${pad_str(securityLvl.toFixed(2), 6)}(${pad_str(securityMin, 2)})` +
` RAM:${pad_str(parseInt(ram), 4)}` +
` Action:${pad_str(get_action(ns, server),7)}`
}
function get_servers(ns) {
/*
Gets servers. If specific servers requested, then returns those only.
Otherwise, scans and returns all servers.
return: list of servers
*/
if (ns.args.length >= 1) {
return ns.args
} else {
return get_all_servers(ns, false)
}
}
export async function main(ns) {
var servers = get_servers(ns)
var stats = {}
// For each server in servers, get the server data and add to our Hash Table.
for (var server of servers) {
stats[parseInt(ns.getServerMaxMoney(server))] = get_server_data(ns, server)
}
// Sort each server based on how much money it holds.
var keys = Object.keys(stats)
keys.sort((a, b) => a - b)
// Print the results
for (var i in keys){
var key = keys[i]
ns.tprint(stats[key])
}
}