[pve-devel] [pve-common v2 2/4] CLIFormatter: define some commonly useful rendering functions

Dietmar Maurer dietmar at proxmox.com
Tue Jul 3 13:11:01 CEST 2018


Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
---

Changes in v2:

Improved render functions as suggested by Thomas - thanks!

 src/PVE/CLIFormatter.pm | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/src/PVE/CLIFormatter.pm b/src/PVE/CLIFormatter.pm
index b50464d..867e4e9 100644
--- a/src/PVE/CLIFormatter.pm
+++ b/src/PVE/CLIFormatter.pm
@@ -10,6 +10,58 @@ use JSON;
 use utf8;
 use Encode;
 
+sub render_duration {
+    my ($duration_in_seconds) = @_;
+
+    my $text = '';
+    my $rest = $duration_in_seconds;
+
+    my $step = sub {
+	my ($unit, $unitlength) = @_;
+
+	if ((my $v = int($rest/$unitlength)) > 0) {
+	    $text .= " " if length($text);
+	    $text .= "${v}${unit}";
+	    $rest -= $v * $unitlength;
+	}
+    };
+
+    $step->('w', 7*24*3600);
+    $step->('d', 24*3600);
+    $step->('h', 3600);
+    $step->('m', 60);
+    $step->('s', 1);
+
+    return $text;
+}
+
+PVE::JSONSchema::register_renderer('duration', \&render_duration);
+
+sub render_fraction_as_percentage {
+    my ($fraction) = @_;
+
+    return sprintf("%.2f%%", $fraction*100);
+}
+
+PVE::JSONSchema::register_renderer(
+    'fraction_as_percentage', \&render_fraction_as_percentage);
+
+sub render_bytes {
+    my ($value) = @_;
+
+    my @units = qw(B KiB MiB GiB TiB PiB);
+
+    my $max_unit = 0;
+    if ($value > 1023) {
+        $max_unit = int(log($value)/log(1024));
+        $value /= 1024**($max_unit);
+    }
+
+    return sprintf "%.2f $units[$max_unit]", $value;
+}
+
+PVE::JSONSchema::register_renderer('bytes', \&render_bytes);
+
 sub query_terminal_options {
     my ($options) = @_;
 
-- 
2.11.0




More information about the pve-devel mailing list