PageRenderTime 55ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

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

#
Perl | 1358 lines | 1275 code | 55 blank | 28 comment | 1 complexity | 97d263ac6b47221e22ab0e83a8563fa4 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. INFO taper Will write new label `TESTCONF01' to new tape
  413. START taper datestamp 20080111 label TESTCONF01 tape 1
  414. PART taper TESTCONF01 1 somebox /lib 20080111 1/-1 0 [sec 0.004722 kb 640 kps 135535.789920]
  415. PART taper TESTCONF01 2 somebox /lib 20080111 2/-1 0 [sec 0.003438 kb 640 kps 186154.741129]
  416. PART taper TESTCONF01 3 somebox /lib 20080111 3/-1 0 [sec 0.002931 kb 640 kps 218355.510065]
  417. PART taper TESTCONF01 4 somebox /lib 20080111 4/-1 0 [sec 0.000578 kb 96 kps 166089.965398]
  418. PARTIAL taper somebox /lib 20080111 4 0 [sec 0.011669 kb 2016 kps 172765.446911]
  419. INFO taper tape TESTCONF01 kb 2016 fm 4 [OK]
  420. INFO taper pid-done 28023
  421. FINISH driver date 20080111 time 2167.581
  422. EOF
  423. $LogfileFlags{taper} = {
  424. got_finish => 1,
  425. normal_run => 1,
  426. results_missing => 0,
  427. dump_failed => 0,
  428. dump_strange => 0
  429. };
  430. $LogfileData{taper} = {
  431. programs => {
  432. planner => {
  433. start => "20080111",
  434. time => "82.721",
  435. },
  436. driver => {
  437. start => "20080111",
  438. start_time => "0.051",
  439. time => "2167.581",
  440. },
  441. dumper => {},
  442. chunker => {},
  443. taper => {
  444. start => '20080111',
  445. notes => [
  446. "Will write new label `TESTCONF01' to new tape",
  447. "tape TESTCONF01 kb 2016 fm 4 [OK]"
  448. ],
  449. tapes => {
  450. TESTCONF01 => {
  451. 'label' => 'TESTCONF01',
  452. time => "0.011669",
  453. date => "20080111",
  454. kb => "2016",
  455. files => "4",
  456. dle => "1",
  457. },
  458. },
  459. tape_labels => ['TESTCONF01'],
  460. },
  461. },
  462. disklist => {
  463. somebox => {
  464. "/lib" => {
  465. estimate => {
  466. level => "0",
  467. sec => "1",
  468. nkb => "2002",
  469. ckb => "480",
  470. kps => "385",
  471. },
  472. dumps => {
  473. '20080111' => [
  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. $LogfileContents{simple} = <<EOF;
  547. DISK planner somebox /lib
  548. START planner date 20080111
  549. START driver date 20080111
  550. STATS driver hostname somebox
  551. STATS driver startup time 0.051
  552. FINISH planner date 20080111 time 82.721
  553. START taper datestamp 20080111 label Conf-001 tape 1
  554. SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
  555. SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
  556. STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
  557. PART taper Conf-001 1 somebox /lib 20080111 1/1 0 [sec 4.813543 kb 419 kps 87.133307]
  558. DONE taper somebox /lib 20080111 1 0 [sec 4.813543 kb 419 kps 87.133307]
  559. FINISH driver date 20080111 time 2167.581
  560. EOF
  561. $LogfileFlags{simple} = {
  562. got_finish => 1,
  563. normal_run => 1,
  564. results_missing => 0,
  565. dump_failed => 0,
  566. dump_strange => 0
  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. dumps => {
  607. '20080111' => [
  608. {
  609. dumper => {
  610. status => "success",
  611. date => "20080111",
  612. level => "0",
  613. sec => "0.209",
  614. kb => "1970",
  615. kps => "9382.2",
  616. orig_kb => "1970",
  617. },
  618. taper => {
  619. status => "done",
  620. parts => [
  621. {
  622. label => "Conf-001",
  623. date => "20080111",
  624. file => "1",
  625. partnum => "1",
  626. sec => "4.813543",
  627. kb => "419",
  628. kps => "87.133307",
  629. },
  630. ],
  631. level => "0",
  632. sec => "4.813543",
  633. kb => "419",
  634. kps => "87.133307",
  635. orig_kb => undef,
  636. },
  637. chunker => {
  638. status => "success",
  639. date => "20080111",
  640. level => "0",
  641. sec => "0.305",
  642. kb => "420",
  643. kps => "1478.7",
  644. },
  645. },
  646. ]
  647. },
  648. },
  649. },
  650. },
  651. };
  652. $LogfileContents{fullExample} = <<EOF;
  653. INFO amdump amdump pid 9291
  654. INFO driver driver pid 9313
  655. INFO planner planner pid 9312
  656. DISK planner hostname.example.org /
  657. DISK planner hostname.example.org /somedir2
  658. DISK planner hostname.example.org /moreapps
  659. DISK planner hostname.example.org /apps
  660. DISK planner hostname.example.org /somedir
  661. START planner date 20081002040002
  662. START driver date 20081002040002
  663. STATS driver hostname hostname.example.org
  664. STATS driver startup time 0.043
  665. INFO dumper dumper pid 9316
  666. INFO dumper dumper pid 9315
  667. INFO dumper dumper pid 9318
  668. INFO dumper dumper pid 9317
  669. INFO taper taper pid 9314
  670. FINISH planner date 20081002040002 time 32.689
  671. INFO planner pid-done 9312
  672. INFO chunker chunker pid 11110
  673. INFO dumper gzip pid 11129
  674. SUCCESS dumper hostname.example.org /somedir 20081002040002 1 [sec 0.039 kb 10 kps 250.4 orig-kb 10]
  675. SUCCESS chunker hostname.example.org /somedir 20081002040002 1 [sec 5.070 kb 10 kps 8.3]
  676. INFO chunker pid-done 11110
  677. STATS driver estimate hostname.example.org /somedir 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 1024]
  678. INFO dumper pid-done 11129
  679. START taper datestamp 20081002040002 label FullBackup-14 tape 1
  680. PART taper FullBackup-14 1 hostname.example.org /somedir 20081002040002 1/1 1 [sec 0.002776 kb 10 kps 3602.305476]
  681. DONE taper hostname.example.org /somedir 20081002040002 1 1 [sec 0.002776 kb 10 kps 3602.305476]
  682. INFO chunker chunker pid 11157
  683. INFO dumper gzip pid 11232
  684. SUCCESS dumper hostname.example.org /moreapps 20081002040002 1 [sec 0.039 kb 10 kps 250.8 orig-kb 10]
  685. INFO dumper pid-done 11232
  686. SUCCESS chunker hostname.example.org /moreapps 20081002040002 1 [sec 5.058 kb 10 kps 8.3]
  687. INFO chunker pid-done 11157
  688. STATS driver estimate hostname.example.org /moreapps 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 149050]
  689. PART taper FullBackup-14 2 hostname.example.org /moreapps 20081002040002 1/1 1 [sec 0.002656 kb 10 kps 3765.060241]
  690. DONE taper hostname.example.org /moreapps 20081002040002 1 1 [sec 0.002656 kb 10 kps 3765.060241]
  691. INFO chunker chunker pid 11700
  692. INFO dumper gzip pid 11723
  693. SUCCESS dumper hostname.example.org /apps 20081002040002 1 [sec 0.414 kb 6630 kps 16013.4 orig-kb 6630]
  694. SUCCESS chunker hostname.example.org /apps 20081002040002 1 [sec 5.432 kb 6630 kps 1226.3]
  695. INFO chunker pid-done 11700
  696. INFO dumper pid-done 11723
  697. STATS driver estimate hostname.example.org /apps 20081002040002 1 [sec 6 nkb 6662 ckb 6688 kps 1024]
  698. PART taper FullBackup-14 3 hostname.example.org /apps 20081002040002 1/1 1 [sec 0.071808 kb 6630 kps 92329.545455]
  699. DONE taper hostname.example.org /apps 20081002040002 1 1 [sec 0.071808 kb 6630 kps 92329.545455]
  700. INFO chunker chunker pid 11792
  701. INFO dumper gzip pid 11816
  702. SUCCESS dumper hostname.example.org / 20081002040002 1 [sec 3.028 kb 8393 kps 2771.1 orig-kb 82380]
  703. SUCCESS chunker hostname.example.org / 20081002040002 1 [sec 8.047 kb 8393 kps 1047.0]
  704. INFO chunker pid-done 11792
  705. STATS driver estimate hostname.example.org / 20081002040002 1 [sec 39 nkb 80542 ckb 40288 kps 1024]
  706. INFO dumper pid-done 11816
  707. PART taper FullBackup-14 4 hostname.example.org / 20081002040002 1/1 1 [sec 0.088934 kb 8392 kps 94368.875374]
  708. DONE taper hostname.example.org / 20081002040002 1 1 [sec 0.088934 kb 8392 kps 94368.875374]
  709. INFO dumper gzip pid 11861
  710. STRANGE dumper hostname.example.org /somedir2 0 [sec 372.700 kb 28776940 kps 77212.0 orig-kb 28776940]
  711. ! strange data
  712. PART taper FullBackup-14 5 hostname.example.org /somedir2 20081002040002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
  713. DONE taper hostname.example.org /somedir2 20081002040002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
  714. INFO dumper pid-done 11861
  715. STATS driver estimate hostname.example.org /somedir2 20081002040002 0 [sec 28776940 nkb 28776972 ckb 28776992 kps 1]
  716. PART taper FullBackup-14 6 hostname.example.org /somedir2 20081002030002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
  717. DONE taper hostname.example.org /somedir2 20081002030002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
  718. INFO dumper pid-done 9315
  719. INFO dumper pid-done 9317
  720. INFO dumper pid-done 9316
  721. INFO dumper pid-done 9318
  722. INFO taper pid-done 9314
  723. FINISH driver date 20081002040002 time 663.574
  724. INFO driver pid-done 9313
  725. EOF
  726. $LogfileFlags{fullExample} = {
  727. got_finish => 1,
  728. normal_run => 1,
  729. results_missing => 0,
  730. dump_failed => 0,
  731. dump_strange => 1
  732. };
  733. $LogfileData{fullExample} = {
  734. programs => {
  735. amdump => {},
  736. dumper => {},
  737. driver => {
  738. time => "663.574",
  739. start => "20081002040002",
  740. start_time => "0.043",
  741. },
  742. planner => {
  743. time => "32.689",
  744. start => "20081002040002",
  745. },
  746. chunker => {},
  747. taper => {
  748. start => '20081002040002',
  749. tapes => {
  750. "FullBackup-14" => {
  751. 'label' => 'FullBackup-14',
  752. 'files' => 6,
  753. 'time' => '740.930972',
  754. 'date' => '20081002040002',
  755. 'kb' => 57568922,
  756. 'dle' => 6
  757. },
  758. },
  759. tape_labels => ["FullBackup-14"],
  760. },
  761. },
  762. disklist => {
  763. "hostname.example.org" => {
  764. "/" => {
  765. estimate => {
  766. level => "1",
  767. sec => "39",
  768. nkb => "80542",
  769. kps => "1024",
  770. ckb => "40288",
  771. },
  772. dumps => {
  773. '20081002040002' => [
  774. {
  775. chunker => {
  776. status => "success",
  777. date => "20081002040002",
  778. kps => "1047.0",
  779. level => "1",
  780. sec => "8.047",
  781. kb => "8393"
  782. },
  783. taper => {
  784. kps => '94368.875374',
  785. level => '1',
  786. sec => '0.088934',
  787. status => 'done',
  788. parts => [
  789. {
  790. kps => "94368.875374",
  791. sec => "0.088934",
  792. date => "20081002040002",
  793. partnum => "1",
  794. file => "4",
  795. kb => "8392",
  796. label => "FullBackup-14"
  797. },
  798. ],
  799. kb => '8392',
  800. orig_kb => undef
  801. },
  802. dumper => {
  803. kps => "2771.1",
  804. level => "1",
  805. sec => "3.028",
  806. status => "success",
  807. date => "20081002040002",
  808. kb => "8393",
  809. orig_kb => "82380"
  810. },
  811. },
  812. ]
  813. },
  814. },
  815. "/somedir2" => {
  816. estimate => {
  817. nkb => "28776972",
  818. kps => "1",
  819. ckb => "28776992",
  820. level => "0",
  821. sec => "28776940"
  822. },
  823. dumps => {
  824. "20081002040002" => [
  825. {
  826. dumper => {
  827. kps => "77212.0",
  828. level => "0",
  829. sec => "372.700",
  830. status => "strange",
  831. #date => "20081002040002",
  832. kb => "28776940",
  833. orig_kb => "28776940",
  834. nb_stranges => 1,
  835. stranges => [ "! strange data" ],
  836. },
  837. taper => {
  838. kps => "77695.214669",
  839. level => "0",
  840. sec => "370.382399",
  841. status => "done",
  842. parts => [
  843. {
  844. label => 'FullBackup-14',
  845. date => '20081002040002',
  846. kps => '77695.214669',
  847. sec => '370.382399',
  848. partnum => '1',
  849. file => '5',
  850. kb => '28776940',
  851. }
  852. ],
  853. kb => "28776940",
  854. orig_kb => undef
  855. },
  856. },
  857. ],
  858. "20081002030002" => [
  859. {
  860. taper => {
  861. kps => "77695.214669",
  862. level => "0",
  863. sec => "370.382399",
  864. status => "done",
  865. parts => [
  866. {
  867. label => 'FullBackup-14',
  868. date => '20081002030002',
  869. kps => '77695.214669',
  870. sec => '370.382399',
  871. partnum => '1',
  872. file => '6',
  873. kb => '28776940',
  874. }
  875. ],
  876. kb => "28776940",
  877. orig_kb => undef
  878. },
  879. },
  880. ]
  881. },
  882. },
  883. "/moreapps" => {
  884. estimate => {
  885. nkb => "42",
  886. kps => "149050",
  887. ckb => "64",
  888. level => "1",
  889. sec => "0"
  890. },
  891. dumps => {
  892. '20081002040002' => [
  893. {
  894. 'chunker' => {
  895. 'kps' => '8.3',
  896. 'level' => '1',
  897. 'sec' => '5.058',
  898. 'status' => 'success',
  899. 'date' => '20081002040002',
  900. 'kb' => '10'
  901. },
  902. 'taper' => {
  903. 'kps' => '3765.060241',
  904. 'level' => '1',
  905. 'sec' => '0.002656',
  906. 'status' => 'done',
  907. 'parts' => [
  908. {
  909. kps => "3765.060241",
  910. sec => "0.002656",
  911. date => "20081002040002",
  912. partnum => "1",
  913. file => "2",
  914. kb => "10",
  915. label => "FullBackup-14"
  916. },
  917. ],
  918. 'kb' => '10',
  919. orig_kb => undef
  920. },
  921. 'dumper' => {
  922. 'kps' => '250.8',
  923. 'level' => '1',
  924. 'sec' => '0.039',
  925. 'status' => 'success',
  926. 'date' => '20081002040002',
  927. 'kb' => '10',
  928. orig_kb => '10'
  929. },
  930. },
  931. ]
  932. },
  933. },
  934. "/apps" => {
  935. estimate => {
  936. nkb => "6662",
  937. kps => "1024",
  938. ckb => "6688",
  939. level => "1",
  940. sec => "6"
  941. },
  942. dumps => {
  943. '20081002040002' => [
  944. {
  945. chunker => {
  946. kps => "1226.3",
  947. level => "1",
  948. sec => "5.432",
  949. status => "success",
  950. date => "20081002040002",
  951. kb => "6630"
  952. },
  953. taper => {
  954. kps => "92329.545455",
  955. level => "1",
  956. sec => "0.071808",
  957. status => "done",
  958. parts => [
  959. {
  960. kps => "92329.545455",
  961. sec => "0.071808",
  962. date => "20081002040002",
  963. partnum => "1",
  964. file => "3",
  965. kb => "6630",
  966. label => "FullBackup-14"
  967. },
  968. ],
  969. kb => "6630",
  970. orig_kb => undef,
  971. },
  972. dumper => {
  973. kps => "16013.4",
  974. level => "1",
  975. sec => "0.414",
  976. status => "success",
  977. date => "20081002040002",
  978. kb => "6630",
  979. orig_kb => "6630"
  980. },
  981. },
  982. ]
  983. },
  984. },
  985. "/somedir" => {
  986. estimate => {
  987. nkb => "42",
  988. kps => "1024",
  989. ckb => "64",
  990. level => "1",
  991. sec => "0"
  992. },
  993. dumps => {
  994. "20081002040002" => [
  995. {
  996. chunker => {
  997. kps => "8.3",
  998. level => "1",
  999. sec => "5.070",
  1000. status => "success",
  1001. date => "20081002040002",
  1002. kb => "10",
  1003. },
  1004. taper => {
  1005. kps => "3602.305476",
  1006. level => "1",
  1007. sec => "0.002776",
  1008. status => "done",
  1009. parts => [
  1010. {
  1011. kps => "3602.305476",
  1012. sec => "0.002776",
  1013. date => "20081002040002",
  1014. partnum => "1",
  1015. file => "1",
  1016. kb => "10",
  1017. label => "FullBackup-14",
  1018. },
  1019. ],
  1020. kb => "10",
  1021. orig_kb => undef
  1022. },
  1023. dumper => {
  1024. kps => "250.4",
  1025. level => "1",
  1026. sec => "0.039",
  1027. status => "success",
  1028. date => "20081002040002",
  1029. kb => "10",
  1030. orig_kb => "10",
  1031. },
  1032. },
  1033. ]
  1034. },
  1035. },
  1036. },
  1037. },
  1038. };
  1039. $LogfileContents{amflushExample} = <<EOF;
  1040. INFO amflush amflush pid 26036
  1041. DISK amflush localhost /backups/oracle
  1042. DISK amflush localhost /backups/mysql
  1043. DISK amflush localhost /usr/local/bin
  1044. DISK amflush localhost /etc
  1045. DISK amflush localhost /home
  1046. START amflush date 20090622075550
  1047. INFO driver driver pid 26076
  1048. START driver date 20090622075550
  1049. STATS driver hostname localhost
  1050. STATS driver startup time 0.011
  1051. INFO taper taper pid 26077
  1052. START taper datestamp 20090622075550 label DailyTapeDataSet-017 tape 1
  1053. PART taper DailyTapeDataSet-017 1 localhost /etc 20090620020002 1/1 1 [sec 2.504314 kb 36980 kps 14766.518895]
  1054. DONE taper localhost /etc 20090620020002 1 1 [sec 2.504314 kb 36980 kps 14766.518895]
  1055. PART taper DailyTapeDataSet-017 2 localhost /usr/local/bin 20090620020002 1/1 1 [sec 1.675693 kb 309 kps 184.632684]
  1056. DONE taper localhost /usr/local/bin 20090620020002 1 1 [sec 1.675693 kb 309 kps 184.632684]
  1057. INFO taper pid-done 26077
  1058. FINISH driver date 20090622075550 time 177.708
  1059. INFO driver pid-done 26076
  1060. INFO amflush pid-done 26075
  1061. EOF
  1062. $LogfileFlags{amflushExample} = {
  1063. got_finish => 1,
  1064. amflush_run => 1,
  1065. results_missing => 0,
  1066. dump_failed => 0,
  1067. dump_strange => 0
  1068. };
  1069. $LogfileData{amflushExample} = {
  1070. 'programs' => {
  1071. 'taper' => {
  1072. 'start' => '20090622075550',
  1073. 'tapes' => {
  1074. 'DailyTapeDataSet-017' => {
  1075. 'label' => 'DailyTapeDataSet-017',
  1076. 'files' => 2,
  1077. 'time' => '4.180007',
  1078. 'date' => '20090622075550',
  1079. 'kb' => 37289,
  1080. 'dle' => 2
  1081. },
  1082. },
  1083. tape_labels => ["DailyTapeDataSet-017"],
  1084. },
  1085. 'amflush' => { 'start' => '20090622075550' },
  1086. 'driver' => {
  1087. 'time' => '177.708',
  1088. 'start_time' => '0.011',
  1089. 'start' => '20090622075550'
  1090. },
  1091. },
  1092. 'disklist' => {
  1093. 'localhost' => {
  1094. '/etc' => {
  1095. estimate => undef,
  1096. dumps => {
  1097. '20090620020002' => [
  1098. {
  1099. 'taper' => {
  1100. 'kps' => '14766.518895',
  1101. 'level' => '1',
  1102. 'sec' => '2.504314',
  1103. 'status' => 'done',
  1104. 'parts' => [
  1105. {
  1106. 'kps' => '14766.518895',
  1107. 'sec' => '2.504314',
  1108. 'date' => '20090620020002',
  1109. 'partnum' => '1',
  1110. 'file' => '1',
  1111. 'kb' => '36980',
  1112. 'label' => 'DailyTapeDataSet-017'
  1113. },
  1114. ],
  1115. 'kb' => '36980',
  1116. orig_kb => undef
  1117. },
  1118. },
  1119. ]
  1120. },
  1121. },
  1122. '/backups/oracle' => {
  1123. estimate => undef,
  1124. dumps => {},
  1125. },
  1126. '/usr/local/bin' => {
  1127. estimate => undef,
  1128. dumps => {
  1129. '20090620020002' => [
  1130. {
  1131. 'taper' => {
  1132. 'kps' => '184.632684',
  1133. 'level' => '1',
  1134. 'sec' => '1.675693',
  1135. 'status' => 'done',
  1136. 'parts' => [
  1137. {
  1138. 'kps' => '184.632684',
  1139. 'sec' => '1.675693',
  1140. 'date' => '20090620020002',
  1141. 'partnum' => '1',
  1142. 'file' => '2',
  1143. 'kb' => '309',
  1144. 'label' => 'DailyTapeDataSet-017'
  1145. },
  1146. ],
  1147. 'kb' => '309',
  1148. orig_kb => undef
  1149. },
  1150. }]
  1151. },
  1152. },
  1153. '/home' => {
  1154. estimate => undef,
  1155. dumps => {},
  1156. },
  1157. '/backups/mysql' => {
  1158. estimate => undef,
  1159. dumps => {},
  1160. },
  1161. },
  1162. },
  1163. };
  1164. foreach my $test ( keys %LogfileContents ) {
  1165. unless ( exists $LogfileData{$test} ) {
  1166. die "error: $test present in \%LogfileContents but not \%LogfileData\n";
  1167. }
  1168. my $report =
  1169. Amanda::Report->new( write_logfile( $LogfileContents{$test} ), 1 );
  1170. is_deeply( $report->{data}, $LogfileData{$test}, "data check: $test" );
  1171. map {
  1172. cmp_ok(
  1173. $report->get_flag($_), "==",
  1174. $LogfileFlags{$test}->{$_},
  1175. "flag test: $_, $test"
  1176. );
  1177. } keys %{ $LogfileFlags{$test} };
  1178. }
  1179. #
  1180. # Test the report API
  1181. #
  1182. my $report =
  1183. Amanda::Report->new( write_logfile( $LogfileContents{fullExample} ), 1 );
  1184. is_deeply( [ $report->get_hosts() ],
  1185. ['hostname.example.org'], 'check: Amanda::Report::get_hosts()' );
  1186. is_deeply(
  1187. [ sort { $a cmp $b } $report->get_disks('hostname.example.org') ],
  1188. [ '/', '/apps', '/moreapps', '/somedir', '/somedir2' ],
  1189. 'check: Amanda::Report::get_disks($hostname)'
  1190. );
  1191. is_deeply(
  1192. [ sort { $a->[1] cmp $b->[1] } $report->get_dles() ],
  1193. [
  1194. [ 'hostname.example.org', '/' ],
  1195. [ 'hostname.example.org', '/apps' ],
  1196. [ 'hostname.example.org', '/moreapps' ],
  1197. [ 'hostname.example.org', '/somedir' ],
  1198. [ 'hostname.example.org', '/somedir2' ],
  1199. ],
  1200. 'check: Amanda::Report::get_dles()'
  1201. );
  1202. is_deeply(
  1203. $report->get_dle_info("hostname.example.org", "/apps"),
  1204. {
  1205. estimate => {
  1206. nkb => "6662",
  1207. kps => "1024",
  1208. ckb => "6688",
  1209. level => "1",
  1210. sec => "6"
  1211. },
  1212. dumps => {
  1213. '20081002040002' => [
  1214. {
  1215. chunker => {
  1216. kps => "1226.3",
  1217. level => "1",
  1218. sec => "5.432",
  1219. status => "success",
  1220. date => "20081002040002",
  1221. kb => "6630"
  1222. },
  1223. taper => {
  1224. kps => "92329.545455",
  1225. level => "1",
  1226. sec => "0.071808",
  1227. status => "done",
  1228. parts => [
  1229. {
  1230. kps => "92329.545455",
  1231. sec => "0.071808",
  1232. date => "20081002040002",
  1233. partnum => "1",
  1234. file => "3",
  1235. kb => "6630",
  1236. label => "FullBackup-14"
  1237. },
  1238. ],
  1239. kb => "6630",
  1240. orig_kb => undef,
  1241. },
  1242. dumper => {
  1243. kps => "16013.4",
  1244. level => "1",
  1245. sec => "0.414",
  1246. status => "success",
  1247. date => "20081002040002",
  1248. kb => "6630",
  1249. orig_kb => "6630"
  1250. },
  1251. },
  1252. ]
  1253. },
  1254. },
  1255. 'check: Amanda::Report::get_dle_info($hostname, $disk)'
  1256. );
  1257. is_deeply(
  1258. $report->get_dle_info( 'hostname.example.org', '/', 'estimate' ),
  1259. {
  1260. level => "1",
  1261. sec => "39",
  1262. nkb => "80542",
  1263. kps => "1024",
  1264. ckb => "40288",
  1265. },
  1266. 'check: Amanda::Report::get_dle_info($hostname, $disk, $field)'
  1267. );
  1268. is_deeply(
  1269. $report->get_program_info('planner'),
  1270. {
  1271. time => "32.689",
  1272. start => "20081002040002",
  1273. },
  1274. 'check: Amanda::Report::get_program_info($program)'
  1275. );
  1276. is(
  1277. $report->get_program_info('driver', 'start', 0),
  1278. "20081002040002",
  1279. 'check: Amanda::Report::get_program_info($program, $field, $default) field exists'
  1280. );
  1281. # dummy check, makes sure default value gets set correctly
  1282. is(
  1283. $report->get_program_info('planner', 'fake_field', 67),
  1284. 67,
  1285. 'check: Amanda::Report::get_program_info($program, $field, $default) default case'
  1286. );
  1287. is(
  1288. $report->get_program_info('planner', 'fake_field', 32),
  1289. 67,
  1290. 'check: Amanda::Report::get_program_info($program, $field, $default) default "sticks"'
  1291. );
  1292. $report->get_program_info('planner', 'fake_field2', 0);
  1293. is(
  1294. $report->get_program_info('planner', 'fake_field2', 1),
  1295. 0,
  1296. 'check: Amanda::Report::get_program_info($program, $field, $default) false default "sticks"'
  1297. );
  1298. ok($report->get_flag('historical'),
  1299. "historical flag processed correctly");
  1300. # clean up
  1301. unlink($log_filename) if -f $log_filename;