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

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

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