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