#!/usr/local/bin/perl # Show the Bacula main menu require './bacula-backup-lib.pl'; $hsl = &help_search_link("bacula", "man", "doc", "google"); # Make sure it is installed $err = &check_bacula(); if ($err) { &ui_print_header(undef, $module_info{'desc'}, "", "intro", 1, 1, 0, $hsl); print &ui_config_link('index_echeck', [ $err, undef ]),"

\n"; &ui_print_footer("/", $text{'index'}); exit; } if (&has_bacula_dir()) { # Test DB connection eval { $dbh = &connect_to_database(); }; if ($@) { $err = $@; &ui_print_header(undef, $module_info{'desc'}, "", "intro", 1, 1, 0, $hsl); print &ui_config_link('index_edb', [ $err, undef ]),"

\n"; &ui_print_footer("/", $text{'index'}); exit; } $dbh->disconnect(); } # Test node group DB if (&has_bacula_dir() && &has_node_groups()) { $err = &check_node_groups(); if ($err) { &ui_print_header(undef, $module_info{'desc'}, "", "intro", 1, 1, 0, $hsl); print &ui_config_link('index_eng', [ $err, undef ]),"

\n"; &ui_print_footer("/", $text{'index'}); exit; } } # Get the Bacula version, and check it $ver = &get_bacula_version(); &ui_print_header(undef, $module_info{'desc'}, "", "intro", 1, 1, 0, $hsl, undef, undef, ($ver ? &text('index_version', $ver)."
" : undef). &text('index_ocmin', 'images/ocmin.gif', 'http://www.linmin.com/')); if ($ver && $ver < 1.36) { print &text('index_eversion', 1.36, $ver),"

\n"; &ui_print_footer("/", $text{'index'}); exit; } # Make sure bconsole works if (&is_bacula_running("bacula-dir")) { # Check hostname in console config $conconf = &get_bconsole_config(); $condir = &find("Director", $conconf); $conaddr = &find_value("Address", $condir->{'members'}); if (!&to_ipaddress($conaddr) && !&to_ip6address($conaddr)) { # Offer to fix hostname print &text('index_econsole2', "$console_cmd", "$conaddr"),"

\n"; print &ui_form_start("fixaddr.cgi"); print &ui_form_end([ [ "fix", $text{'index_fixaddr'} ] ]); &ui_print_footer("/", $text{'index'}); exit; } # Test run bconsole local $status; eval { local $h = &open_console(); $status = &console_cmd($h, "version"); &close_console($h); }; if ($status !~ /Version/i) { # Nope .. check if there is a password mismatch we can fix print &text('index_econsole', "$console_cmd", "$config{'bacula_dir'}/bconsole.conf"),"

\n"; $dirconf = &get_director_config(); $dirdir = &find("Director", $dirconf); $dirpass = &find_value("Password", $dirdir->{'members'}); $conpass = &find_value("Password", $condir->{'members'}); if ($dirpass && $conpass && $dirpass ne $conpass) { # Can fix! print &ui_form_start("fixpass.cgi"); print &ui_form_end([ [ "fix", $text{'index_fixpass'} ] ]); } &ui_print_footer("/", $text{'index'}); exit; } } # Show director, storage and file daemon icons if (&has_bacula_dir()) { print &ui_subheading($text{'index_dir'}); @pages = ( "director", "clients", "filesets", "schedules", "jobs", "pools", "storages" ); &show_icons_from_pages(\@pages); } if (&has_bacula_sd()) { print &ui_subheading($text{'index_sd'}); @pages = ( "storagec", "devices" ); if (!&has_bacula_dir() || $config{'showdirs'}) { push(@pages, "sdirectors"); } &show_icons_from_pages(\@pages); } if (&has_bacula_fd()) { print &ui_subheading($text{'index_fd'}); @pages = ( "file" ); if (!&has_bacula_dir() || $config{'showdirs'}) { push(@pages, "fdirectors"); } &show_icons_from_pages(\@pages); } # Show icons for node group operations if (&has_bacula_dir() && &has_node_groups()) { print &ui_subheading($text{'index_groups'}); @pages = ( "groups", "gjobs", "gbackup", "sync" ); @links = map { "list_${_}.cgi" } @pages; @titles = map { $text{"${_}_title"} } @pages; @icons = map { "images/${_}.gif" } @pages; &icons_table(\@links, \@titles, \@icons); } if (&has_bacula_dir()) { # Show icons for actions print &ui_hr(); print &ui_subheading($text{'index_actions'}); if (&is_bacula_running("bacula-dir")) { @actions = ( "backup", "dirstatus", "clientstatus", "storagestatus", "label", "poolstatus", "mount", "restore" ); @links = map { "${_}_form.cgi" } @actions; @titles = map { $text{"${_}_title"} } @actions; @icons = map { "images/${_}.gif" } @actions; &icons_table(\@links, \@titles, \@icons); } else { print "$text{'index_notrun'}

\n"; } } print &ui_hr(); # See what processes are running print "$text{'index_status'}\n"; foreach $p (@bacula_processes) { print " | \n" if ($p ne $bacula_processes[0]); print $text{'proc_'.$p}," - "; if (&is_bacula_running($p)) { print "",$text{'index_up'}, "\n"; $pcount++; } else { print "",$text{'index_down'}, "\n"; } } print "

\n"; print &ui_buttons_start(); if ($pcount > 0) { if (!$config{'apply'}) { print &ui_buttons_row("apply.cgi", $text{'index_apply'}, $text{'index_applydesc'}); } if (&has_bacula_dir()) { # Only show restart button if we are running the director, as # for others the apply does a restart print &ui_buttons_row("restart.cgi", $text{'index_restart'}, $text{'index_restartdesc'}); } print &ui_buttons_row("stop.cgi", $text{'index_stop'}, $text{'index_stopdesc'}); } if ($pcount < scalar(@bacula_processes)) { print &ui_buttons_row("start.cgi", $text{'index_start'}, $text{'index_startdesc'}); } # See what is started at boot if (&foreign_installed("init")) { &foreign_require("init", "init-lib.pl"); $status = &init::action_status($bacula_inits[0]); if ($status) { print &ui_buttons_row("bootup.cgi", $text{'index_boot'}, $text{'index_bootdesc'}, undef, &ui_yesno_radio("boot", $status == 2 ? 1 : 0)); } } print &ui_buttons_end(); &ui_print_footer("/", $text{'index'}); sub show_icons_from_pages { local ($pages) = @_; local @links = map { $_ eq "director" || $_ eq "file" || $_ eq "storagec" ? "edit_${_}.cgi" : "list_${_}.cgi" } @$pages; local @titles = map { $text{"${_}_title"} } @$pages; local @icons = map { "images/${_}.gif" } @$pages; &icons_table(\@links, \@titles, \@icons); }