PageRenderTime 78ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/amanda/tags/3_3_0beta1/installcheck/Amanda_Report.pl

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