/[BackupPC]/upstream/2.1.0/lib/BackupPC/CGI/Archive.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /upstream/2.1.0/lib/BackupPC/CGI/Archive.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations)
Wed Jun 22 19:12:04 2005 UTC (18 years, 10 months ago) by dpavlin
File size: 9116 byte(s)
import of version 2.1.0

1 #============================================================= -*-perl-*-
2 #
3 # BackupPC::CGI::Archive package
4 #
5 # DESCRIPTION
6 #
7 # This module implements the Archive action for the CGI interface.
8 #
9 # AUTHOR
10 # Craig Barratt <cbarratt@users.sourceforge.net>
11 #
12 # COPYRIGHT
13 # Copyright (C) 2003 Craig Barratt
14 #
15 # This program is free software; you can redistribute it and/or modify
16 # it under the terms of the GNU General Public License as published by
17 # the Free Software Foundation; either version 2 of the License, or
18 # (at your option) any later version.
19 #
20 # This program is distributed in the hope that it will be useful,
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 # GNU General Public License for more details.
24 #
25 # You should have received a copy of the GNU General Public License
26 # along with this program; if not, write to the Free Software
27 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #
29 #========================================================================
30 #
31 # Version 2.1.0, released 20 Jun 2004.
32 #
33 # See http://backuppc.sourceforge.net.
34 #
35 #========================================================================
36
37 package BackupPC::CGI::Archive;
38
39 use strict;
40 use BackupPC::CGI::Lib qw(:all);
41 use Data::Dumper;
42
43 sub action
44 {
45 my $archHost = $In{host};
46 my $Privileged = CheckPermission();
47
48 if ( !$Privileged ) {
49 ErrorExit($Lang->{Only_privileged_users_can_archive} );
50 }
51 if ( $In{type} == 0 ) {
52 my($fullTot, $fullSizeTot, $incrTot, $incrSizeTot, $str,
53 $strNone, $strGood, $hostCntGood, $hostCntNone, $checkBoxCnt,
54 $backupnumber);
55
56 $hostCntGood = $hostCntNone = $checkBoxCnt = $fullSizeTot = 0;
57 GetStatusInfo("hosts");
58
59 foreach my $host ( sort(keys(%Status)) ) {
60 my($fullDur, $incrCnt, $fullSize, $fullRate);
61 my @Backups = $bpc->BackupInfoRead($host);
62 my $fullCnt = $incrCnt = 0;
63 for ( my $i = 0 ; $i < @Backups ; $i++ ) {
64 if ( $Backups[$i]{type} eq "full" ) {
65 $fullSize = $Backups[$i]{size} / (1024 * 1024);
66 $incrSizeTot = 0;
67 } else {
68 $incrSizeTot = $Backups[$i]{size} / (1024 * 1024);
69 }
70 $backupnumber = $Backups[$i]{num};
71 }
72 $fullSizeTot += $fullSize + $incrSizeTot;
73 $fullSize = sprintf("%.2f", ($fullSize + $incrSizeTot) / 1000);
74 $str = <<EOF;
75 <tr>
76 <td class="border"><input type="hidden" name="backup$checkBoxCnt" value="$backupnumber"><input type="checkbox" name="fcb$checkBoxCnt" value="$host">&nbsp;${HostLink($host)} </td>
77 <td align="center" class="border"> ${UserLink($Hosts->{$host}{user})} </td>
78 <td align="center" class="border"> $fullSize </td>
79 EOF
80 $checkBoxCnt++;
81 if ( @Backups == 0 ) {
82 $hostCntNone++;
83 $strNone .= $str;
84 } else {
85 $hostCntGood++;
86 $strGood .= $str;
87 }
88 }
89 $fullSizeTot = sprintf("%.2f", $fullSizeTot / 1000);
90 my $now = timeStamp2(time);
91 my $checkAllHosts = $Lang->{checkAllHosts};
92 $strGood .= <<EOF;
93 <input type="hidden" name="archivehost" value="$In{'archivehost'}">
94 EOF
95 my $content = eval("qq{$Lang->{BackupPC_Archive}}");
96 Header(eval("qq{$Lang->{BackupPC__Archive}}"), $content, 1);
97 Trailer();
98 } else {
99 my(@HostList, @BackupList, $HostListStr, $hiddenStr, $pathHdr,
100 $badFileCnt, $reply, $str);
101
102 #
103 # Pick up the archive host's config file
104 #
105 $bpc->ConfigRead($archHost);
106 %Conf = $bpc->Conf();
107
108 my $args = {
109 SplitPath => $Conf{SplitPath},
110 ParPath => $Conf{ParPath},
111 CatPath => $Conf{CatPath},
112 GzipPath => $Conf{GzipPath},
113 Bzip2Path => $Conf{Bzip2Path},
114 ArchiveDest => $Conf{ArchiveDest},
115 ArchiveComp => $Conf{ArchiveComp},
116 ArchivePar => $Conf{ArchivePar},
117 ArchiveSplit => $Conf{ArchiveSplit},
118 topDir => $bpc->{TopDir},
119 };
120
121 ServerConnect();
122
123 for ( my $i = 0 ; $i < $In{fcbMax} ; $i++ ) {
124 next if ( !defined($In{"fcb$i"}) );
125 my $name = $In{"fcb$i"};
126 my $backupno = $In{"backup$i"};
127 push(@HostList, $name);
128 push(@BackupList, $backupno);
129 $hiddenStr .= <<EOF;
130 <input type="hidden" name="fcb$i" value="$In{'fcb' . $i}">
131 <input type="hidden" name="backup$i" value="$In{'backup' . $i}">
132 EOF
133 $HostListStr .= <<EOF;
134 <li> ${EscHTML($name)}
135 EOF
136 }
137 $hiddenStr .= <<EOF;
138 <input type="hidden" name="archivehost" value="$In{'archivehost'}">
139 EOF
140 $hiddenStr .= "<input type=\"hidden\" name=\"fcbMax\" value=\"$In{fcbMax}\">\n";
141 if ( @HostList == 0 ) {
142 ErrorExit($Lang->{You_haven_t_selected_any_hosts});
143 }
144 my ($ArchiveDest, $ArchiveCompNone, $ArchiveCompGzip,
145 $ArchiveCompBzip2, $ArchivePar, $ArchiveSplit);
146 $ArchiveDest = $Conf{ArchiveDest};
147 if ( $Conf{ArchiveComp} eq "none" ) {
148 $ArchiveCompNone = "checked";
149 } else {
150 $ArchiveCompNone = "";
151 }
152 if ( $Conf{ArchiveComp} eq "gzip" ) {
153 $ArchiveCompGzip = "checked";
154 } else {
155 $ArchiveCompGzip = "";
156 }
157 if ( $Conf{ArchiveComp} eq "bzip2" ) {
158 $ArchiveCompBzip2 = "checked";
159 } else {
160 $ArchiveCompBzip2 = "";
161 }
162 $ArchivePar = $Conf{ArchivePar};
163 $ArchiveSplit = $Conf{ArchiveSplit};
164
165 if ( $In{type} == 1 ) {
166 #
167 # Tell the user what options they have
168 #
169 my $paramStr = "";
170 if ( $Conf{ArchiveClientCmd} =~ /\$archiveloc\b/ ) {
171 $paramStr .= eval("qq{$Lang->{BackupPC_Archive2_location}}");
172 }
173 if ( $Conf{ArchiveClientCmd} =~ /\$compression\b/ ) {
174 $paramStr .= eval("qq{$Lang->{BackupPC_Archive2_compression}}");
175 }
176 if ( $Conf{ArchiveClientCmd} =~ /\$parfile\b/
177 && -x $Conf{ParPath} ) {
178 $paramStr .= eval("qq{$Lang->{BackupPC_Archive2_parity}}");
179 }
180 if ( $Conf{ArchiveClientCmd} =~ /\$splitsize\b/
181 && -x $Conf{SplitPath} ) {
182 $paramStr .= eval("qq{$Lang->{BackupPC_Archive2_split}}");
183 }
184 my $content = eval("qq{$Lang->{BackupPC_Archive2}}");
185 Header(eval("qq{$Lang->{BackupPC__Archive}}"), $content, 1);
186 Trailer();
187 } elsif ( $In{type} == 2 ) {
188 my $reqFileName;
189 my $archivehost = $1 if ( $In{archivehost} =~ /(.+)/ );
190 for ( my $i = 0 ; ; $i++ ) {
191 $reqFileName = "archiveReq.$$.$i";
192 last if ( !-f "$TopDir/pc/$archivehost/$reqFileName" );
193 }
194 my($compname, $compext);
195 if ( $In{compression} == 2 ) { # bzip2 compression
196 $compname = $Conf{Bzip2Path};
197 $compext = '.bz2';
198 } elsif ( $In{compression} == 1 ) { # gzip compression
199 $compname = $Conf{GzipPath};
200 $compext = '.gz';
201 } else { # No Compression
202 $compname = $Conf{CatPath};
203 $compext = '.raw';
204 }
205 my $fullsplitsize = $In{splitsize} . '000000';
206 my %ArchiveReq = (
207 # parameters for the archive
208 archiveloc => $In{archive_device},
209 archtype => $In{archive_type},
210 compression => $compname,
211 compext => $compext,
212 parfile => $In{par},
213 splitsize => $fullsplitsize,
214 host => $archivehost,
215
216 # list of hosts to restore
217 HostList => \@HostList,
218 BackupList => \@BackupList,
219
220 # other info
221 user => $User,
222 reqTime => time,
223 );
224 my($archive) = Data::Dumper->new(
225 [ \%ArchiveReq],
226 [qw(*ArchiveReq)]);
227 $archive->Indent(1);
228 if ( open(REQ, ">$TopDir/pc/$archivehost/$reqFileName") ) {
229 binmode(REQ);
230 print(REQ $archive->Dump);
231 close(REQ);
232 } else {
233 ErrorExit($Lang->{Can_t_open_create} );
234 }
235 $reply = $bpc->ServerMesg("archive $User $archivehost $reqFileName");
236 $str = eval("qq{$Lang->{Archive_requested}}");
237
238 my $content = eval("qq{$Lang->{BackupPC_Archive_Reply_from_server}}");
239 Header(eval("qq{$Lang->{BackupPC__Archive}}"), $content, 1);
240 Trailer();
241 }
242 }
243 }
244
245 1;

  ViewVC Help
Powered by ViewVC 1.1.26