More backup script revamp.
[clinton/scripts.git] / s3.common
diff --git a/s3.common b/s3.common
new file mode 100644 (file)
index 0000000..51d3637
--- /dev/null
+++ b/s3.common
@@ -0,0 +1,63 @@
+# Common functions for dealing with Amazon S3.
+
+# units for BWLIMIT are KB/s
+BWLIMIT=325
+# units for CHUNKSIZE are MB
+CHUNKSIZE=5000
+
+BUCKET=hcoop.net-backups
+BACKUPDIR=full
+SUBDIR=$(date +%Y.%m.%d)
+S3CMD=$(dirname $0)/s3
+
+IFS=$'\n'
+
+export S3_ACCESS_KEY_ID=$(cat ~mwolson_admin/.amazon/access.key)
+export S3_SECRET_ACCESS_KEY=~mwolson_admin/.amazon/secret.key
+
+function s3_cmd () {
+    # $1: command (get|put|ls|rm)
+    # $2: remote file
+    # $3: local file
+    local cmd=$1
+    shift
+    local bwarg
+    if test "$cmd" = "put"; then
+        bwarg="${BWLIMIT}K";
+    else
+        bwarg=
+    fi
+    $S3CMD $cmd $BUCKET "$1" "$2" $bwarg
+}
+
+function move_over () {
+    # Move file to its offsite destination
+    # $1: file, $2: relative directory (optional)
+    if test -z "$1" || test -n "$3"; then
+        echo "Bad programming"
+        exit 1
+    fi
+    local FILE=$1
+    local DEST=$BACKUPDIR/$SUBDIR
+    if test -n "$2"; then
+        DEST=$DEST/$2
+    fi
+    split -d -b ${CHUNKSIZE}m $FILE ${FILE}.
+    for i in ${FILE}.*; do
+        s3_cmd put $DEST/$i $i
+        rm -f $i
+    done
+    rm -f $FILE
+}
+
+
+function prune_old_backups () {
+    # Implement me
+    local oldpwd=$PWD
+    cd $BACKUPDIR
+    find . -mindepth 1 -maxdepth 1 -type d -ctime +7 \
+        -execdir rm -fr '{}' \; || true
+    rm -rf $SUBDIR
+    mkdir -p $SUBDIR
+    cd $oldpwd
+}