Files
HomeAudit/migration_scripts/discovery/run_targeted_discovery.sh
2025-08-24 11:13:39 -04:00

149 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
#
# Targeted Discovery Runner
# Executes specific discovery scripts on devices with partial data
#
set -euo pipefail
SCRIPT_DIR="$(dirname "$0")"
# Device configurations
declare -A PARTIAL_DEVICES
PARTIAL_DEVICES["fedora"]="localhost"
PARTIAL_DEVICES["lenovo420"]="100.98.144.95"
PARTIAL_DEVICES["lenovo"]="192.168.50.181"
PARTIAL_DEVICES["surface"]="100.67.40.97"
declare -A DEVICE_USERS
DEVICE_USERS["fedora"]="jonathan"
DEVICE_USERS["lenovo420"]="jon"
DEVICE_USERS["lenovo"]="jonathan"
DEVICE_USERS["surface"]="jon"
# Targeted scripts to run
SCRIPTS=(
"targeted_security_discovery.sh"
"targeted_data_discovery.sh"
"targeted_performance_discovery.sh"
)
echo "=== Targeted Discovery Runner ==="
echo "Running missing discovery categories on partial devices"
echo "Devices: ${!PARTIAL_DEVICES[@]}"
echo "Scripts: ${SCRIPTS[@]}"
echo "======================================="
run_script_on_device() {
local device=$1
local host=${PARTIAL_DEVICES[$device]}
local user=${DEVICE_USERS[$device]}
local script=$2
echo "[$device] Running $script"
if [ "$host" = "localhost" ]; then
# Local execution
chmod +x "$SCRIPT_DIR/$script"
sudo "$SCRIPT_DIR/$script"
else
# Remote execution
scp "$SCRIPT_DIR/$script" "$user@$host:/tmp/"
ssh "$user@$host" "chmod +x /tmp/$script && sudo /tmp/$script"
fi
echo "[$device] $script completed"
}
collect_results() {
local device=$1
local host=${PARTIAL_DEVICES[$device]}
local user=${DEVICE_USERS[$device]}
local results_dir="/home/jonathan/Coding/HomeAudit/targeted_discovery_results"
mkdir -p "$results_dir"
echo "[$device] Collecting results..."
if [ "$host" = "localhost" ]; then
# Local collection
find /tmp -name "*_discovery_*_*" -type d -newer "$SCRIPT_DIR/$0" -exec cp -r {} "$results_dir/" \;
else
# Remote collection
ssh "$user@$host" "find /tmp -name '*_discovery_*' -type d -newer /tmp/targeted_*_discovery.sh -exec tar -czf {}.tar.gz {} \;" 2>/dev/null || true
scp "$user@$host:/tmp/*_discovery_*.tar.gz" "$results_dir/" 2>/dev/null || echo "[$device] No results to collect"
fi
}
main() {
local target_device=""
local target_script=""
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
--device)
target_device="$2"
shift 2
;;
--script)
target_script="$2"
shift 2
;;
--help)
echo "Usage: $0 [--device DEVICE] [--script SCRIPT]"
echo "Devices: ${!PARTIAL_DEVICES[@]}"
echo "Scripts: ${SCRIPTS[@]}"
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Run on specific device or all devices
if [ -n "$target_device" ]; then
if [[ ! " ${!PARTIAL_DEVICES[@]} " =~ " ${target_device} " ]]; then
echo "Error: Unknown device '$target_device'"
exit 1
fi
devices=("$target_device")
else
devices=("${!PARTIAL_DEVICES[@]}")
fi
# Run specific script or all scripts
if [ -n "$target_script" ]; then
if [[ ! " ${SCRIPTS[@]} " =~ " ${target_script} " ]]; then
echo "Error: Unknown script '$target_script'"
exit 1
fi
scripts=("$target_script")
else
scripts=("${SCRIPTS[@]}")
fi
# Execute targeted discovery
for device in "${devices[@]}"; do
echo "Starting targeted discovery on $device"
for script in "${scripts[@]}"; do
if ! run_script_on_device "$device" "$script"; then
echo "Warning: $script failed on $device, continuing..."
fi
sleep 2 # Brief pause between scripts
done
collect_results "$device"
echo "$device completed"
echo "---"
done
echo "=== Targeted Discovery Complete ==="
echo "Results available in: /home/jonathan/Coding/HomeAudit/targeted_discovery_results/"
ls -la /home/jonathan/Coding/HomeAudit/targeted_discovery_results/ 2>/dev/null || echo "No results directory created yet"
}
main "$@"