Add support for spawning peers, and monitoring the processes
This commit is contained in:
36
default.nix
36
default.nix
@@ -3,9 +3,10 @@
|
||||
pkgs,
|
||||
mixRelease,
|
||||
elixir,
|
||||
fetchMixDeps,
|
||||
}: let
|
||||
pname = "frajtano";
|
||||
pkg = mixRelease {
|
||||
pkg = mixRelease rec {
|
||||
inherit pname;
|
||||
version = "0.0.1";
|
||||
|
||||
@@ -16,6 +17,18 @@
|
||||
filter = path: _type: baseNameOf path != "flake.nix" && baseNameOf path != "flake.lock";
|
||||
};
|
||||
|
||||
# Adapted from https://blog.eigenvalue.net/nix-rerunning-fixed-output-derivations/
|
||||
# deps hash should change any time ./mix.lock changes, and not otherwise
|
||||
mixFodDeps = let
|
||||
deps = fetchMixDeps {
|
||||
pname = "mix-deps-${pname}";
|
||||
inherit version src;
|
||||
sha256 = "sha256-4g5lUlr5+l+mNVp0InZkx6X31g2cckI8NNQp37QgBis=";
|
||||
};
|
||||
hash = builtins.substring 11 32 "${./mix.lock}";
|
||||
in
|
||||
deps.overrideAttrs (attrs: {name = "${deps.name}-${hash}";});
|
||||
|
||||
ELIXIR_MAKE_CACHE_DIR = "/tmp/.elixir-make-cache";
|
||||
meta.mainProgram = pname;
|
||||
};
|
||||
@@ -25,14 +38,24 @@
|
||||
file="$FRAJTANO_DIR/cookie"
|
||||
(umask 077; [ -f "$file" ] || ${pkgs.coreutils}/bin/head -c 128 /dev/urandom | ${pkgs.coreutils}/bin/base64 -w0 > "$file")
|
||||
export RELEASE_COOKIE=$(${pkgs.coreutils}/bin/cat "$file")
|
||||
export RELEASE_NODE="frajtano-$(${pkgs.coreutils}/bin/whoami)@$(${pkgs.coreutils}/bin/cat /etc/hostname)"
|
||||
[ -n $RELEASE_NODE ] || export RELEASE_NODE="frajtano-$(${pkgs.coreutils}/bin/whoami)@$(${pkgs.coreutils}/bin/cat /etc/hostname)"
|
||||
run() {
|
||||
exec ${lib.getExe pkg} "$@"
|
||||
}
|
||||
|
||||
list() {
|
||||
for i in "$@"; do
|
||||
echo "\"$i\", "
|
||||
done
|
||||
}
|
||||
|
||||
case "''${1:-}" in
|
||||
assimilate)
|
||||
run rpc ":ok = \"$(echo -n "$2" | ${pkgs.coreutils}/bin/base64)\" |> Base.decode64!() |> Frajtano.Agent.add_peer()"
|
||||
run rpc ":ok = \"$(echo -n "$2" | ${pkgs.coreutils}/bin/base64)\" |> Base.decode64!() |> Frajtano.Agent.assimilate()"
|
||||
;;
|
||||
spawn)
|
||||
shift
|
||||
run rpc ":ok = Frajtano.Agent.spawn_peer({\"/usr/bin/env\", [$(list "$@")]})"
|
||||
;;
|
||||
socket)
|
||||
echo $FRAJTANO_DIR/agent.sock
|
||||
@@ -42,4 +65,9 @@
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
in pkgs.symlinkJoin { name = pname; paths = [ script pkg ]; meta.mainProgram = pname; }
|
||||
in
|
||||
pkgs.symlinkJoin {
|
||||
name = pname;
|
||||
paths = [script pkg];
|
||||
meta.mainProgram = pname;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user