Author: Pedro Lucas Porcellis <porcellis@eletrotupi.com>
server: actually start services instead of spawning the dummy one
cmd/beterrabad/executor.ha | 50 ++++++++++++++++++++-------------------- cmd/beterrabad/socket.ha | 2
diff --git a/cmd/beterrabad/executor.ha b/cmd/beterrabad/executor.ha index 4d57a8d3891e74d9b14617ea886755c66cffe143..c801811639e0186ba9fbec02dfa97fb3a9a5d5bd 100644 --- a/cmd/beterrabad/executor.ha +++ b/cmd/beterrabad/executor.ha @@ -11,28 +11,26 @@ fn status_service(cmdargs: str) str = { return "TODO"; }; -fn start_service(cmdargs: str) str = { - let dummy_serv: beterraba::servdef = beterraba::servdef { - name = "Dummy", - desc = "Dummy", - cmd = "bash", - args = "-c ~/test.sh", - ... - }; +fn start_service(svcname: str, serv: *server) str = { + let service: nullable *beterraba::service = null; - let service = beterraba::service { - name = "Dummy", - desc = "DUmmy", - definition = dummy_serv, - status = beterraba::status::STOPPED, - ... + for (let i = 0z; i < len(serv.services); i += 1) { + if (serv.services[i].name == svcname) { + service = &serv.services[i]; + break; + }; }; - match (boot(&service)) { - case let err: booterror => - return bootstrerror(err); - case void => - return "Started successfully"; + match (service) { + case null => + return "Didn't find a service with that name"; + case let svc: *beterraba::service => + match (boot(svc)) { + case let err: booterror => + return bootstrerror(err); + case void => + return "Started successfully"; + }; }; }; @@ -80,6 +78,8 @@ // XXX: This method should yield a booterror which we should eventually // translate it back to a str, the same goes to other methods fn boot(service: *beterraba::service) (void | booterror) = { log::printfln("Booting up {}", service.name); + log::printfln("Booting up with cmd {} and args {}", + service.definition.cmd, service.definition.args); match (exec::fork()) { case let childpid: int => @@ -89,23 +89,23 @@ log::printfln("Starting process {}", service.name); case let err: exec::error => return err; case void => - let cmd = exec::cmd("bash", "-c", "~/test.sh"); + let cmd = exec::cmd(service.definition.cmd, + service.definition.args); match (cmd) { case let cmddef: exec::command => exec::exec(&cmddef); case exec::nocmd => - fmt::printfln("Couldn't build cmd {}", service.definition.cmd)!; + fmt::printfln("Couldn't build cmd {}", + service.definition.cmd)!; case exec::error => service.status = beterraba::status::CRASHED; - fmt::printfln("Couldn't execute cmd {}, error", service.definition.cmd)!; + fmt::printfln("Couldn't execute cmd {}, error", + service.definition.cmd)!; case => fmt::println("Something went terrible wrong, good luck!")!; }; }; - - //let cmd = exec::cmd(service.definition.cmd, service.definition.args); - let cmd = exec::cmd("bash", "-c", "~/test.sh"); }; fn bootstrerror(err: booterror) const str = { diff --git a/cmd/beterrabad/socket.ha b/cmd/beterrabad/socket.ha index 7b316991939b7fda7ce543cf523f8c0029d1e7a5..c53a715c5a9dbf9ba1de2c36408f14b45f04ba6c 100644 --- a/cmd/beterrabad/socket.ha +++ b/cmd/beterrabad/socket.ha @@ -191,7 +191,7 @@ // TODO: Flesh out command execution here switch (cmd) { case "start" => - let status = start_service(args); + let status = start_service(args, server); fmt::fprintf(&buf, status)?; case "status" => let status = status_service(args);