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