Created a test setup that works
This commit is contained in:
parent
2c717e8e7e
commit
d9d6066626
5 changed files with 92 additions and 1 deletions
3
.iex.exs
3
.iex.exs
|
|
@ -22,4 +22,7 @@ alias Pinchflat.Metadata.MetadataFileHelpers
|
||||||
|
|
||||||
alias Pinchflat.SlowIndexing.FileFollowerServer
|
alias Pinchflat.SlowIndexing.FileFollowerServer
|
||||||
|
|
||||||
|
# TODO: remove
|
||||||
|
alias Pinchflat.KilledWorker
|
||||||
|
|
||||||
Pinchflat.Release.check_file_permissions()
|
Pinchflat.Release.check_file_permissions()
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ FROM ${DEV_IMAGE}
|
||||||
# Install debian packages
|
# Install debian packages
|
||||||
RUN apt-get update -qq
|
RUN apt-get update -qq
|
||||||
RUN apt-get install -y inotify-tools ffmpeg curl git openssh-client \
|
RUN apt-get install -y inotify-tools ffmpeg curl git openssh-client \
|
||||||
python3 python3-pip python3-setuptools python3-wheel python3-dev locales
|
python3 python3-pip python3-setuptools python3-wheel python3-dev locales procps
|
||||||
|
|
||||||
# Install nodejs
|
# Install nodejs
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
|
RUN curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
|
||||||
|
|
|
||||||
58
lib/pinchflat/killed_worker.ex
Normal file
58
lib/pinchflat/killed_worker.ex
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
defmodule Pinchflat.KilledWorker do
|
||||||
|
@moduledoc false
|
||||||
|
|
||||||
|
use Oban.Worker,
|
||||||
|
queue: :default
|
||||||
|
|
||||||
|
import Ecto.Query, warn: false
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
|
alias __MODULE__
|
||||||
|
alias Pinchflat.Repo
|
||||||
|
|
||||||
|
def kickoff(job_args \\ %{}, opts \\ []) do
|
||||||
|
job_args
|
||||||
|
|> KilledWorker.new(opts)
|
||||||
|
|> Repo.insert_unique_job()
|
||||||
|
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
def cancel do
|
||||||
|
Oban.Job
|
||||||
|
|> where(worker: "Pinchflat.KilledWorker")
|
||||||
|
|> Oban.cancel_all_jobs()
|
||||||
|
end
|
||||||
|
|
||||||
|
def start_stop do
|
||||||
|
kickoff()
|
||||||
|
Process.sleep(2000)
|
||||||
|
cancel()
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Oban.Worker
|
||||||
|
def perform(%Oban.Job{}) do
|
||||||
|
# case System.cmd("/app/wrapper.sh", ["/app/slow.sh"]) do
|
||||||
|
args = [
|
||||||
|
"/usr/local/bin/yt-dlp",
|
||||||
|
"https://www.youtube.com/@OverSimplified",
|
||||||
|
"--simulate",
|
||||||
|
"--print",
|
||||||
|
"%(title)s"
|
||||||
|
]
|
||||||
|
|
||||||
|
case System.cmd("/app/wrapper.sh", args) do
|
||||||
|
{output, 0} ->
|
||||||
|
Logger.warning("KilledWorker: #{output}")
|
||||||
|
{:ok, output}
|
||||||
|
|
||||||
|
{output, _} ->
|
||||||
|
Logger.error("KilledWorker: #{output}")
|
||||||
|
{:error, output}
|
||||||
|
end
|
||||||
|
|
||||||
|
Logger.warning("KilledWorker: done")
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
end
|
||||||
8
slow.sh
Executable file
8
slow.sh
Executable file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Runs for N seconds
|
||||||
|
for i in {1..15}; do
|
||||||
|
echo "Slow script running for $i seconds"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
echo "Slow script done"
|
||||||
22
wrapper.sh
Executable file
22
wrapper.sh
Executable file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Start the program in the background
|
||||||
|
exec "$@" &
|
||||||
|
pid1=$!
|
||||||
|
|
||||||
|
# Silence warnings from here on
|
||||||
|
exec >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Read from stdin in the background and
|
||||||
|
# kill running program when stdin closes
|
||||||
|
exec 0<&0 $(
|
||||||
|
while read; do :; done
|
||||||
|
kill -KILL $pid1
|
||||||
|
) &
|
||||||
|
pid2=$!
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
wait $pid1
|
||||||
|
ret=$?
|
||||||
|
kill -KILL $pid2
|
||||||
|
exit $ret
|
||||||
Loading…
Reference in a new issue