PageRenderTime 66ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 0ms

/installcheck/Amanda_Report.pl

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