diff --git a/src/etc/config.xml.sample b/src/etc/config.xml.sample index 16960f0f6..0d386ee18 100644 --- a/src/etc/config.xml.sample +++ b/src/etc/config.xml.sample @@ -457,6 +457,6 @@ - system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,gmirror_status-container:col1:close,installed_packages-container:col1:close,interface_statistics-container:col1:close,interface_list-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close + system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,interface_statistics-container:col1:close,interface_list-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close diff --git a/src/etc/inc/gmirror.inc b/src/etc/inc/gmirror.inc deleted file mode 100644 index a31c3b36e..000000000 --- a/src/etc/inc/gmirror.inc +++ /dev/null @@ -1,161 +0,0 @@ - 0) { - /* Loop through gmirror status output. */ - foreach ($status as $line) { - /* Split the line by whitespace */ - $all = preg_split("/[\s\t]+/", trim($line), 3); - if (count($all) == 3) { - /* If there are three items on a line, it is mirror name, status, and component */ - $currentmirror = basename($all[0]); - $mirrors[$currentmirror]['name'] = basename($all[0]); - $mirrors[$currentmirror]['status'] = $all[1]; - if (!is_array($mirrors[$currentmirror]['components'])) - $mirrors[$currentmirror]['components'] = array(); - $mirrors[$currentmirror]['components'][] = $all[2]; - } - } - } - /* Return an hash of mirrors and components */ - return $mirrors; -} - - -/* List all disks in the system (potential gmirror targets) */ -function gmirror_get_disks() { - $disklist = ""; - /* Get a list of disks in a scriptable way, exclude optical drives */ - exec("/sbin/geom disk status -s | /usr/bin/grep -v '[[:blank:]]*cd[[:digit:]]*' | /usr/bin/awk '{print $1;}'", $disklist); - return $disklist; -} - -/* List all potential gmirror consumers */ -function gmirror_get_unused_consumers() { - $consumerlist = ""; - /* Get a list of consumers, exclude existing mirrors and diskid entries */ - exec("/sbin/geom part status -s | /usr/bin/egrep -v '(mirror|diskid)' | /usr/bin/awk '{print $1, $3;}'", $consumerlist); - $all_consumers = array(); - foreach ($consumerlist as $cl) { - $parts = explode(" ", $cl); - foreach ($parts as $part) - $all_consumers[] = $part; - } - return $all_consumers; -} - -/* List all existing geom mirrors */ -function gmirror_get_mirrors() { - $mirrorlist = ""; - exec("/sbin/gmirror list | /usr/bin/grep '^Geom name:' | /usr/bin/awk '{print $3;}'", $mirrorlist); - return $mirrorlist; -} - - -/* List all consumers for a given mirror */ -function gmirror_get_consumers_in_mirror($mirror) { - if (!is_valid_mirror($mirror)) - return array(); - - $consumers = array(); - exec("/sbin/gmirror status -s " . escapeshellarg($mirror) . " | /usr/bin/awk '{print $3;}'", $consumers); - return $consumers; -} - -/* Test if a mirror exists */ -function is_valid_mirror($mirror) { - $mirrors = gmirror_get_mirrors(); - return in_array($mirror, $mirrors); -} - -/* Test if a disk is valid/exists */ -function is_valid_disk($disk) { - $adisks = gmirror_get_disks(); - return in_array(basename($disk), $adisks); -} - -/* Test if a consumer is valid and in use in a mirror */ -function is_consumer_used($consumer) { - $found = false; - $mirrors = gmirror_get_mirrors(); - foreach ($mirrors as $mirror) { - $consumers = gmirror_get_consumers_in_mirror($mirror); - if (in_array($consumer, $consumers)) - return true; - } - return false; -} - -/* Test if a consumer is valid and not in use */ -function is_consumer_unused($consumer) { - $consumers = gmirror_get_unused_consumers(); - return in_array($consumer, $consumers); -} - -/* Test if a consumer is valid (either a disk or partition) */ -function is_valid_consumer($consumer) { - return (is_consumer_unused($consumer) || is_consumer_used($consumer)); -} - - -/* Show all metadata on the physical consumer */ -function gmirror_get_consumer_metadata($consumer) { - if (!is_valid_consumer($consumer)) - return array(); - $output = ""; - exec("/sbin/gmirror dump " . escapeshellarg($consumer), $output); - return array_map('trim', $output); -} - -/* Return a list of all potential consumers on a disk with sizes. The geom part - list output is a little odd, we can't get the output for just the disk, if the disk contains - slices those get output also. */ -function gmirror_get_all_unused_consumer_sizes_on_disk($disk) { - if (!is_valid_disk($disk) || !is_consumer_unused($disk)) - return array(); - $output = ""; - exec("/sbin/geom part list " . escapeshellarg($disk) . " | /usr/bin/egrep '(Name:|Mediasize:)' | /usr/bin/cut -c4- | /usr/bin/sed -l -e 'N;s/\\nMediasize://;P;D;' | /usr/bin/cut -c7-", $output); - $disk_contents = array(); - foreach ($output as $line) { - list($name, $size, $humansize) = explode(" ", $line, 3); - $consumer = array(); - $consumer['name'] = $name; - $consumer['size'] = $size; - $consumer['humansize'] = $humansize; - $disk_contents[] = $consumer; - } - return $disk_contents; -} - -?> diff --git a/src/etc/rc b/src/etc/rc index 6bbf5f43e..5ff133636 100755 --- a/src/etc/rc +++ b/src/etc/rc @@ -232,15 +232,6 @@ minicron 3600 /var/run/expire_accounts.pid /usr/local/etc/rc.expireaccounts # Start alias url updater every 24 hours minicron 86400 /var/run/update_alias_url_data.pid /usr/local/etc/rc.update_alias_url_data -# Check for GEOM mirrors -GMIRROR_STATUS=`/sbin/gmirror status` -if [ "${GMIRROR_STATUS}" != "" ]; then - # Using a flag file at bootup saves an expensive exec/check on each page load. - touch /var/run/gmirror_active - # Setup monitoring/notifications - minicron 60 /var/run/gmirror_status_check.pid /usr/local/sbin/gmirror_status_check.php -fi - /usr/local/sbin/beep.sh start /usr/local/etc/rc.initial.banner diff --git a/src/sbin/gmirror_status_check.php b/src/sbin/gmirror_status_check.php deleted file mode 100644 index 8196b58ae..000000000 --- a/src/sbin/gmirror_status_check.php +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/local/bin/php - 0) { - // Check list of current mirrors vs old mirrors, notify if one has appeared/disappeared - if ($mirror_list != $previous_mirror_list) { - $notices[] = sprintf(gettext("List of mirrors changed. Old: (%s) New: (%s)"), implode(", ", $previous_mirror_list), implode(", ", $mirror_list)); - } - - // For each mirror, check the mirror status, notify if changed - foreach ($mirror_list as $mirror) { - if (is_array($previous_mirror_status[$mirror])) { - // Notify if the status changed - if ($mirror_status[$mirror]['status'] != $previous_mirror_status[$mirror]['status']) { - $notices[] = sprintf(gettext("Mirror %s status changed from %s to %s."), $mirror, $previous_mirror_status[$mirror]['status'], $mirror_status[$mirror]['status']); - } - // Notify if the drive count changed - if (count($mirror_status[$mirror]['components']) != count($previous_mirror_status[$mirror]['components'])) { - // Notify if the consumer count changed. - $notices[] = sprintf(gettext("Mirror %s consumer count changed from %d to %d."), $mirror, count($previous_mirror_status[$mirror]['components']), count($mirror_status[$mirror]['components'])); - } - if (strtoupper($mirror_status[$mirror]['status']) == "DEGRADED") { - // Check the drive status as it may be different. - asort($mirror_status[$mirror]['components']); - asort($previous_mirror_status[$mirror]['components']); - if ($mirror_status[$mirror]['components'] != $previous_mirror_status[$mirror]['components']) { - $notices[] = sprintf( - gettext("Mirror %s drive status changed. Old: (%s) New: (%s)"), - $mirror, - implode(", ", $previous_mirror_status[$mirror]['components']), - implode(", ", $mirror_status[$mirror]['components']) - ); - } - } - } - } - } -} -if (count($notices)) { - file_notice("gmirror", implode("\n ", $notices), "GEOM Mirror Status Change", 1); -} -// Write out current status if changed -if ($mirror_status != $previous_mirror_status) { - file_put_contents($status_file, serialize($mirror_status)); -} diff --git a/src/www/diag_gmirror.php b/src/www/diag_gmirror.php deleted file mode 100644 index f318c875e..000000000 --- a/src/www/diag_gmirror.php +++ /dev/null @@ -1,452 +0,0 @@ - 0); -} - -/* Find the mirror to which this consumer belongs */ -function gmirror_get_consumer_metadata_mirror($consumer) { - if (!is_valid_consumer($consumer)) - return array(); - $metadata = gmirror_get_consumer_metadata($consumer); - foreach ($metadata as $line) { - if (substr($line, 0, 5) == "name:") { - list ($key, $value) = explode(":", $line, 2); - return trim($value); - } - } -} - - -/* Deactivate consumer, removing it from service in the mirror, but leave metadata intact */ -function gmirror_deactivate_consumer($mirror, $consumer) { - if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) - return false; - return mwexec("/sbin/gmirror deactivate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); -} - -/* Reactivate a deactivated consumer */ -function gmirror_activate_consumer($mirror, $consumer) { - if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer)) - return false; - return mwexec("/sbin/gmirror activate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer)); -} - -/* Find the size of the given mirror */ -function gmirror_get_mirror_size($mirror) { - if (!is_valid_mirror($mirror)) - return false; - $mirrorsize = ""; - exec("/sbin/gmirror list " . escapeshellarg($mirror) . " | /usr/bin/grep 'Mediasize:' | /usr/bin/head -n 1 | /usr/bin/awk '{print $2;}'", $mirrorsize); - return $mirrorsize[0]; -} - -/* Get only the size for one specific potential consumer. */ -function gmirror_get_unused_consumer_size($consumer) { - $consumersizes = gmirror_get_all_unused_consumer_sizes_on_disk($consumer); - foreach ($consumersizes as $csize) { - if ($csize['name'] == $consumer) - return $csize['size']; - } - return -1; -} - - -$pgtitle = array(gettext("Diagnostics"), gettext("GEOM Mirrors")); - -include("head.inc"); - -?> - - - - - - gettext("Forget all formerly connected consumers"), - "clear" => gettext("Remove metadata from disk"), - "insert" => gettext("Insert consumer into mirror"), - "remove" => gettext("Remove consumer from mirror"), - "activate" => gettext("Reactivate consumer on mirror"), - "deactivate" => gettext("Deactivate consumer from mirror"), - "rebuild" => gettext("Force rebuild of mirror consumer"), -); - -/* User tried to pass a bogus action */ -if (!empty($_REQUEST['action']) && !array_key_exists($_REQUEST['action'], $action_list)) { - header("Location: diag_gmirror.php"); - return; -} - -if ($_POST) { - if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm"))) { - header("Location: diag_gmirror.php"); - return; - } - $input_errors = ""; - - if (($_POST['action'] != "clear") && !is_valid_mirror($_POST['mirror'])) - $input_errors[] = gettext("You must supply a valid mirror name."); - - if (!empty($_POST['consumer']) && !is_valid_consumer($_POST['consumer'])) - $input_errors[] = gettext("You must supply a valid consumer name"); - - /* Additional action-specific validation that hasn't already been tested */ - switch ($_POST['action']) { - case "insert": - if (!is_consumer_unused($_POST['consumer'])) - $input_errors[] = gettext("Consumer is already in use and cannot be inserted. Remove consumer from existing mirror first."); - if (gmirror_consumer_has_metadata($_POST['consumer'])) - $input_errors[] = gettext("Consumer has metadata from an existing mirror. Clear metadata before inserting consumer."); - $mstat = gmirror_get_status_single($_POST['mirror']); - if (strtoupper($mstat) != "COMPLETE") - $input_errors[] = gettext("Mirror is not in a COMPLETE state, cannot insert consumer. Forget disconnected disks or wait for rebuild to finish."); - break; - case "clear": - if (!is_consumer_unused($_POST['consumer'])) - $input_errors[] = gettext("Consumer is in use and cannot be cleared. Deactivate disk first."); - if (!gmirror_consumer_has_metadata($_POST['consumer'])) - $input_errors[] = gettext("Consumer has no metadata to clear."); - break; - case "activate": - if (is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) - $input_errors[] = gettext("Consumer is already present on specified mirror."); - if (!gmirror_consumer_has_metadata($_POST['consumer'])) - $input_errors[] = gettext("Consumer has no metadata and cannot be reactivated."); - - break; - case "remove": - case "deactivate": - case "rebuild": - if (!is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) - $input_errors[] = gettext("Consumer must be present on the specified mirror."); - break; - } - -$result = 0; - if (empty($input_errors)) { - switch ($_POST['action']) { - case "forget": - $result = gmirror_forget_disconnected($_POST['mirror']); - break; - case "clear": - $result = gmirror_clear_consumer($_POST['consumer']); - break; - case "insert": - $result = gmirror_insert_consumer($_POST['mirror'], $_POST['consumer']); - break; - case "remove": - $result = gmirror_remove_consumer($_POST['mirror'], $_POST['consumer']); - break; - case "activate": - $result = gmirror_activate_consumer($_POST['mirror'], $_POST['consumer']); - break; - case "deactivate": - $result = gmirror_deactivate_consumer($_POST['mirror'], $_POST['consumer']); - break; - case "rebuild": - $result = gmirror_force_rebuild($_POST['mirror'], $_POST['consumer']); - break; - } - $redir = "Location: diag_gmirror.php"; - if ($result != 0) { - $redir .= "?error=" . urlencode($result); - } - /* If we reload the page too fast, the gmirror information may be missing or not up-to-date. */ - sleep(3); - header($redir); - return; - } -} - -$mirror_status = gmirror_get_status(); -$mirror_list = gmirror_get_mirrors(); -$unused_disks = gmirror_get_disks(); -$unused_consumers = array(); -foreach ($unused_disks as $disk) { - if (is_consumer_unused($disk)) - $unused_consumers = array_merge($unused_consumers, gmirror_get_all_unused_consumer_sizes_on_disk($disk)); -} - -?> - - -
- -
- -
- 0) - print_input_errors($input_errors); - if ($_GET["error"] && ($_GET["error"] != 0)) - print_info_box(gettext("There was an error performing the chosen mirror operation. Check the System Log for details.")); - - ?> - -
- -
- -
- -
-

