From f6dec7ea3b1c2ceee5cf8a2391beaa124781b191 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Sun, 8 Oct 2017 18:14:45 +0000 Subject: [PATCH] firmware: pull the set size from the mirror There is only one tiny missing piece: if we have both packages and sets, we need to merge the download size and display it. --- src/etc/inc/util.inc | 10 +++--- .../OPNsense/Core/Api/FirmwareController.php | 36 +++++++++++++++++-- src/opnsense/scripts/firmware/check.sh | 22 ++++++------ 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/etc/inc/util.inc b/src/etc/inc/util.inc index bd3994d2f..db46cd805 100644 --- a/src/etc/inc/util.inc +++ b/src/etc/inc/util.inc @@ -1164,12 +1164,12 @@ function resolve_retry($hostname, $retries = 5) function format_bytes($bytes) { - if ($bytes >= 1073741824) { - return sprintf("%.2f GB", $bytes/1073741824); - } elseif ($bytes >= 1048576) { - return sprintf("%.2f MB", $bytes/1048576); + if ($bytes >= (1024 * 1024 * 1024)) { + return sprintf("%.2f GB", $bytes / (1024 * 1024 * 1024)); + } elseif ($bytes >= 1024 * 1024) { + return sprintf("%.2f MB", $bytes / (1024 * 1024)); } elseif ($bytes >= 1024) { - return sprintf("%.0f KB", $bytes/1024); + return sprintf("%.0f KB", $bytes / 1024); } else { return sprintf("%d bytes", $bytes); } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php index 271746575..383644663 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -39,6 +39,24 @@ use \OPNsense\Core\Config; */ class FirmwareController extends ApiControllerBase { + /** + * return bytes in human-readable form + * @param integer $bytes bytes to convert + * @return string + */ + private function format_bytes($bytes) + { + if ($bytes >= (1024 * 1024 * 1024)) { + return sprintf("%d GB", $bytes / (1024 * 1024 * 1024)); + } elseif ($bytes >= 1024 * 1024) { + return sprintf("%d MB", $bytes / (1024 * 1024)); + } elseif ($bytes >= 1024) { + return sprintf("%d KB", $bytes / 1024); + } else { + return sprintf("%d bytes", $bytes); + } + } + /** * retrieve available updates * @return array @@ -51,6 +69,20 @@ class FirmwareController extends ApiControllerBase $response = json_decode(trim($backend->configdRun('firmware check')), true); if ($response != null) { + $packages_size = !empty($response['download_size']) ? $response['download_size'] : 0; + $sets_size = 0; + + if (!empty($response['upgrade_packages'])) { + foreach ($response['upgrade_packages'] as $listing) { + if (!empty($listing['size'])) { + $sets_size += $listing['size']; + } + } + } + + /* XXX scrape the number from $package_size and merge with sets size for total */ + $download_size = $packages_size ? $packages_size : $this->format_bytes($sets_size); + if (array_key_exists('connection', $response) && $response['connection'] == 'error') { $response['status_msg'] = gettext('Connection error.'); $response['status'] = 'error'; @@ -73,13 +105,13 @@ class FirmwareController extends ApiControllerBase $response['status_msg'] = sprintf( gettext('There is %s update available, total download size is %s.'), $response['updates'], - $response['download_size'] + $download_size ); } else { $response['status_msg'] = sprintf( gettext('There are %s updates available, total download size is %s.'), $response['updates'], - $response['download_size'] + $download_size ); } if ($response['upgrade_needs_reboot'] == 1) { diff --git a/src/opnsense/scripts/firmware/check.sh b/src/opnsense/scripts/firmware/check.sh index 4c0b8d859..0ab80cf41 100755 --- a/src/opnsense/scripts/firmware/check.sh +++ b/src/opnsense/scripts/firmware/check.sh @@ -29,8 +29,8 @@ # connection: error|ok # repository: error|ok # last_ckeck: -# updates: <#num_of_updates> -# download_size: unknown| +# updates: +# download_size: # new_packages: array with { name: , version: } # reinstall_packages: array with { name: , version: } # upgrade_packages: array with { name: , current_version: , new_version: } @@ -50,7 +50,7 @@ last_check="unknown" packages_upgraded="" packages_downgraded="" packages_new="" -download_size="unknown" +download_size="" itemcount=0 linecount=0 timer=0 @@ -108,16 +108,12 @@ if [ "$pkg_running" == "" ]; then updates="0" else download_size=`cat $tmp_pkg_output_file | grep 'to be downloaded' | awk -F '[ ]' '{print $1$2}'` - if [ "$download_size" == "" ]; then - download_size="unknown" - fi LQUERY=$(pkg query %v opnsense-update) RQUERY=$(pkg rquery %v opnsense-update) if [ "${LQUERY%%_*}" != "${RQUERY%%_*}" ]; then kernel_to_reboot="${RQUERY%%_*}" base_to_reboot="${RQUERY%%_*}" - upgrade_needs_reboot="1" fi # First check if there are new packages that need to be installed @@ -239,16 +235,18 @@ if [ "$pkg_running" == "" ]; then fi if [ -n "$base_to_reboot" ]; then base_to_delete="$(opnsense-update -bv)" - if [ "$base_to_reboot" != "$base_to_delete" ]; then + base_is_size="$(opnsense-update -bfS)" + upgrade_needs_reboot="1" + if [ "$base_to_reboot" != "$base_to_delete" -a -n "$base_is_size" ]; then if [ "$packages_upgraded" == "" ]; then packages_upgraded=$packages_upgraded"{\"name\":\"base\"," # If it is the first item then we do not want a seperator else packages_upgraded=$packages_upgraded", {\"name\":\"base\"," fi + packages_upgraded=$packages_upgraded"\"size\":\"$base_is_size\"," packages_upgraded=$packages_upgraded"\"current_version\":\"$base_to_delete\"," packages_upgraded=$packages_upgraded"\"new_version\":\"$base_to_reboot\"}" updates=$(expr $updates + 1) - upgrade_needs_reboot="1" fi fi if opnsense-update -cfk; then @@ -259,16 +257,18 @@ if [ "$pkg_running" == "" ]; then fi if [ -n "$kernel_to_reboot" ]; then kernel_to_delete="$(opnsense-update -kv)" - if [ "$kernel_to_reboot" != "$kernel_to_delete" ]; then + kernel_is_size="$(opnsense-update -fkS)" + upgrade_needs_reboot="1" + if [ "$kernel_to_reboot" != "$kernel_to_delete" -a -n "$kernel_is_size" ]; then if [ "$packages_upgraded" == "" ]; then packages_upgraded=$packages_upgraded"{\"name\":\"kernel\"," # If it is the first item then we do not want a seperator else packages_upgraded=$packages_upgraded", {\"name\":\"kernel\"," fi + packages_upgraded=$packages_upgraded"\"size\":\"$kernel_is_size\"," packages_upgraded=$packages_upgraded"\"current_version\":\"$kernel_to_delete\"," packages_upgraded=$packages_upgraded"\"new_version\":\"$kernel_to_reboot\"}" updates=$(expr $updates + 1) - upgrade_needs_reboot="1" fi fi fi