|
|
|
@ -11,8 +11,7 @@
|
|
|
|
|
#include <wait.h>
|
|
|
|
|
|
|
|
|
|
#include "host.hpp"
|
|
|
|
|
|
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
#include "zmq_addon.hpp"
|
|
|
|
|
|
|
|
|
|
sk::runner_backend detect_backend() {
|
|
|
|
|
const char *const argv[] = {"docker", "stats", "--no-stream", nullptr};
|
|
|
|
@ -32,23 +31,49 @@ sk::runner_backend detect_backend() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
std::vector<sk::host> listsHosts = sk::config::loadHostsFromToml("../conf.toml");
|
|
|
|
|
std::vector<sk::host> listsHosts =
|
|
|
|
|
sk::config::loadHostsFromToml("../conf.toml");
|
|
|
|
|
std::priority_queue<sk::host> hosts(listsHosts.begin(), listsHosts.end());
|
|
|
|
|
|
|
|
|
|
std::queue<sk::program> programQueue;
|
|
|
|
|
|
|
|
|
|
if (hosts.empty()) {
|
|
|
|
|
std::cerr << "Pas de host" << std::endl;
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::queue<sk::program> queue;
|
|
|
|
|
queue.push(sk::program{"echo $(( 1 + 2 ))", "ghcr.io/moshell-lang/moshell:master"});
|
|
|
|
|
|
|
|
|
|
sk::runner runner(detect_backend());
|
|
|
|
|
while (!queue.empty()) {
|
|
|
|
|
const sk::program ¤t = queue.front();
|
|
|
|
|
sk::run_result res = runner.run_blocking(current);
|
|
|
|
|
std::cout << "out: " << res.out << "\n";
|
|
|
|
|
std::cout << "err: " << res.err << "\n";
|
|
|
|
|
queue.pop();
|
|
|
|
|
|
|
|
|
|
zmq::context_t context(1);
|
|
|
|
|
zmq::socket_t receiver(context, zmq::socket_type::pull);
|
|
|
|
|
receiver.connect("tcp://localhost:5557");
|
|
|
|
|
zmq::socket_t sender(context, zmq::socket_type::push);
|
|
|
|
|
sender.connect("tcp://localhost:5558");
|
|
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
|
zmq::message_t request;
|
|
|
|
|
receiver.recv(request);
|
|
|
|
|
if (request.size() < 32) {
|
|
|
|
|
std::cerr << "Invalid request" << std::endl;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
std::string_view jobId(static_cast<char *>(request.data()), 32);
|
|
|
|
|
std::string requestString(static_cast<char *>(request.data()) + 32,
|
|
|
|
|
request.size() - 32);
|
|
|
|
|
|
|
|
|
|
std::cout << "Executing " << request.size() << " bytes code.\n";
|
|
|
|
|
sk::program program{requestString,
|
|
|
|
|
"ghcr.io/moshell-lang/moshell:master"};
|
|
|
|
|
sk::run_result result = runner.run_blocking(program);
|
|
|
|
|
|
|
|
|
|
std::cout << "Result: " << result.out << std::endl;
|
|
|
|
|
|
|
|
|
|
// Send the job id and result.out to sink
|
|
|
|
|
zmq::message_t reply(32 + result.out.size());
|
|
|
|
|
memcpy(reply.data(), jobId.data(), 32);
|
|
|
|
|
memcpy(static_cast<char *>(reply.data()) + 32, result.out.data(),
|
|
|
|
|
result.out.size());
|
|
|
|
|
sender.send(reply, zmq::send_flags::none);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|