cleanup
[infrastructure.git] / scripts / dump-db-svn.sh
1 #!/bin/bash
2
3 # we're getting called by cron, so just in case
4 PATH=/bin:/usr/bin:$PATH
5
6 COMMAND=$(basename $0)
7 COMMANDDIR=$(dirname $0)
8 COMMANDDIR=$(cd $COMMANDDIR; pwd -P)
9 DATADIR=/backups
10 DATE=$(date +%y-%m-%d-%H-%M-%S)
11
12 LOGDIR=$DATADIR/aa-dumplog
13 LOG=$LOGDIR/${DATE}.log
14 LATESTLOG=latest.log
15
16 REVISION="$Revision$"
17
18 ### create a symlink in same dir
19 # arguments 
20 # actual : full path of the actual file
21 # link : the link name, only basename is used, will be created in same dir
22 function manage_link () {
23     actual=$1; shift
24     latest=$1; shift
25     # go in the right directory
26     cd $(dirname $actual)
27     actualbase=$(basename $actual)
28     # just in case 
29     latest=$(basename $latest)
30     echo "In $(pwd) : linking $actualbase to $latest"
31     rm -f $latest ; ln -s $actualbase $latest
32     # go back to current dir
33     cd -
34 }
35     
36 # usage
37 # clean <where> <keeptime> [... find arguments]
38 function clean () {
39     where=$1; shift
40     keeptime=$1; shift
41     echo "== In $where"
42     echo "Cleaning $@ - older than $keeptime days"
43     find $where "$@" -atime +$keeptime | xargs rm 
44 }
45
46 ###
47
48 case $(hostname) in
49   *build*|*kruder*|*blitz*)
50     DEFAULTS="subversion" ;;
51   *plc*|*private*)
52     DEFAULTS="planetlab4" ;;
53   *)
54     echo "$COMMAND: WARNING: no known defaults for hostname $(hostname)"
55     DEFAULTS=""
56     ;;
57 esac
58
59 DB_KEEPTIME=14
60 DB_USER=pgsqluser
61
62 SUBVERSION_KEEPTIME=7
63 SUBVERSION_REPO=/svn
64
65 function usage () {
66     echo "This is $COMMAND, $REVISION"
67     echo "Usage: $COMMAND [subversion]"
68     echo -e "\tkeyword 'subversion' : $SUBVERSION_REPO/ is dumped"
69 #    echo -e "\tkeyword 'apache' : $APACHE_ROOT/ is tared"
70 #    echo -e "\tkeyword 'env' : $ENV_ROOT/ is tared"
71 #    echo -e "\totherwise performs a dump of the given database"
72     echo -e "default arguments are $DEFAULTS"
73     exit 1
74 }
75
76 function dumpdb () {
77     database=$1; shift
78     output=$DATADIR/$database-$DATE.sql
79     latest=$database-latest.sql
80     echo "Dumping $database into $output (drop-mode)"
81     pg_dump --user=$DB_USER $database > $output
82     manage_link $output $latest
83 }
84
85 function dumpsubversion () {
86     output=$DATADIR/subversion-$DATE.svndump
87     latest=subversion-latest.svndump
88     echo "Creating subversion archive in $output"
89     svnadmin dump $SUBVERSION_REPO/ > $output
90     manage_link $output $latest
91 }
92
93 function dumpregulardir () {
94     name=$1; shift
95     dumpdir=$1; shift
96     output=$DATADIR/$name-$DATE.tar
97     latest=$name-latest.tar
98     echo "Creating tar archive of $dumpdir into $output"
99     tar cf $output $dumpdir
100     manage_link $output $latest
101 }
102
103 function main () {
104
105     # give one or more target names on the command-line
106     args=""
107     if [[ -z "$@" ]] ; then
108         args="$DEFAULTS"
109     else
110         args="$@"
111     fi
112
113     [ -n "$DEBUG" ] && set -x
114     
115     for arg in $args; do
116         case "$arg" in
117             -*)
118                 usage ;;
119             subversion)
120                 dumpsubversion 
121                 clean $DATADIR $SUBVERSION_KEEPTIME -name "$arg\*"
122                 ;;
123 #           apache)
124 #               dumpregulardir $arg $APACHE_ROOT
125 #               clean $DATADIR $APACHE_KEEPTIME -name "$arg\*"
126 #               ;;
127 #           env)
128 #               dumpregulardir $arg $ENV_ROOT
129 #               clean $DATADIR $ENV_KEEPTIME -name "$arg\*"
130 #               ;;
131             *)
132                 dumpdb $arg 
133                 clean $DATADIR $DB_KEEPTIME -name "$arg\*"
134                 ;;
135             esac
136     done
137
138     clean $LOGDIR 14 
139
140     manage_link $LOG $LATESTLOG
141 }
142
143 ##############################
144 # create log area 
145 mkdir -p $LOGDIR
146 chmod g+w $LOGDIR
147
148 for i in "$@" ; do
149   case "$i" in
150     -*)
151       usage ;;
152   esac
153 done
154
155 main "$@" > $LOG 2>&1