170 lines
3.4 KiB
Bash
Executable File
170 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function init() {
|
|
echo -n "Loading Schema: "
|
|
SCHEMA="sql/schema.sql"
|
|
OUTPUT="$(psql $DB < $SCHEMA 2>&1)"
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error" >&2
|
|
echo $OUTPUT >&2
|
|
exit 1
|
|
fi
|
|
echo "Done"
|
|
|
|
if [[ -f "$FILE" ]]; then
|
|
echo -n "Importing Data: "
|
|
OUTPUT="$(psql $DB < $FILE 2>&1)"
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error"
|
|
echo $OUTPUT
|
|
exit 1
|
|
fi
|
|
echo "Done"
|
|
fi
|
|
|
|
# Execute extra sql files
|
|
echo -n "Adding support functions: "
|
|
OUTPUT="$(psql $DB < "sql/factbase.sql" 2>&1)"
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error"
|
|
echo $OUTPUT
|
|
exit 1
|
|
fi
|
|
echo "Done"
|
|
|
|
echo "Database Initialization Complete."
|
|
}
|
|
|
|
function update() {
|
|
if [[ -z "$FILE" ]]; then
|
|
echo "-i is required for the update action."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$FILE" ]]; then
|
|
echo "$FILE must exist."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$DB" ]]; then
|
|
echo "-d is required for the update action."
|
|
exit 1
|
|
fi
|
|
|
|
echo -n "Running SQL script $FILE: "
|
|
OUTPUT="$(psql $DB < $FILE 2>&1)"
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error" >&2
|
|
echo $OUTPUT >&2
|
|
exit 1
|
|
fi
|
|
echo "Complete"
|
|
}
|
|
|
|
function drop() {
|
|
if [[ -z "$DB" ]]; then
|
|
echo "-d is required for the drop action." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo -n "Dropping $DB: "
|
|
OUTPUT="$(dropdb $DB 2>&1)"
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error"
|
|
echo $OUTPUT
|
|
exit 1
|
|
fi
|
|
echo "Dropped"
|
|
}
|
|
|
|
function test() {
|
|
echo "Test!"
|
|
echo "File: $FILE"
|
|
echo "Database: $DB"
|
|
echo "Action: $ACTION"
|
|
}
|
|
|
|
function usage() {
|
|
echo "usage: db_manage [OPTIONS]" >&2
|
|
echo "A script to help manage the attack graph generation database" >&2
|
|
echo "" >&2
|
|
echo " -a, --action Action to perform on the database" >&2
|
|
echo " Defaults to \"init\"" >&2
|
|
echo " -d, --database The database to manage" >&2
|
|
echo " Defaults to \"ag_gen\"" >&2
|
|
echo " -f, --force Forces a database to be overwritten" >&2
|
|
echo " -h, --help Displays this help message" >&2
|
|
echo " -i, --import SQL data to import to the database" >&2
|
|
echo " -s, --schema Schema file to initialize database with" >&2
|
|
echo " Defaults to \"sql/schema.sql\"" >&2
|
|
echo "" >&2
|
|
}
|
|
|
|
if [[ -z "$1" ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
while true; do
|
|
case "$1" in
|
|
-i | --import)
|
|
# Include SQL file
|
|
FILE="$2"
|
|
shift 2
|
|
;;
|
|
-d | --database)
|
|
# Use this database
|
|
DB="$2"
|
|
shift 2
|
|
;;
|
|
-a | --action)
|
|
ACTION=$2
|
|
shift 2
|
|
;;
|
|
-s | --schema)
|
|
SCHEMA="$2"
|
|
shift 2
|
|
;;
|
|
-f | --force)
|
|
FORCE=true
|
|
shift
|
|
;;
|
|
-h | --help)
|
|
# Display help
|
|
usage
|
|
exit 0
|
|
;;
|
|
--)
|
|
# End of options
|
|
shift
|
|
break
|
|
;;
|
|
-*)
|
|
echo "Unknown option: $1" >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ -z "$ACTION" ]]; then
|
|
ACTION="init"
|
|
fi
|
|
$ACTION # Call the action as a function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|