diff --git a/Cargo.lock b/Cargo.lock index eee2342..1a075b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,6 @@ dependencies = [ "rocket_contrib", "serde", "serde_json", - "serde_repr", "uuid", ] @@ -750,17 +749,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_repr" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd02c7587ec314570041b2754829f84d873ced14a96d1fd1823531e11db40573" -dependencies = [ - "proc-macro2 1.0.9", - "quote 1.0.3", - "syn 1.0.17", -] - [[package]] name = "slab" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index 9ad4314..ca12e83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,6 @@ rocket = "0.4.4" serde = {version = "1.0", features = ["derive"]} serde_json = "1.0" -serde_repr = "0.1" uuid = { version = "0.7", features = ["serde", "v4"] } diff --git a/Rocket.toml b/Rocket.toml index e69de29..2714df4 100644 --- a/Rocket.toml +++ b/Rocket.toml @@ -0,0 +1,2 @@ +[global.limits] +forms = 20000000000 \ No newline at end of file diff --git a/client.sh b/client.sh new file mode 100644 index 0000000..752369a --- /dev/null +++ b/client.sh @@ -0,0 +1,149 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i bash -p bash curl jq libaom ffmpeg-full + +set -euo pipefail +IFS=$'\n\t' + +base_url="$1" +version="0.2.0" + +while true; do + sleep 30 + set +e + upsteam_version=`curl -s "$base_url"/version` + retval=$? + set -e + if [ $retval -ne 0 ]; then + echo "Is the Job Server Down?" + continue + fi + if [[ $version != $upsteam_version ]]; then + echo "Wrong version: client version is $version, while job server requires $upstream_version" + break + fi + + set +e + job=`curl -s "$base_url"/request_job | jq` + retval=$? + set -e + if [[ $job = "null" ]] || [ $retval -ne 0 ]; then + echo "No Jobs Available ¯\_(ツ)_/¯" + continue + fi + + echo "Got new job!" + echo "$job" | jq + + job_id=`echo "$job" | jq -r .id` + + echo "Reserving Job" + set +e + curl -s "$base_url"/edit_status/"$job_id"/reserved + retval=$? + set -e + if [ $retval -ne 0 ]; then + echo "Is the Job Server Down?" + continue + fi + echo "Reserved!" + + source=`echo $job | jq -r .description.file_url` + sourceext=${source##*.} + echo "Downloading source file: $source" + + source=`echo $job | jq -r .description.file_url` + + name=`echo $job | jq -r .description.file_name` + input="$name.$job_id.$sourceext" + + set +e + curl "$source" -o "$input" + retval=$? + set -e + if [ $retval -ne 0 ]; then + echo "Could not Download file!" + curl -s -L "$base_url"/edit_status/"$job_id"/error || true + continue + fi + + echo "" + + echo "Starting Encode" + + height=`echo $job | jq -r .description.resolution[0]` + width=`echo $job | jq -r .description.resolution[1]` + + echo $job | jq + + aomenco=`echo $job | jq -r .description.options.aomenc` + aomenco=${aomenco//[^a-zA-Z0-9_\- =]/} + ffmpego=`echo $job | jq -r .description.options.ffmpeg` + ffmpego=${ffmpego//[^a-zA-Z0-9_\- =:]/} + + two_pass=`echo $job | jq -r .description.options.two_pass` + + if [[ $two_pass = true ]]; then + set +e + eval 'ffmpeg -nostats -hide_banner -loglevel warning \ + -i "'$input'" '$ffmpego' -vf scale='$height':'$width' -pix_fmt yuv422p -f yuv4mpegpipe - | aomenc - --i422 '$aomenco' \ + --pass=1 --passes=2 --fpf="'$input'.fpf" --webm -o "'$input'.out.webm"' + + retval=$? + if [ $retval -ne 0 ]; then + echo "Error running encode pass 1" + curl -s -L "$base_url"/edit_status/"$job_id"/error || true + echo "" + continue + fi + + eval 'ffmpeg -nostats -hide_banner -loglevel warning \ + -i "'$input'" '$ffmpego' -vf scale='$height':'$width' -pix_fmt yuv422p -f yuv4mpegpipe - | aomenc - --i422 '$aomenco' \ + --pass=2 --passes=2 --fpf="'$input'.fpf" --webm -o "'$input'.out.webm"' + + retval=$? + if [ $retval -ne 0 ]; then + echo "Error running encode pass 2" + curl -s -L "$base_url"/edit_status/"$job_id"/error || true + echo "" + continue + fi + set -e + + else + set +e + eval 'ffmpeg -nostats -hide_banner -loglevel warning \ + -i "'$input'" '$ffmpego' -vf scale='$height':'$width' -pix_fmt yuv422p -f yuv4mpegpipe - | aomenc - --i422 '$aomenco' \ + --passes=1 --fpf="'$input'.fpf" --webm -o "'$input'.out.webm"' + + retval=$? + if [ $retval -ne 0 ]; then + echo "Error running encode" + curl -s -L "$base_url"/edit_status/"$job_id"/error || true + echo "" + continue + fi + set -e + fi + + set +e + curl -s -L "$base_url"/edit_status/"$job_id"/completed + set -e + + + echo "Uploading file!" + + set +e + curl --data-binary @"$input".out.webm "$base_url"/upload/"$job_id" + set -e + retval=$? + echo "" + if [ $retval -ne 0 ]; then + echo "Couldn't upload file!" + continue + else + echo "Upload finished, deleting result!" + rm "$input".out.webm + fi + + +done \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index b48578a..cba0177 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,19 +8,18 @@ use rocket::Data; use rocket_contrib::json::Json; use serde_json::Value; use serde_json::json; -use serde::{Serialize, Deserialize}; use rocket_contrib::uuid::Uuid; use rocket_contrib::serve::StaticFiles; use std::sync::Mutex; use std::collections::HashMap; -use std::net::SocketAddr; +use std::path::Path; mod workunit; use workunit::WUnit; use workunit::EStatus; -const VERSION: &str = "0.2.0"; +const VERSION: &str = "0.3.0"; #[derive(Default, Debug)] struct SharedState { @@ -106,9 +105,17 @@ fn edit_status(id: Uuid, status: String, shared: State, remote_addr -#[post("/", data = "