|
|
@ -1,4 +1,5 @@
|
|
|
|
#include "config.hpp"
|
|
|
|
#include "config.hpp"
|
|
|
|
|
|
|
|
#include "network.hpp"
|
|
|
|
#include "program.hpp"
|
|
|
|
#include "program.hpp"
|
|
|
|
#include "runner.hpp"
|
|
|
|
#include "runner.hpp"
|
|
|
|
#include <filesystem>
|
|
|
|
#include <filesystem>
|
|
|
@ -13,6 +14,9 @@
|
|
|
|
#include "host.hpp"
|
|
|
|
#include "host.hpp"
|
|
|
|
#include "zmq_addon.hpp"
|
|
|
|
#include "zmq_addon.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr uint32_t JOB_ID_LEN = 32;
|
|
|
|
|
|
|
|
static constexpr uint32_t MIN_MESSAGE_LEN = JOB_ID_LEN + sizeof(uint32_t) * 2;
|
|
|
|
|
|
|
|
|
|
|
|
sk::runner_backend detect_backend() {
|
|
|
|
sk::runner_backend detect_backend() {
|
|
|
|
const char *const argv[] = {"docker", "stats", "--no-stream", nullptr};
|
|
|
|
const char *const argv[] = {"docker", "stats", "--no-stream", nullptr};
|
|
|
|
pid_t pid;
|
|
|
|
pid_t pid;
|
|
|
@ -53,15 +57,27 @@ int main() {
|
|
|
|
while (true) {
|
|
|
|
while (true) {
|
|
|
|
zmq::message_t request;
|
|
|
|
zmq::message_t request;
|
|
|
|
receiver.recv(request);
|
|
|
|
receiver.recv(request);
|
|
|
|
if (request.size() < 32) {
|
|
|
|
if (request.size() < MIN_MESSAGE_LEN) {
|
|
|
|
|
|
|
|
std::cerr << "Invalid request" << std::endl;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string_view jobId(static_cast<char *>(request.data()), JOB_ID_LEN);
|
|
|
|
|
|
|
|
uint32_t imageLen =
|
|
|
|
|
|
|
|
sk::read_uint32(static_cast<char *>(request.data()) + JOB_ID_LEN);
|
|
|
|
|
|
|
|
uint32_t codeLen =
|
|
|
|
|
|
|
|
sk::read_uint32(static_cast<char *>(request.data()) + JOB_ID_LEN + sizeof(uint32_t));
|
|
|
|
|
|
|
|
if (request.size() < MIN_MESSAGE_LEN + imageLen + codeLen) {
|
|
|
|
std::cerr << "Invalid request" << std::endl;
|
|
|
|
std::cerr << "Invalid request" << std::endl;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
std::string_view jobId(static_cast<char *>(request.data()), 32);
|
|
|
|
std::string imageString(static_cast<char *>(request.data()) +
|
|
|
|
std::string requestString(static_cast<char *>(request.data()) + 32,
|
|
|
|
MIN_MESSAGE_LEN,
|
|
|
|
request.size() - 32);
|
|
|
|
imageLen);
|
|
|
|
|
|
|
|
std::string requestString(static_cast<char *>(request.data()) +
|
|
|
|
|
|
|
|
MIN_MESSAGE_LEN + imageLen,
|
|
|
|
|
|
|
|
codeLen);
|
|
|
|
|
|
|
|
|
|
|
|
std::cout << "Executing " << request.size() << " bytes code.\n";
|
|
|
|
std::cout << "Executing " << codeLen << " bytes code.\n";
|
|
|
|
sk::program program{requestString,
|
|
|
|
sk::program program{requestString,
|
|
|
|
"ghcr.io/moshell-lang/moshell:master"};
|
|
|
|
"ghcr.io/moshell-lang/moshell:master"};
|
|
|
|
sk::run_result result = runner.run_blocking(program);
|
|
|
|
sk::run_result result = runner.run_blocking(program);
|
|
|
@ -69,9 +85,9 @@ int main() {
|
|
|
|
std::cout << "Result: " << result.out << std::endl;
|
|
|
|
std::cout << "Result: " << result.out << std::endl;
|
|
|
|
|
|
|
|
|
|
|
|
// Send the job id and result.out to sink
|
|
|
|
// Send the job id and result.out to sink
|
|
|
|
zmq::message_t reply(32 + result.out.size());
|
|
|
|
zmq::message_t reply(JOB_ID_LEN + result.out.size());
|
|
|
|
memcpy(reply.data(), jobId.data(), 32);
|
|
|
|
memcpy(reply.data(), jobId.data(), JOB_ID_LEN);
|
|
|
|
memcpy(static_cast<char *>(reply.data()) + 32, result.out.data(),
|
|
|
|
memcpy(static_cast<char *>(reply.data()) + JOB_ID_LEN, result.out.data(),
|
|
|
|
result.out.size());
|
|
|
|
result.out.size());
|
|
|
|
sender.send(reply, zmq::send_flags::none);
|
|
|
|
sender.send(reply, zmq::send_flags::none);
|
|
|
|
}
|
|
|
|
}
|
|
|
|