#!/usr/bin/perl
# Back up EPD files. Steps are:
# - grep printed and not backed up EPD files from db.
# - iterate over result; rar file using tmp/ dir in spool.
# - put archive into spool.
# - goto step 2 if there are more files.
use dbops;
use conv;
use strict;
use log;
# SIGINT catcher
$SIG{INT} = \&sigint;
sub sigint()
{
log::stdout("caught interrupt signal (exiting).\n");
exit(1);
}
our $SPOOL_EPDZ_DIR = "/usr/backup/epd/zayavki";
our $SPOOL_EPDP_DIR = "/usr/backup/epd/proba";
our @ID;
our $ID_ref;
our @paths;
our $paths_ref;
our $i;
dbops::connect();
dbops::select();
# EPD zayavki
($ID_ref, $paths_ref) = dbops::fetch($dbops::EPD_ZAYAVKA_T);
@ID = @$ID_ref;
@paths = @$paths_ref;
log::stdout("[working on epd-zayavki] ($#ID elements)\n");
for ($i = 0; $i < $#paths; $i++)
{
# db::fetch() gives us converted pathnames
if (! -e $paths[$i])
{
log::err("$paths[$i] doesn't exist");
log::put("item with ID=$ID[$i] is broken (not found). FIXING");
# XXX here we mark file as backed up even it doesn't exist.
dbops::fixate($ID[$i]);
next;
# NOTREACHED
}
log::stdout("compressing $paths[$i] into spool..\n");
system("/usr/local/bin/rar a -rr10% -ep '$SPOOL_EPDZ_DIR/".conv::basename($paths[$i]).".rar'"." \"$paths[$i]\"");
if( ($? >> 8) == 0)
{
# 0 exit status
log::stdout(" $paths[$i] compressed\n");
log::put("created archive $paths[$i].rar");
# XXX additional check, maybe unneeded?
if (-e "$SPOOL_EPDZ_DIR/".conv::basename($paths[$i]).".rar")
{
# modify DB
dbops::markok($ID[$i]);
log::put("ID=$ID[$i] marked as backed up");
}
else
{
# something strange
# do not modify db
log::err("$SPOOL_EPDZ_DIR/".conv::basename($paths[$i]).".rar can't stat after compressing");
}
}
else
{
# error
log::stdout(" $paths[$i] compression failed!\n");
}
} # epd-zayavki
# probas
($ID_ref, $paths_ref) = dbops::fetch($dbops::EPD_PROBA_T);
@ID = @$ID_ref;
@paths = @$paths_ref;
log::stdout("[working on epd-probas] ($#ID elements)\n");
for ($i = 0; $i < $#paths; $i++)
{
# db::fetch() gives us converted pathnames
if (! -e $paths[$i])
{
log::err("$paths[$i] doesn't exist");
log::put("item with ID=$ID[$i] is broken (not found). FIXING");
# XXX here we mark file as backed up even it doesn't exist.
dbops::fixate($ID[$i]);
next;
# NOTREACHED
}
log::stdout("compressing $paths[$i] into spool..\n");
system("/usr/local/bin/rar a -rr10% -ep $SPOOL_EPDP_DIR/".conv::basename($paths[$i]).".rar"." $paths[$i]");
if( ($? >> 8) == 0)
{
# 0 exit status
log::stdout(" $paths[$i] compressed\n");
log::put("created archive $paths[$i].rar");
# XXX additional check, maybe unneeded?
if (-e "$SPOOL_EPDP_DIR/".conv::basename($paths[$i]).".rar")
{
# modify DB
dbops::markok($ID[$i]);
log::put("ID=$ID[$i] marked as backed up");
}
else
{
# something strange
# do not modify db
log::err("$SPOOL_EPDP_DIR/".conv::basename($paths[$i]).".rar can't stat after compressing");
}
}
else
{
# error
log::stdout(" $paths[$i] compression failed!\n");
}
} # epd-probas
dbops::disconnect();