Imported Upstream version 3.2.0
[debian/amanda] / installcheck / Amanda_Report.pl
1 # Copyright (c) 2008, 2010 Zmanda, Inc.  All Rights Reserved.
2 #
3 # This program is free software; you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License version 2 as published
5 # by the Free Software Foundation.
6 #
7 # This program is distributed in the hope that it will be useful, but
8 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
9 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
10 # for more details.
11 #
12 # You should have received a copy of the GNU General Public License along
13 # with this program; if not, write to the Free Software Foundation, Inc.,
14 # 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
15 #
16 # Contact information: Zmanda Inc., 465 S. Mathilda Ave., Suite 300
17 # Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
18
19 use Test::More tests => 58;
20 use strict;
21 use warnings;
22
23 use File::Path;
24 use Data::Dumper;
25
26 use lib "@amperldir@";
27
28 use Installcheck;
29 use Amanda::Report;
30 use Amanda::Debug;
31
32 Amanda::Debug::dbopen("installcheck");
33 Installcheck::log_test_output();
34
35 my %LogfileContents;
36 my %LogfileFlags;
37 my %LogfileData;
38 my $logCount = 0;
39 my $log_filename = "$Installcheck::TMP/Amanda_Report_test.log";
40
41 # copy/pasted from installcheck/Amanda_Logfile.pl .  Maybe move this
42 # to a module?
43 sub write_logfile
44 {
45     my ($contents) = @_;
46
47     open my $logfile, ">", $log_filename
48       or die("Could not create temporary log file '$log_filename': $!");
49     print $logfile $contents;
50     close $logfile;
51
52     return $log_filename;
53 }
54
55 $LogfileContents{planner} = <<EOF;
56 START planner date 20090728160530
57 INFO planner planner pid 12346
58 DISK planner localhost /root
59 DISK planner localhost /etc
60 DISK planner localhost /var/log
61 EOF
62
63 $LogfileFlags{planner} = {
64     normal_run => 1,
65     results_missing => 1,
66     dump_failed => 0,
67     dump_strange => 0
68 };
69
70 $LogfileData{planner} = {
71     programs => { planner => { start => "20090728160530", }, },
72     disklist => {
73         localhost => {
74             "/root" => {
75                 estimate => undef,
76                 dumps    => {},
77             },
78             "/etc" => {
79                 estimate => undef,
80                 dumps    => {},
81             },
82             "/var/log" => {
83                 estimate => undef,
84                 dumps    => {},
85             },
86         },
87     },
88 };
89
90 #
91 # NOTE: this test is not reflective of real amanda log output.
92 #
93 $LogfileContents{driver} = <<EOF;
94 START planner date 20090728122430
95 INFO planner planner pid 12346
96 INFO driver driver pid 12347
97 DISK planner localhost /root
98 DISK planner localhost /etc
99 DISK planner localhost /home
100 START driver date 20090728122430
101 STATS driver hostname localhost
102 STATS driver startup time 0.034
103 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
104 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
105 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 5012 ckb 64 kps 1024]
106 FINISH driver date 20090728122445 time 14.46
107 EOF
108
109 $LogfileFlags{driver} = {
110     got_finish => 1,
111     normal_run => 1,
112     results_missing => 1,
113     dump_failed => 0,
114     dump_strange => 0
115 };
116
117 $LogfileData{driver} = {
118     programs => {
119         planner => { start => "20090728122430", },
120         driver  => {
121             start      => "20090728122430",
122             start_time => "0.034",
123             time       => "14.46",
124         },
125     },
126     disklist => {
127         localhost => {
128             "/root" => {
129                 estimate => {
130                     level => "0",
131                     sec   => "0",
132                     nkb   => "42",
133                     ckb   => "64",
134                     kps   => "1024",
135                 },
136                 dumps => {},
137             },
138             "/etc" => {
139                 estimate => {
140                     level => "0",
141                     sec   => "2",
142                     nkb   => "2048",
143                     ckb   => "64",
144                     kps   => "1024",
145                 },
146                 dumps => {},
147             },
148             "/home" => {
149                 estimate => {
150                     level => "0",
151                     sec   => "4",
152                     nkb   => "5012",
153                     ckb   => "64",
154                     kps   => "1024",
155                 },
156                 dumps => {},
157             },
158         },
159     },
160 };
161
162
163
164 $LogfileContents{dumper} = <<EOF;
165 START planner date 20090728122430
166 INFO driver driver pid 12345
167 INFO planner planner pid 12346
168 DISK planner localhost /root
169 DISK planner localhost /etc
170 DISK planner localhost /home
171 START driver date 20090728122430
172 STATS driver hostname localhost
173 STATS driver startup time 0.034
174 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
175 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
176 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
177 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
178 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
179 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
180 FINISH driver date 20090728122445 time 14.46
181 EOF
182
183 $LogfileFlags{dumper} = {
184     got_finish => 1,
185     normal_run => 1,
186     results_missing => 0,
187     dump_failed => 1,
188     dump_strange => 0
189 };
190
191 $LogfileData{dumper} = {
192     programs => {
193         planner => { start => "20090728122430", },
194         driver  => {
195             start      => "20090728122430",
196             start_time => "0.034",
197             time       => "14.46",
198         },
199         dumper => {},
200     },
201     disklist => {
202         localhost => {
203             "/root" => {
204                 estimate => {
205                     level => "0",
206                     sec   => "0",
207                     nkb   => "42",
208                     ckb   => "64",
209                     kps   => "1024",
210                 },
211                 dumps => {
212                   '20090728122430' => [
213                     {
214                         dumper => {
215                             date      => "20090728122430",
216                             status    => "success",
217                             level     => "0",
218                             sec       => "0.02",
219                             kb        => "42",
220                             kps       => "2100",
221                             orig_kb   => "42",
222                         },
223                     },
224                   ]
225                 },
226             },
227             "/etc" => {
228                 estimate => {
229                     level => "0",
230                     sec   => "2",
231                     nkb   => "2048",
232                     ckb   => "64",
233                     kps   => "1024",
234                 },
235                 dumps => {
236                   '20090728122430' => [
237                     {
238                         dumper => {
239                             date      => "20090728122430",
240                             status    => "success",
241                             level     => "0",
242                             sec       => "0.87",
243                             kb        => "2048",
244                             kps       => "2354",
245                             orig_kb   => "2048",
246                         },
247                     },
248                   ]
249                 },
250             },
251             "/home" => {
252                 estimate => {
253                     level => "0",
254                     sec   => "4",
255                     nkb   => "4096",
256                     ckb   => "64",
257                     kps   => "1024",
258                 },
259                 dumps => {
260                   '20090728122430' => [
261                     {
262                         dumper => {
263                             date      => "20090728122430",
264                             status    => "success",
265                             level     => "0",
266                             sec       => "1.68421",
267                             kb        => "4096",
268                             kps       => "2354",
269                             orig_kb   => "4096",
270                         },
271                     },
272                   ]
273                 },
274             },
275         },
276     },
277 };
278
279
280 $LogfileContents{chunker} = <<EOF;
281 START planner date 20090728122430
282 INFO driver driver pid 12345
283 INFO planner planner pid 12346
284 DISK planner localhost /root
285 DISK planner localhost /etc
286 DISK planner localhost /home
287 START driver date 20090728122430
288 STATS driver hostname localhost
289 STATS driver startup time 0.034
290 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
291 INFO chunker chunker pid 12348
292 SUCCESS chunker localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100]
293 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
294 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
295 INFO chunker chunker pid 12349
296 SUCCESS chunker localhost /etc 20090728122430 0 [sec 0.79 kb 2048 kps 2592.40506]
297 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
298 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
299 INFO chunker chunker pid 12350
300 PARTIAL chunker localhost /home 20090728122430 0 [sec 0.82 kb 2532 kps 3087.80488]
301 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
302 FINISH driver date 20090728122445 time 14.46
303 EOF
304
305 $LogfileFlags{chunker} = {
306     got_finish => 1,
307     normal_run => 1,
308     results_missing => 0,
309     dump_failed => 1,
310     dump_strange => 0
311 };
312
313 $LogfileData{chunker} = {
314     programs => {
315         planner => { start => "20090728122430", },
316         driver => {
317             start      => "20090728122430",
318             start_time => "0.034",
319             time       => "14.46",
320         },
321         dumper  => {},
322         chunker => {}
323     },
324     disklist => {
325         localhost => {
326             "/root" => {
327                 estimate => {
328                     level => "0",
329                     sec   => "0",
330                     nkb   => "42",
331                     ckb   => "64",
332                     kps   => "1024",
333                 },
334                 dumps => {
335                   '20090728122430' => [
336                     {
337                         dumper => {
338                             date      => "20090728122430",
339                             status    => "success",
340                             level     => "0",
341                             sec       => "0.02",
342                             kb        => "42",
343                             kps       => "2100",
344                             orig_kb   => "42",
345                         },
346                         chunker => {
347                             status => "success",
348                             level  => "0",
349                             date   => "20090728122430",
350                             sec    => "0.02",
351                             kb     => "42",
352                             kps    => "2100",
353                         },
354                     },
355                   ]
356                 },
357             },
358             "/etc" => {
359                 estimate => {
360                     level => "0",
361                     sec   => "2",
362                     nkb   => "2048",
363                     ckb   => "64",
364                     kps   => "1024",
365                 },
366                 dumps => {
367                   '20090728122430' => [
368                     {
369                         dumper => {
370                             date      => "20090728122430",
371                             status    => "success",
372                             level     => "0",
373                             sec       => "0.87",
374                             kb        => "2048",
375                             kps       => "2354",
376                             orig_kb   => "2048",
377                         },
378                         chunker => {
379                             status => "success",
380                             level  => "0",
381                             date   => "20090728122430",
382                             sec    => "0.79",
383                             kb     => "2048",
384                             kps    => "2592.40506",
385                         },
386                     },
387                   ]
388                 },
389             },
390             "/home" => {
391                 estimate => {
392                     level => "0",
393                     sec   => "4",
394                     nkb   => "4096",
395                     ckb   => "64",
396                     kps   => "1024",
397                 },
398                 dumps => {
399                   '20090728122430' => [
400                     {
401                         dumper => {
402                             date      => "20090728122430",
403                             status    => "success",
404                             level     => "0",
405                             sec       => "1.68421",
406                             kb        => "4096",
407                             kps       => "2354",
408                             orig_kb   => "4096",
409                         },
410                         chunker => {
411                             status => "partial",
412                             level  => "0",
413                             date   => "20090728122430",
414                             sec    => "0.82",
415                             kb     => "2532",
416                             kps    => "3087.80488"
417                         },
418                     },
419                   ]
420                 },
421             },
422         },
423     },
424 };
425
426
427 $LogfileContents{taper} = <<EOF;
428 DISK planner somebox /lib
429 START planner date 20080111
430 START driver date 20080111
431 STATS driver hostname somebox
432 STATS driver startup time 0.051
433 FINISH planner date 20080111 time 82.721
434 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
435 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
436 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
437 INFO taper taper pid 28023
438 START taper datestamp 20080111 label TESTCONF01 tape 1
439 PART taper TESTCONF01 1 somebox /lib 20080111 1/-1 0 [sec 0.004722 kb 640 kps 135535.789920]
440 PART taper TESTCONF01 2 somebox /lib 20080111 2/-1 0 [sec 0.003438 kb 640 kps 186154.741129]
441 PART taper TESTCONF01 3 somebox /lib 20080111 3/-1 0 [sec 0.002931 kb 640 kps 218355.510065]
442 PART taper TESTCONF01 4 somebox /lib 20080111 4/-1 0 [sec 0.000578 kb 96 kps 166089.965398]
443 PARTIAL taper somebox /lib 20080111 4 0 [sec 0.011669 kb 2016 kps 172765.446911]
444 INFO taper tape TESTCONF01 kb 2016 fm 4 [OK]
445 INFO taper pid-done 28023
446 FINISH driver date 20080111 time 2167.581
447 EOF
448
449 $LogfileFlags{taper} = {
450     got_finish => 1,
451     normal_run => 1,
452     results_missing => 0,
453     dump_failed => 0,
454     dump_strange => 0
455 };
456
457 $LogfileData{taper} = {
458     programs => {
459         planner => {
460             start => "20080111",
461             time  => "82.721",
462         },
463         driver => {
464             start      => "20080111",
465             start_time => "0.051",
466             time       => "2167.581",
467         },
468         dumper  => {},
469         chunker => {},
470         taper   => {
471             start => '20080111',
472             notes => [
473                 "tape TESTCONF01 kb 2016 fm 4 [OK]"
474             ],
475             tapes => {
476                 TESTCONF01 => {
477                     'label' => 'TESTCONF01',
478                     time    => "0.011669",
479                     date    => "20080111",
480                     kb      => "2016",
481                     files   => "4",
482                     dle     => "1",
483                 },
484             },
485             tape_labels => ['TESTCONF01'],
486         },
487     },
488     disklist => {
489         somebox => {
490             "/lib" => {
491                 estimate => {
492                     level => "0",
493                     sec   => "1",
494                     nkb   => "2002",
495                     ckb   => "480",
496                     kps   => "385",
497                 },
498                 dumps => {
499                   '20080111' => [
500                     {
501                         dumper => {
502                             status  => "success",
503                             date    => "20080111",
504                             level   => "0",
505                             sec     => "0.209",
506                             kb      => "1970",
507                             kps     => "9382.2",
508                             orig_kb => "1970",
509                         },
510                         chunker => {
511                             status => "success",
512                             date   => "20080111",
513                             level  => "0",
514                             sec    => "0.305",
515                             kb     => "420",
516                             kps    => "1478.7",
517                         },
518                         taper => {
519                             status => "partial",
520                             parts  => [
521                                 {
522                                     label => "TESTCONF01",
523                                     date  => "20080111",
524                                     file  => "1",
525                                     partnum  => "1",
526                                     sec   => "0.004722",
527                                     kb    => "640",
528                                     kps   => "135535.789920",
529                                 },
530                                 {
531                                     label => "TESTCONF01",
532                                     date  => "20080111",
533                                     file  => "2",
534                                     partnum  => "2",
535                                     sec   => "0.003438",
536                                     kb    => "640",
537                                     kps   => "186154.741129",
538                                 },
539                                 {
540                                     label => "TESTCONF01",
541                                     date  => "20080111",
542                                     file  => "3",
543                                     partnum  => "3",
544                                     sec   => "0.002931",
545                                     kb    => "640",
546                                     kps   => "218355.510065",
547                                 },
548                                 {
549                                     label => "TESTCONF01",
550                                     date  => "20080111",
551                                     file  => "4",
552                                     partnum  => "4",
553                                     sec   => "0.000578",
554                                     kb    => "96",
555                                     kps   => "166089.965398",
556                                 },
557                             ],
558                             level   => "0",
559                             sec     => "0.011669",
560                             kb      => "2016",
561                             kps     => "172765.446911",
562                             orig_kb => undef,
563                             error   => '',
564                         },
565                     },
566                   ]
567                 },
568             },
569         },
570     },
571 };
572
573
574 $LogfileContents{simple} = <<EOF;
575 DISK planner somebox /lib
576 START planner date 20080111
577 START driver date 20080111
578 STATS driver hostname somebox
579 STATS driver startup time 0.051
580 FINISH planner date 20080111 time 82.721
581 START taper datestamp 20080111 label Conf-001 tape 1
582 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
583 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
584 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
585 PART taper Conf-001 1 somebox /lib 20080111 1/1 0 [sec 4.813543 kb 419 kps 87.133307]
586 DONE taper somebox /lib 20080111 1 0 [sec 4.813543 kb 419 kps 87.133307]
587 FINISH driver date 20080111 time 2167.581
588 EOF
589
590 $LogfileFlags{simple} = {
591     got_finish => 1,
592     normal_run => 1,
593     results_missing => 0,
594     dump_failed => 0,
595     dump_strange => 0
596 };
597
598 $LogfileData{simple} = {
599     programs => {
600         planner => {
601             start => "20080111",
602             time  => "82.721",
603         },
604         driver => {
605             start      => "20080111",
606             start_time => "0.051",
607             time       => "2167.581",
608         },
609         taper => {
610             start => '20080111',
611             tapes => {
612                 "Conf-001" => {
613                     'label' => 'Conf-001',
614                     'files' => 1,
615                     'time'  => '4.813543',
616                     'date'  => '20080111',
617                     'kb'    => 419,
618                     'dle'   => 1
619                 },
620             },
621             tape_labels => ["Conf-001"],
622         },
623         dumper  => {},
624         chunker => {},
625     },
626     disklist => {
627         somebox => {
628             "/lib" => {
629                 estimate => {
630                     nkb   => "2002",
631                     kps   => "385",
632                     ckb   => "480",
633                     level => "0",
634                     sec   => "1"
635                 },
636                 dumps => {
637                   '20080111' => [
638                     {
639                         dumper => {
640                             status  => "success",
641                             date    => "20080111",
642                             level   => "0",
643                             sec     => "0.209",
644                             kb      => "1970",
645                             kps     => "9382.2",
646                             orig_kb => "1970",
647                         },
648                         taper => {
649                             status => "done",
650                             parts  => [
651                                 {
652                                     label => "Conf-001",
653                                     date  => "20080111",
654                                     file  => "1",
655                                     partnum  => "1",
656                                     sec   => "4.813543",
657                                     kb    => "419",
658                                     kps   => "87.133307",
659                                 },
660                             ],
661                             level   => "0",
662                             sec     => "4.813543",
663                             kb      => "419",
664                             kps     => "87.133307",
665                             orig_kb => undef,
666                         },
667                         chunker => {
668                             status => "success",
669                             date   => "20080111",
670                             level  => "0",
671                             sec    => "0.305",
672                             kb     => "420",
673                             kps    => "1478.7",
674                         },
675                     },
676                   ]
677                 },
678             },
679         },
680     },
681 };
682
683 $LogfileContents{fullExample} = <<EOF;
684 INFO amdump amdump pid 9291
685 INFO driver driver pid 9313
686 INFO planner planner pid 9312
687 DISK planner hostname.example.org /
688 DISK planner hostname.example.org /somedir2
689 DISK planner hostname.example.org /moreapps
690 DISK planner hostname.example.org /apps
691 DISK planner hostname.example.org /somedir
692 START planner date 20081002040002
693 START driver date 20081002040002
694 STATS driver hostname hostname.example.org
695 STATS driver startup time 0.043
696 INFO dumper dumper pid 9316
697 INFO dumper dumper pid 9315
698 INFO dumper dumper pid 9318
699 INFO dumper dumper pid 9317
700 INFO taper taper pid 9314
701 FINISH planner date 20081002040002 time 32.689
702 INFO planner pid-done 9312
703 INFO chunker chunker pid 11110
704 INFO dumper gzip pid 11129
705 SUCCESS dumper hostname.example.org /somedir 20081002040002 1 [sec 0.039 kb 10 kps 250.4 orig-kb 10]
706 SUCCESS chunker hostname.example.org /somedir 20081002040002 1 [sec 5.070 kb 10 kps 8.3]
707 INFO chunker pid-done 11110
708 STATS driver estimate hostname.example.org /somedir 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 1024]
709 INFO dumper pid-done 11129
710 START taper datestamp 20081002040002 label FullBackup-14 tape 1
711 PART taper FullBackup-14 1 hostname.example.org /somedir 20081002040002 1/1 1 [sec 0.002776 kb 10 kps 3602.305476]
712 DONE taper hostname.example.org /somedir 20081002040002 1 1 [sec 0.002776 kb 10 kps 3602.305476]
713 INFO chunker chunker pid 11157
714 INFO dumper gzip pid 11232
715 SUCCESS dumper hostname.example.org /moreapps 20081002040002 1 [sec 0.039 kb 10 kps 250.8 orig-kb 10]
716 INFO dumper pid-done 11232
717 SUCCESS chunker hostname.example.org /moreapps 20081002040002 1 [sec 5.058 kb 10 kps 8.3]
718 INFO chunker pid-done 11157
719 STATS driver estimate hostname.example.org /moreapps 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 149050]
720 PART taper FullBackup-14 2 hostname.example.org /moreapps 20081002040002 1/1 1 [sec 0.002656 kb 10 kps 3765.060241]
721 DONE taper hostname.example.org /moreapps 20081002040002 1 1 [sec 0.002656 kb 10 kps 3765.060241]
722 INFO chunker chunker pid 11700
723 INFO dumper gzip pid 11723
724 SUCCESS dumper hostname.example.org /apps 20081002040002 1 [sec 0.414 kb 6630 kps 16013.4 orig-kb 6630]
725 SUCCESS chunker hostname.example.org /apps 20081002040002 1 [sec 5.432 kb 6630 kps 1226.3]
726 INFO chunker pid-done 11700
727 INFO dumper pid-done 11723
728 STATS driver estimate hostname.example.org /apps 20081002040002 1 [sec 6 nkb 6662 ckb 6688 kps 1024]
729 PART taper FullBackup-14 3 hostname.example.org /apps 20081002040002 1/1 1 [sec 0.071808 kb 6630 kps 92329.545455]
730 DONE taper hostname.example.org /apps 20081002040002 1 1 [sec 0.071808 kb 6630 kps 92329.545455]
731 INFO chunker chunker pid 11792
732 INFO dumper gzip pid 11816
733 SUCCESS dumper hostname.example.org / 20081002040002 1 [sec 3.028 kb 8393 kps 2771.1 orig-kb 82380]
734 SUCCESS chunker hostname.example.org / 20081002040002 1 [sec 8.047 kb 8393 kps 1047.0]
735 INFO chunker pid-done 11792
736 STATS driver estimate hostname.example.org / 20081002040002 1 [sec 39 nkb 80542 ckb 40288 kps 1024]
737 INFO dumper pid-done 11816
738 PART taper FullBackup-14 4 hostname.example.org / 20081002040002 1/1 1 [sec 0.088934 kb 8392 kps 94368.875374]
739 DONE taper hostname.example.org / 20081002040002 1 1 [sec 0.088934 kb 8392 kps 94368.875374]
740 INFO dumper gzip pid 11861
741 STRANGE dumper hostname.example.org /somedir2 0 [sec 372.700 kb 28776940 kps 77212.0 orig-kb 28776940]
742   ! strange data
743 PART taper FullBackup-14 5 hostname.example.org /somedir2 20081002040002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
744 DONE taper hostname.example.org /somedir2 20081002040002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
745 INFO dumper pid-done 11861
746 STATS driver estimate hostname.example.org /somedir2 20081002040002 0 [sec 28776940 nkb 28776972 ckb 28776992 kps 1]
747 PART taper FullBackup-14 6 hostname.example.org /somedir2 20081002030002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
748 DONE taper hostname.example.org /somedir2 20081002030002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
749 INFO dumper pid-done 9315
750 INFO dumper pid-done 9317
751 INFO dumper pid-done 9316
752 INFO dumper pid-done 9318
753 INFO taper pid-done 9314
754 FINISH driver date 20081002040002 time 663.574
755 INFO driver pid-done 9313
756
757 EOF
758
759 $LogfileFlags{fullExample} = {
760     got_finish => 1,
761     normal_run => 1,
762     results_missing => 0,
763     dump_failed => 0,
764     dump_strange => 1
765 };
766
767 $LogfileData{fullExample} = {
768     programs => {
769         amdump => {},
770         dumper => {},
771         driver => {
772             time       => "663.574",
773             start      => "20081002040002",
774             start_time => "0.043",
775         },
776         planner => {
777             time  => "32.689",
778             start => "20081002040002",
779         },
780         chunker => {},
781         taper   => {
782             start => '20081002040002',
783             tapes => {
784                 "FullBackup-14" => {
785                     'label' => 'FullBackup-14',
786                     'files' => 6,
787                     'time'  => '740.930972',
788                     'date'  => '20081002040002',
789                     'kb'    => 57568922,
790                     'dle'   => 6
791                 },
792             },
793             tape_labels => ["FullBackup-14"],
794         },
795     },
796     disklist => {
797         "hostname.example.org" => {
798             "/" => {
799                 estimate => {
800                     level => "1",
801                     sec   => "39",
802                     nkb   => "80542",
803                     kps   => "1024",
804                     ckb   => "40288",
805                 },
806                 dumps => {
807                   '20081002040002' => [
808                     {
809                         chunker => {
810                             status => "success",
811                             date   => "20081002040002",
812                             kps    => "1047.0",
813                             level  => "1",
814                             sec    => "8.047",
815                             kb     => "8393"
816                         },
817                         taper => {
818                             kps    => '94368.875374',
819                             level  => '1',
820                             sec    => '0.088934',
821                             status => 'done',
822                             parts  => [
823                                 {
824                                     kps   => "94368.875374",
825                                     sec   => "0.088934",
826                                     date  => "20081002040002",
827                                     partnum  => "1",
828                                     file  => "4",
829                                     kb    => "8392",
830                                     label => "FullBackup-14"
831                                 },
832                             ],
833                             kb      => '8392',
834                             orig_kb => undef
835                         },
836                         dumper => {
837                             kps     => "2771.1",
838                             level   => "1",
839                             sec     => "3.028",
840                             status  => "success",
841                             date    => "20081002040002",
842                             kb      => "8393",
843                             orig_kb => "82380"
844                         },
845                     },
846                   ]
847                 },
848             },
849             "/somedir2" => {
850                 estimate => {
851                     nkb   => "28776972",
852                     kps   => "1",
853                     ckb   => "28776992",
854                     level => "0",
855                     sec   => "28776940"
856                 },
857                 dumps => {
858                   "20081002040002" => [
859                     {
860                         dumper => {
861                             kps     => "77212.0",
862                             level   => "0",
863                             sec     => "372.700",
864                             status  => "strange",
865                             #date    => "20081002040002",
866                             kb      => "28776940",
867                             orig_kb => "28776940",
868                             nb_stranges => 1,
869                             stranges => [ "! strange data" ],
870                         },
871                         taper => {
872                             kps    => "77695.214669",
873                             level  => "0",
874                             sec    => "370.382399",
875                             status => "done",
876                             parts  => [
877                                 {
878                                     label => 'FullBackup-14',
879                                     date  => '20081002040002',
880                                     kps   => '77695.214669',
881                                     sec   => '370.382399',
882                                     partnum  => '1',
883                                     file  => '5',
884                                     kb    => '28776940',
885                                 }
886                             ],
887                             kb      => "28776940",
888                             orig_kb => undef
889                         },
890                     },
891                   ],
892                   "20081002030002" => [
893                     {
894                         taper => {
895                             kps    => "77695.214669",
896                             level  => "0",
897                             sec    => "370.382399",
898                             status => "done",
899                             parts  => [
900                                 {
901                                     label => 'FullBackup-14',
902                                     date  => '20081002030002',
903                                     kps   => '77695.214669',
904                                     sec   => '370.382399',
905                                     partnum  => '1',
906                                     file  => '6',
907                                     kb    => '28776940',
908                                 }
909                             ],
910                             kb      => "28776940",
911                             orig_kb => undef
912                         },
913                     },
914                   ]
915                 },
916             },
917             "/moreapps" => {
918                 estimate => {
919                     nkb   => "42",
920                     kps   => "149050",
921                     ckb   => "64",
922                     level => "1",
923                     sec   => "0"
924                 },
925                 dumps => {
926                   '20081002040002' => [
927                     {
928                         'chunker' => {
929                             'kps'    => '8.3',
930                             'level'  => '1',
931                             'sec'    => '5.058',
932                             'status' => 'success',
933                             'date'   => '20081002040002',
934                             'kb'     => '10'
935                         },
936                         'taper' => {
937                             'kps'    => '3765.060241',
938                             'level'  => '1',
939                             'sec'    => '0.002656',
940                             'status' => 'done',
941                             'parts'  => [
942                                 {
943                                     kps   => "3765.060241",
944                                     sec   => "0.002656",
945                                     date  => "20081002040002",
946                                     partnum  => "1",
947                                     file  => "2",
948                                     kb    => "10",
949                                     label => "FullBackup-14"
950                                 },
951                             ],
952                             'kb'    => '10',
953                             orig_kb => undef
954                         },
955                         'dumper' => {
956                             'kps'    => '250.8',
957                             'level'  => '1',
958                             'sec'    => '0.039',
959                             'status' => 'success',
960                             'date'   => '20081002040002',
961                             'kb'     => '10',
962                             orig_kb  => '10'
963                         },
964                     },
965                   ]
966                 },
967             },
968             "/apps" => {
969                 estimate => {
970                     nkb   => "6662",
971                     kps   => "1024",
972                     ckb   => "6688",
973                     level => "1",
974                     sec   => "6"
975                 },
976                 dumps => {
977                   '20081002040002' => [
978                     {
979                         chunker => {
980                             kps    => "1226.3",
981                             level  => "1",
982                             sec    => "5.432",
983                             status => "success",
984                             date   => "20081002040002",
985                             kb     => "6630"
986                         },
987                         taper => {
988                             kps    => "92329.545455",
989                             level  => "1",
990                             sec    => "0.071808",
991                             status => "done",
992                             parts  => [
993                                 {
994                                     kps   => "92329.545455",
995                                     sec   => "0.071808",
996                                     date  => "20081002040002",
997                                     partnum  => "1",
998                                     file  => "3",
999                                     kb    => "6630",
1000                                     label => "FullBackup-14"
1001                                 },
1002                             ],
1003                             kb      => "6630",
1004                             orig_kb => undef,
1005                         },
1006                         dumper => {
1007                             kps     => "16013.4",
1008                             level   => "1",
1009                             sec     => "0.414",
1010                             status  => "success",
1011                             date    => "20081002040002",
1012                             kb      => "6630",
1013                             orig_kb => "6630"
1014                         },
1015                     },
1016                   ]
1017                 },
1018             },
1019             "/somedir" => {
1020                 estimate => {
1021                     nkb   => "42",
1022                     kps   => "1024",
1023                     ckb   => "64",
1024                     level => "1",
1025                     sec   => "0"
1026                 },
1027                 dumps => {
1028                   "20081002040002" => [
1029                     {
1030                         chunker => {
1031                             kps    => "8.3",
1032                             level  => "1",
1033                             sec    => "5.070",
1034                             status => "success",
1035                             date   => "20081002040002",
1036                             kb     => "10",
1037                         },
1038                         taper => {
1039                             kps    => "3602.305476",
1040                             level  => "1",
1041                             sec    => "0.002776",
1042                             status => "done",
1043                             parts  => [
1044                                 {
1045                                     kps   => "3602.305476",
1046                                     sec   => "0.002776",
1047                                     date  => "20081002040002",
1048                                     partnum  => "1",
1049                                     file  => "1",
1050                                     kb    => "10",
1051                                     label => "FullBackup-14",
1052                                 },
1053                             ],
1054                             kb      => "10",
1055                             orig_kb => undef
1056                         },
1057                         dumper => {
1058                             kps     => "250.4",
1059                             level   => "1",
1060                             sec     => "0.039",
1061                             status  => "success",
1062                             date    => "20081002040002",
1063                             kb      => "10",
1064                             orig_kb => "10",
1065                         },
1066                     },
1067                   ]
1068                 },
1069             },
1070         },
1071     },
1072 };
1073
1074 $LogfileContents{amflushExample} = <<EOF;
1075 INFO amflush amflush pid 26036
1076 DISK amflush localhost /backups/oracle
1077 DISK amflush localhost /backups/mysql
1078 DISK amflush localhost /usr/local/bin
1079 DISK amflush localhost /etc
1080 DISK amflush localhost /home
1081 START amflush date 20090622075550
1082 INFO driver driver pid 26076
1083 START driver date 20090622075550
1084 STATS driver hostname localhost
1085 STATS driver startup time 0.011
1086 INFO taper taper pid 26077
1087 START taper datestamp 20090622075550 label DailyTapeDataSet-017 tape 1
1088 PART taper DailyTapeDataSet-017 1 localhost /etc 20090620020002 1/1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1089 DONE taper localhost /etc 20090620020002 1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1090 PART taper DailyTapeDataSet-017 2 localhost /usr/local/bin 20090620020002 1/1 1 [sec 1.675693 kb 309 kps 184.632684]
1091 DONE taper localhost /usr/local/bin 20090620020002 1 1 [sec 1.675693 kb 309 kps 184.632684]
1092 INFO taper pid-done 26077
1093 FINISH driver date 20090622075550 time 177.708
1094 INFO driver pid-done 26076
1095 INFO amflush pid-done 26075
1096 EOF
1097
1098 $LogfileFlags{amflushExample} = {
1099     got_finish  => 1,
1100     amflush_run => 1,
1101     results_missing => 0,
1102     dump_failed => 0,
1103     dump_strange => 0
1104 };
1105
1106 $LogfileData{amflushExample} = {
1107     'programs' => {
1108         'taper' => {
1109             'start' => '20090622075550',
1110             'tapes' => {
1111                 'DailyTapeDataSet-017' => {
1112                     'label' => 'DailyTapeDataSet-017',
1113                     'files' => 2,
1114                     'time'  => '4.180007',
1115                     'date'  => '20090622075550',
1116                     'kb'    => 37289,
1117                     'dle'   => 2
1118                 },
1119             },
1120             tape_labels => ["DailyTapeDataSet-017"],
1121         },
1122         'amflush' => { 'start' => '20090622075550' },
1123         'driver'  => {
1124             'time'       => '177.708',
1125             'start_time' => '0.011',
1126             'start'      => '20090622075550'
1127         },
1128     },
1129     'disklist' => {
1130         'localhost' => {
1131             '/etc' => {
1132                 estimate => undef,
1133                 dumps => {
1134                   '20090620020002' => [
1135                     {
1136                         'taper' => {
1137                             'kps'    => '14766.518895',
1138                             'level'  => '1',
1139                             'sec'    => '2.504314',
1140                             'status' => 'done',
1141                             'parts'  => [
1142                                 {
1143                                     'kps'   => '14766.518895',
1144                                     'sec'   => '2.504314',
1145                                     'date'  => '20090620020002',
1146                                     'partnum'  => '1',
1147                                     'file'  => '1',
1148                                     'kb'    => '36980',
1149                                     'label' => 'DailyTapeDataSet-017'
1150                                 },
1151                             ],
1152                             'kb'     => '36980',
1153                             orig_kb  => undef
1154                         },
1155                     },
1156                   ]
1157                 },
1158             },
1159             '/backups/oracle' => {
1160                 estimate => undef,
1161                 dumps    => {},
1162             },
1163             '/usr/local/bin' => {
1164                 estimate => undef,
1165                 dumps    => {
1166                     '20090620020002' => [
1167                     {
1168                         'taper' => {
1169                             'kps'    => '184.632684',
1170                             'level'  => '1',
1171                             'sec'    => '1.675693',
1172                             'status' => 'done',
1173                             'parts'  => [
1174                                 {
1175                                     'kps'   => '184.632684',
1176                                     'sec'   => '1.675693',
1177                                     'date'  => '20090620020002',
1178                                     'partnum'  => '1',
1179                                     'file'  => '2',
1180                                     'kb'    => '309',
1181                                     'label' => 'DailyTapeDataSet-017'
1182                                 },
1183                             ],
1184                             'kb'     => '309',
1185                             orig_kb  => undef
1186                         },
1187                     }]
1188                 },
1189             },
1190             '/home' => {
1191                 estimate => undef,
1192                 dumps    => {},
1193             },
1194             '/backups/mysql' => {
1195                 estimate => undef,
1196                 dumps    => {},
1197             },
1198         },
1199     },
1200 };
1201
1202 foreach my $test ( keys %LogfileContents ) {
1203
1204     unless ( exists $LogfileData{$test} ) {
1205         die "error: $test present in \%LogfileContents but not \%LogfileData\n";
1206     }
1207
1208     my $report =
1209       Amanda::Report->new( write_logfile( $LogfileContents{$test} ), 1 );
1210     is_deeply( $report->{data}, $LogfileData{$test}, "data check: $test" );
1211
1212     map {
1213         cmp_ok(
1214             $report->get_flag($_), "==",
1215             $LogfileFlags{$test}->{$_},
1216             "flag test: $_, $test"
1217         );
1218     } keys %{ $LogfileFlags{$test} };
1219 }
1220
1221 #
1222 # Test the report API
1223 #
1224 my $report =
1225   Amanda::Report->new( write_logfile( $LogfileContents{fullExample} ), 1 );
1226
1227 is_deeply( [ $report->get_hosts() ],
1228     ['hostname.example.org'], 'check: Amanda::Report::get_hosts()' );
1229
1230 is_deeply(
1231     [ sort { $a cmp $b } $report->get_disks('hostname.example.org') ],
1232     [ '/', '/apps', '/moreapps', '/somedir', '/somedir2' ],
1233     'check: Amanda::Report::get_disks($hostname)'
1234 );
1235
1236 is_deeply(
1237     [ sort { $a->[1] cmp $b->[1] } $report->get_dles() ],
1238     [
1239         [ 'hostname.example.org', '/' ],
1240         [ 'hostname.example.org', '/apps' ],
1241         [ 'hostname.example.org', '/moreapps' ],
1242         [ 'hostname.example.org', '/somedir' ],
1243         [ 'hostname.example.org', '/somedir2' ],
1244     ],
1245     'check: Amanda::Report::get_dles()'
1246 );
1247
1248 is_deeply(
1249     $report->get_dle_info("hostname.example.org", "/apps"),
1250     {
1251         estimate => {
1252             nkb   => "6662",
1253             kps   => "1024",
1254             ckb   => "6688",
1255             level => "1",
1256             sec   => "6"
1257         },
1258         dumps => {
1259           '20081002040002' => [
1260             {
1261                 chunker => {
1262                     kps    => "1226.3",
1263                     level  => "1",
1264                     sec    => "5.432",
1265                     status => "success",
1266                     date   => "20081002040002",
1267                     kb     => "6630"
1268                 },
1269                 taper => {
1270                     kps    => "92329.545455",
1271                     level  => "1",
1272                     sec    => "0.071808",
1273                     status => "done",
1274                     parts  => [
1275                         {
1276                             kps   => "92329.545455",
1277                             sec   => "0.071808",
1278                             date  => "20081002040002",
1279                             partnum  => "1",
1280                             file  => "3",
1281                             kb    => "6630",
1282                             label => "FullBackup-14"
1283                         },
1284                     ],
1285                     kb      => "6630",
1286                     orig_kb => undef,
1287                 },
1288                 dumper => {
1289                     kps     => "16013.4",
1290                     level   => "1",
1291                     sec     => "0.414",
1292                     status  => "success",
1293                     date    => "20081002040002",
1294                     kb      => "6630",
1295                     orig_kb => "6630"
1296                 },
1297             },
1298           ]
1299         },
1300     },
1301     'check: Amanda::Report::get_dle_info($hostname, $disk)'
1302 );
1303
1304 is_deeply(
1305     $report->get_dle_info( 'hostname.example.org', '/', 'estimate' ),
1306     {
1307         level => "1",
1308         sec   => "39",
1309         nkb   => "80542",
1310         kps   => "1024",
1311         ckb   => "40288",
1312     },
1313     'check: Amanda::Report::get_dle_info($hostname, $disk, $field)'
1314 );
1315
1316 is_deeply(
1317     $report->get_program_info('planner'),
1318     {
1319         time  => "32.689",
1320         start => "20081002040002",
1321     },
1322     'check: Amanda::Report::get_program_info($program)'
1323 );
1324
1325 is(
1326     $report->get_program_info('driver', 'start', 0),
1327     "20081002040002",
1328 'check: Amanda::Report::get_program_info($program, $field, $default) field exists'
1329 );
1330
1331 # dummy check, makes sure default value gets set correctly
1332 is(
1333     $report->get_program_info('planner', 'fake_field', 67),
1334     67,
1335 'check: Amanda::Report::get_program_info($program, $field, $default) default case'
1336 );
1337
1338 is(
1339     $report->get_program_info('planner', 'fake_field', 32),
1340     67,
1341 'check: Amanda::Report::get_program_info($program, $field, $default) default "sticks"'
1342 );
1343
1344 $report->get_program_info('planner', 'fake_field2', 0);
1345
1346 is(
1347     $report->get_program_info('planner', 'fake_field2', 1),
1348     0,
1349 'check: Amanda::Report::get_program_info($program, $field, $default) false default "sticks"'
1350 );
1351
1352 ok($report->get_flag('historical'),
1353     "historical flag processed correctly");
1354
1355 # clean up
1356 unlink($log_filename) if -f $log_filename;