diff --git a/dyana/loaders/js/Dockerfile b/dyana/loaders/js/Dockerfile index 9463f1f..8689eec 100644 --- a/dyana/loaders/js/Dockerfile +++ b/dyana/loaders/js/Dockerfile @@ -1,10 +1,13 @@ -FROM node:23-slim +FROM python:3.12-slim + +RUN apt-get update && apt-get install -y nodejs npm WORKDIR /app -COPY main.js . +COPY dyana.py . +COPY main.py . ARG EXTRA_REQUIREMENTS RUN if [ -n "$EXTRA_REQUIREMENTS" ]; then npm install $EXTRA_REQUIREMENTS; fi -ENTRYPOINT ["node", "main.js"] +ENTRYPOINT ["python3", "-W", "ignore", "main.py"] \ No newline at end of file diff --git a/dyana/loaders/js/Makefile b/dyana/loaders/js/Makefile deleted file mode 100644 index c4b1125..0000000 --- a/dyana/loaders/js/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - docker build -t dyana-js-loader . \ No newline at end of file diff --git a/dyana/loaders/js/main.js b/dyana/loaders/js/main.js deleted file mode 100644 index 4de8908..0000000 --- a/dyana/loaders/js/main.js +++ /dev/null @@ -1,32 +0,0 @@ -const { exec } = require('child_process'); - -let script = process.argv[3]; -let result = { - "ram": { "start": process.resourceUsage().maxRSS * 1024 }, - "errors": {}, - "stdout": null, - "stderr": null, - "exit_code": null, -} - -exec(`node ${script}`, (error, stdout, stderr) => { - result["ram"]["after_execution"] = process.resourceUsage().maxRSS * 1024; - - if (error) { - result["errors"]["js"] = error.message; - result["exit_code"] = error.code; - } else { - result["exit_code"] = 0; - } - - if (stderr) { - result["stderr"] = stderr; - } - - if (stdout) { - result["stdout"] = stdout; - } - - console.log(JSON.stringify(result)); -}); - diff --git a/dyana/loaders/js/main.py b/dyana/loaders/js/main.py new file mode 100644 index 0000000..3f9758a --- /dev/null +++ b/dyana/loaders/js/main.py @@ -0,0 +1,27 @@ +import argparse +import json +import os +import subprocess + +from dyana import Profiler # type: ignore[attr-defined] + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Run an Javascript file") + parser.add_argument("--script", help="Path to Javascript file", required=True) + args = parser.parse_args() + profiler: Profiler = Profiler() + + if not os.path.exists(args.script): + profiler.track_error("js", "Javascript file not found") + else: + try: + result = subprocess.run(["node", args.script], capture_output=True, text=True) + + profiler.track_memory("after_execution") + profiler.track("exit_code", result.returncode) + profiler.track("stdout", result.stdout) + profiler.track("stderr", result.stderr) + except Exception as e: + profiler.track_error("js", str(e)) + + print(json.dumps(profiler.as_dict()))