Some checks failed
Build / ubuntu-latest (push) Failing after 5s
Build / Android (push) Failing after 2s
Build / Code coverage (push) Failing after 2s
Lint / format (push) Failing after 3s
Lint / clippy (push) Failing after 3s
Build / macOS-latest (push) Has been cancelled
Build / windows-latest (push) Has been cancelled
79 lines
2.2 KiB
Bash
Executable File
79 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# exit on fail
|
|
set -e
|
|
|
|
# get script path
|
|
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
|
pushd $SCRIPTPATH
|
|
|
|
# port used for testing instance
|
|
PORT=5667
|
|
|
|
# if server already running on port 5667, don't start again
|
|
if [ "$(lsof -i:$PORT -sTCP:LISTEN -t)" ]; then
|
|
echo "ActivityWatch server already running on port $PORT, using that."
|
|
else
|
|
# Set up an isolated ActivityWatch instance
|
|
./test-server.sh $PORT &
|
|
SERVER_PID=$!
|
|
fi
|
|
|
|
|
|
sleep 1;
|
|
SYNCROOTDIR="$HOME/ActivityWatchSync"
|
|
|
|
|
|
function sync_host() {
|
|
host=$1
|
|
SYNCDIR="$SYNCROOTDIR/$host"
|
|
dbs=$(find $SYNCDIR -name "*.db")
|
|
for db in $dbs; do
|
|
# workaround to avoid trying to sync empty database files (size 45056)
|
|
if [ "$(stat -c%s $db)" -lt 50000 ]; then
|
|
continue
|
|
fi
|
|
|
|
AWSYNC_ARGS="--port $PORT"
|
|
AWSYNC_ARGS_ADV="--sync-dir $SYNCDIR --sync-db $db"
|
|
BUCKETS="aw-watcher-window_$host,aw-watcher-afk_$host"
|
|
|
|
echo "Syncing $db to $host"
|
|
cargo run --bin aw-sync -- $AWSYNC_ARGS sync-advanced $AWSYNC_ARGS_ADV --mode pull --buckets $BUCKETS
|
|
# TODO: If there are no buckets from the expected host, emit a warning at the end.
|
|
# (push-script should not have created them to begin with)
|
|
done
|
|
}
|
|
|
|
host=$1
|
|
|
|
# if no host given, sync all, otherwise sync only the given host
|
|
if [ -z "$host" ]; then
|
|
echo "Syncing all hosts"
|
|
sleep 0.5
|
|
# For each host in the sync directory, pull the data from each database file using aw-sync
|
|
# Use `find` to get all directories in the sync directory
|
|
hostnames=$(find $SYNCROOTDIR -maxdepth 1 -type d -exec basename {} \;)
|
|
# filter out "erb-m2.local"
|
|
hostnames=$(echo $hostnames | tr ' ' '\n' | grep -v "erb-m2.local")
|
|
# filter out folder not containing subfolders with .db files
|
|
for host in $hostnames; do
|
|
if [ ! "$(find $SYNCROOTDIR/$host -name "*.db")" ]; then
|
|
hostnames=$(echo $hostnames | tr ' ' '\n' | grep -v $host)
|
|
fi
|
|
done
|
|
# Sync each host, file-by-file
|
|
for host in $hostnames; do
|
|
sync_host $host
|
|
done
|
|
else
|
|
echo "Syncing host $1"
|
|
sleep 0.5
|
|
sync_host $host
|
|
fi
|
|
|
|
# kill aw-server-rust (if started by us)
|
|
if [ "$SERVER_PID" ]; then
|
|
kill $SERVER_PID
|
|
fi
|