mirror of
https://github.com/runcitadel/core.git
synced 2024-11-11 16:30:38 +00:00
Add karen v2
This commit is contained in:
parent
3d3568c6e0
commit
f6dae9c646
|
@ -108,7 +108,7 @@ services:
|
|||
ipv4_address: $DASHBOARD_IP
|
||||
manager:
|
||||
container_name: manager
|
||||
image: ghcr.io/runcitadel/manager:v0.0.12@sha256:de97eeb6e8caae5d1a8aeb045213621cf8e6e928177236bb0b3c25e76f6cd041
|
||||
image: ghcr.io/runcitadel/manager:feat-karen-v2@sha256:61dfc6a23bb6603096673e517ec058730ca7e1fbe251df38760c2860d03b1dd0
|
||||
depends_on:
|
||||
- tor
|
||||
- redis
|
||||
|
@ -121,6 +121,7 @@ services:
|
|||
- ${PWD}/info.json:/info.json
|
||||
- ${PWD}/db:/db
|
||||
- ${PWD}/events/signals:/signals
|
||||
- ${PWD}/events:/events
|
||||
- ${PWD}/apps:/apps
|
||||
- ${PWD}/lnd:/lnd:ro
|
||||
- ${PWD}/statuses:/statuses
|
||||
|
|
|
@ -6,8 +6,4 @@
|
|||
|
||||
CITADEL_ROOT="$(readlink -f $(dirname "${BASH_SOURCE[0]}")/../..)"
|
||||
|
||||
signal="${1}"
|
||||
command=${signal%%"-"*}
|
||||
app=${signal#*"-"}
|
||||
|
||||
"${CITADEL_ROOT}/scripts/app" "${command}" "${app}"
|
||||
"${CITADEL_ROOT}/scripts/app" "$@"
|
||||
|
|
102
karen
102
karen
|
@ -1,83 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# SPDX-FileCopyrightText: 2020 Umbrel. https://getumbrel.com
|
||||
# SPDX-FileCopyrightText: 2021-2022 Citadel and contributors.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
import socket
|
||||
import os
|
||||
import time
|
||||
|
||||
# karen watches for signals and executes triggers in the events dir
|
||||
# karen gets triggered a lot
|
||||
rootDir = os.path.dirname(os.path.abspath(__file__))
|
||||
os.chdir(rootDir)
|
||||
|
||||
check_root () {
|
||||
if [[ $UID != 0 ]]; then
|
||||
echo "Error: This script must be run as root."
|
||||
echo "Can I speak to a manager please?"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
if os.path.exists("events/karen"):
|
||||
os.remove("events/karen")
|
||||
|
||||
check_if_not_already_running() {
|
||||
if ps ax | grep $0 | grep -v $$ | grep bash | grep -v grep
|
||||
then
|
||||
echo "karen is already running"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
server.bind("events/karen")
|
||||
|
||||
check_dependencies () {
|
||||
for cmd in "$@"; do
|
||||
if ! command -v $cmd >/dev/null 2>&1; then
|
||||
echo "This script requires \"${cmd}\" to be installed"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
check_root
|
||||
|
||||
check_if_not_already_running
|
||||
|
||||
check_dependencies fswatch readlink dirname
|
||||
|
||||
if [[ -n "$1" ]]; then
|
||||
root_dir="$(readlink -f $1)"
|
||||
else
|
||||
root_dir="$(dirname $(readlink -f ${BASH_SOURCE[0]}))/events"
|
||||
fi
|
||||
signal_dir="$root_dir/signals"
|
||||
trigger_dir="$root_dir/triggers"
|
||||
|
||||
if [[ ! -d "$root_dir" ]]; then
|
||||
echo "Root dir does not exist '$root_dir'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "karen will start in 30 seconds"
|
||||
sleep 30
|
||||
echo "karen is running in $root_dir"
|
||||
fswatch -0 --event=PlatformSpecific $signal_dir | while read -d "" event; do
|
||||
signal="${event#"$signal_dir"}"
|
||||
signal="${signal#"/"}"
|
||||
trigger="$trigger_dir/$signal"
|
||||
args=""
|
||||
|
||||
# If signal isn't an empty string, then it's a signal
|
||||
if [[ -n "$signal" ]]; then
|
||||
echo "Got signal: $signal"
|
||||
|
||||
# If the signal starts wih app-, the trigger is "$trigger_dir/app"
|
||||
# and the args are the rest of the signal
|
||||
if [[ "$signal" =~ ^app- ]] && [[ "$signal" != "app-update" ]]; then
|
||||
trigger="$trigger_dir/app"
|
||||
args="${signal#"app-"}"
|
||||
fi
|
||||
if test -x "$trigger"; then
|
||||
echo "karen is getting triggered!"
|
||||
if [[ ! -f "statuses/update-in-progress" ]]; then
|
||||
"$trigger" $args &
|
||||
fi
|
||||
else
|
||||
echo "No trigger found"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
while True:
|
||||
server.listen(1)
|
||||
conn, addr = server.accept()
|
||||
datagram = conn.recv(1024)
|
||||
if datagram:
|
||||
instructions = datagram.decode("utf-8").strip().split()
|
||||
cmd = instructions[0]
|
||||
if(cmd == "trigger"):
|
||||
trigger = instructions[1]
|
||||
instructions.pop(0)
|
||||
instructions.pop(0)
|
||||
print("Executing trigger {} with arguments {}".format(trigger, " ".join(instructions)))
|
||||
os.system("events/triggers/{} {}".format(trigger, " ".join(instructions)))
|
||||
conn.close()
|
||||
|
|
Loading…
Reference in New Issue
Block a user