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