-
-   - - -
-

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - : -
-
: - " /> - -
: - " /> - - -
: - " /> - -
-
" /> -
- - - - 0): ?> - - - - - - $name): - $components = count($name["components"]); ?> - - - - - - 1): - $morecomponents = array_slice($name["components"], 1); ?> - - - - - - - - - - - -
- -
Size: -
- - -
[] - -
- - -
- 1)): ?> - [] - [] - [] - -
- - -
- 1)): ?> - [] - [] - [] - -
-
-
- - - - 0): ?> - - - - - - - - - - - - - - - - -
- - - - [ ] -
[] - - - $mirror_size): ?> - - - - -
-
-
 
-
-
-
-
-
-
-
-"; -echo "jQuery('#loading').html('');"; -echo ""; - -?> - diff --git a/src/www/widgets/widgets/gmirror_status.widget.php b/src/www/widgets/widgets/gmirror_status.widget.php deleted file mode 100644 index 9e5518642..000000000 --- a/src/www/widgets/widgets/gmirror_status.widget.php +++ /dev/null @@ -1,93 +0,0 @@ - 0) { - $output .= "\n"; - $output .= "".gettext('Name')."\n"; - $output .= "".gettext('Status')."\n"; - $output .= "".gettext('Component')."\n"; - $output .= "\n"; - foreach ($mirrors as $mirror => $name) { - $components = count($name["components"]); - $output .= "\n"; - $output .= "{$name['name']}\n"; - $output .= "{$name['status']}\n"; - $output .= "{$name['components'][0]}\n"; - $output .= "\n"; - if (count($name["components"]) > 1) { - $morecomponents = array_slice($name["components"], 1); - foreach ($morecomponents as $component) { - $output .= "\n"; - $output .= "{$component}\n"; - $output .= "\n"; - } - } - } - } else { - $output .= "".gettext('No Mirrors Found')."\n"; - } - // $output .= "Updated at " . date("F j, Y, g:i:s a") . "\n"; - return $output; -} - - -if ($_GET['textonly'] == "true") { - header("Cache-Control: no-cache"); - echo gmirror_html_status(); - exit; -} -?> - - - - -
- -