1 # Copyright (c) 2010-2012 Zmanda, Inc. All Rights Reserved.
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful, but
9 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 # You should have received a copy of the GNU General Public License along
14 # with this program; if not, write to the Free Software Foundation, Inc.,
15 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 # Contact information: Zmanda Inc., 465 S Mathlida Ave, Suite 300
18 # Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
21 package Amanda::Report::xml;
26 use base qw/Exporter/;
28 use Amanda::Constants;
30 our @EXPORT_OK = qw/make_amreport_xml/;
39 my ( $report, $org, $config_name ) = @_;
45 make_xml_elt( "org", $org ),
46 make_xml_elt( "config", $config_name ),
47 make_xml_elt( "date", time() ),
48 make_programs_xml( $report->{data}{programs} ),
50 make_dle_xml( $_->[0], $_->[1],
51 $report->get_dle_info( $_->[0], $_->[1] ) )
55 { version => $Amanda::Constants::VERSION }
59 ## xml printing functions
63 return "\n" . ( $indent x $depth );
68 my ( $tag, $val, $attribs ) = @_;
74 if ( defined $attribs ) {
77 ' ', map { $_ . '="' . $attribs->{$_} . '"' }
82 if ( ref $val eq "CODE" ) {
83 $text .= ">" . xml_nl() . $val->() . xml_nl() . "</$tag>";
85 $text .= ( defined $val ) ? ">$val</$tag>" : " />";
94 my ( $list, $item, @items ) = @_;
98 return join( xml_nl(), map { make_xml_elt( $item, $_ ); } @items );
103 ## Amanda::Report data elements
113 make_xml_elt("insize", $dumper->{orig_kb} * 1024),
114 make_xml_elt("outsize", $dumper->{kb} * 1024),
115 make_xml_elt("time", $dumper->{sec})
118 { "result" => $dumper->{status} }
130 make_xml_elt( "date", $chunker->{date} ),
131 make_xml_elt( "level", $chunker->{level} ),
132 make_xml_elt( "time", $chunker->{sec} ),
133 make_xml_elt( "bytes", $chunker->{kb} * 1024 ),
134 make_xml_elt( "bps", $chunker->{kps} * 1024 ),
137 { "result" => $chunker->{status} }
149 make_xml_elt( "date", $taper->{date} ),
150 make_xml_elt( "level", $taper->{level} ),
151 make_xml_elt( "time", $taper->{sec} ),
152 make_xml_elt( "bytes", $taper->{kb} * 1024 ),
153 make_xml_elt( "bps", $taper->{kps} * 1024 ),
154 map { make_part_xml($_) } @{ $taper->{parts} }
157 { result => $taper->{status} }
167 return join xml_nl(), map {
168 ($_ eq "dumper") ? make_dumper_xml($try->{$_})
169 : ($_ eq "chunker") ? make_chunker_xml($try->{$_})
170 : ($_ eq "taper") ? make_taper_xml($try->{$_})
177 sub make_estimate_xml
180 return (defined $estimate)
186 make_xml_elt("level", $estimate->{level}),
187 make_xml_elt("time", $estimate->{sec}),
188 make_xml_elt("nbytes", $estimate->{nkb} * 1024),
189 make_xml_elt("cbytes", $estimate->{ckb} * 1024),
190 make_xml_elt("bps", $estimate->{kps} * 1024)
203 return join( xml_nl(),
204 make_xml_elt( "label", $part->{label} ),
205 make_xml_elt( "date", $part->{date} ),
206 make_xml_elt( "file", $part->{file} ),
207 make_xml_elt( "time", $part->{sec} ),
208 make_xml_elt( "bytes", $part->{kb} * 1024 ),
209 make_xml_elt( "bps", $part->{kps} * 1024 ),
210 make_xml_elt( "partnum", $part->{partnum} )
218 my ($dle, $timestamp) = @_;
223 return join( xml_nl(),
224 make_xml_elt("date", $timestamp),
225 map { make_try_xml($_) } @{$dle->{'dumps'}->{$timestamp}});
232 my ( $hostname, $disk, $dle ) = @_;
236 return join( xml_nl(),
237 make_xml_elt( "hostname", $hostname ),
238 make_xml_elt( "disk", $disk ),
239 ( defined $dle->{estimate} && %{ $dle->{estimate} } > 0 )?
240 make_estimate_xml( $dle->{estimate} )
242 ( keys %{$dle->{'dumps'}} > 0 ) ?
243 map { make_dump_xml($dle, $_) } keys %{$dle->{'dumps'}}
245 exists $dle->{parts} ?
246 map { make_part_xml($_) } @{ $dle->{parts} }
255 my ( $program_name, $program, $content ) = @_;
262 ( exists $program->{notes} )
263 ? make_list_xml( "notes", "note", @{ $program->{notes} } )
265 ( exists $program->{stranges} )
266 ? make_list_xml( "stranges", "strange",
267 @{ $program->{stranges} } )
269 ( exists $program->{errors} )
270 ? make_list_xml( "errors", "error", @{ $program->{errors} } )
280 return make_program_xml(
283 return join( xml_nl(),
284 make_xml_elt( "time", $planner->{time} ),
285 make_xml_elt( "start", $planner->{start} ),
286 make_xml_elt( "start_time", $planner->{start_time} ) );
294 return make_program_xml(
297 return join( xml_nl(),
298 make_xml_elt( "time", $driver->{time} ),
299 make_xml_elt( "start", $driver->{start} ) );
304 sub make_dumper_program_xml
307 return make_program_xml( "dumper", $dumper, sub { return ""; } );
310 sub make_chunker_program_xml
313 return make_program_xml( "chunker", $chunker, sub { return ""; } );
318 my ( $tape_name, $tape ) = @_;
324 make_xml_elt( "name", $tape_name ),
325 make_xml_elt( "date", $tape->{date} ),
326 defined $tape->{files}
327 ? make_xml_elt( "files", $tape->{files} )
330 ? make_xml_elt( "bytes", $tape->{kb} * 1024 )
337 sub make_tapelist_xml
345 map { make_tape_xml( $_, $tapelist->{$_} ) } keys %$tapelist
351 sub make_taper_program_xml
354 return make_program_xml(
358 defined $taper->{tapes}
359 ? make_tapelist_xml( $taper->{tapes} )
366 # Note: make_program_xml is a super-type for the individual programs,
367 # make_programs_xml is the element container for the programs
369 sub make_programs_xml
376 return join( xml_nl(),
377 exists $programs->{planner}
378 ? make_planner_xml( $programs->{planner} )
380 exists $programs->{driver}
381 ? make_driver_xml( $programs->{driver} )
383 exists $programs->{dumper}
384 ? make_dumper_program_xml( $programs->{dumper} )
386 exists $programs->{chunker}
387 ? make_chunker_program_xml( $programs->{chunker} )
389 exists $programs->{taper}
390 ? make_taper_program_xml( $programs->{taper} )
401 Amanda::Report::xml - output Amanda::Report objects in xml format
406 my $report = Amanda::Report->new($logfile);
407 print $report->output_xml();
411 Stub documentation for Amanda::Report::xml,
421 Mention other useful documentation such as the documentation of
422 related modules or operating system documentation (such as man pages
423 in UNIX), or any relevant external documentation such as RFCs or
426 If you have a mailing list set up for your module, mention it here.
428 If you have a web site set up for your module, mention it here.
432 Paul C Mantz, E<lt>pcmantz@zmanda.comE<gt>
436 None reported... yet.