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.
This commit is contained in:
Franco Fichtner 2017-10-08 18:14:45 +00:00
parent 6fe66d4b91
commit f6dec7ea3b
3 changed files with 50 additions and 18 deletions

View File

@ -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);
}

View File

@ -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) {

View File

@ -29,8 +29,8 @@
# connection: error|ok
# repository: error|ok
# last_ckeck: <date_time_stamp>
# updates: <#num_of_updates>
# download_size: unknown|<size_of_total_downloads>
# updates: <num_of_updates>
# download_size: <size_of_total_downloads>
# new_packages: array with { name: <package_name>, version: <package_version> }
# reinstall_packages: array with { name: <package_name>, version: <package_version> }
# upgrade_packages: array with { name: <package_name>, current_version: <current_version>, new_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