Warning: session_start(): open(/var/lib/php/sessions/sess_nfareujj2150alpvh8kisilm71, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
static new TreeMap startVMLister_vms;
static Lock startVMLister_lock = lock();
sclass startVMLister_Data {
long started;
int port;
S vmID;
bool hidden;
}
static void startVMLister() {
S bot = "VM Lister.";
if (!hasBot(bot)) {
makeBot(bot, f startVMLister_answer);
thread { startVMLister_scan(); }
}
}
static S startVMLister_answer(S s) {
lock startVMLister_lock;
new Matches m;
if "started vm * *" {
int port = parseInt($1);
startVMLister_vms.put(port, nu(startVMLister_Data, started := now(), +port,
vmID := $2));
ret "OK";
}
if "hiding vm *" {
startVMLister_Data vm = startVMLister_vms.get(parseInt($1));
if (vm != null) vm.hidden = true;
ret "OK";
}
if "unhiding vm *" {
startVMLister_Data vm = startVMLister_vms.get(parseInt($1));
if (vm != null) vm.hidden = false;
ret "OK";
}
if "killing vm *" {
startVMLister_vms.remove(parseInt($1));
ret "OK";
}
if "number of vms" ret lstr(startVMLister_vms);
if "number of hidden vms" ret str(countWhere(values(startVMLister_vms), hidden := true));
if "scan vms" {
startVMLister_scan();
ret "OK, found " + n(startVMLister_vms, "VM");
}
null;
}
svoid startVMLister_scan {
lock startVMLister_lock;
new TreeMap vms;
for (DialogIO io : talkToAllVMs()) try {
new startVMLister_Data vm;
vm.port = io.getPort();
vm.vmID = io.ask("get vm id");
vm.hidden = isYes(io.ask("is hidden vm"));
vm.started = parseLongOpt(io.ask("vm start date"));
vms.put(vm.port, vm);
} finally {
io.close();
}
copyMap(vms, startVMLister_vms);
}