Hi,

I have a serious of vmd diffs, see the 5th one for the interesting part.
The first one is rather cosmetic, but will be needed for the status output.

    Use fmt_scaled(3) in vmctl status output to print curmem/maxmem
    
    This matches the accepted input in vmctl start and vm.conf that
    supports using M, G, T etc. instead of a hardcoded MB.  It also allows
    to shrink the column size as the unit will be scaled automatically.

OK?

Reyk

diff --git usr.sbin/vmctl/vmctl.c usr.sbin/vmctl/vmctl.c
index 352383c..ca2da8a 100644
--- usr.sbin/vmctl/vmctl.c
+++ usr.sbin/vmctl/vmctl.c
@@ -34,6 +34,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <util.h>
 
 #include "vmd.h"
 #include "vmctl.h"
@@ -363,27 +364,43 @@ void
 print_vm_info(struct vmop_info_result *list, size_t ct)
 {
        struct vm_info_result *vir;
+       struct vmop_info_result *vmi;
        size_t i, j;
-       char *vcpu_state;
+       char *vcpu_state, *tty;
+       char curmem[FMT_SCALED_STRSIZE];
+       char maxmem[FMT_SCALED_STRSIZE];
+
+       printf("%5s %5s %5s %7s %7s %7s %s\n", "ID", "PID", "VCPUS",
+           "MAXMEM", "CURMEM", "TTY", "NAME");
 
-       printf("%5s %5s %5s %9s %9s %*s %s\n", "ID", "PID", "VCPUS", "MAXMEM",
-           "CURMEM", VM_TTYNAME_MAX, "TTY", "NAME");
        for (i = 0; i < ct; i++) {
-               vir = &list[i].vir_info;
+               vmi = &list[i];
+               vir = &vmi->vir_info;
                if (check_info_id(vir->vir_name, vir->vir_id)) {
+                       (void)strlcpy(curmem, "-", sizeof(curmem));
+                       (void)strlcpy(maxmem, "-", sizeof(maxmem));
+
+                       (void)fmt_scaled(vir->vir_memory_size * 1024 * 1024,
+                           maxmem);
+
                        if (vir->vir_id != 0) {
+                               /* get tty - skip /dev/ path */
+                               if ((tty = strrchr(vmi->vir_ttyname,
+                                   '/')) == NULL || ++tty == '\0')
+                                       tty = list[i].vir_ttyname;
+
+                               (void)fmt_scaled(vir->vir_used_size, curmem);
+
                                /* running vm */
-                               printf("%5u %5u %5zd %7zdMB %7zdMB %*s %s\n",
+                               printf("%5u %5u %5zd %7s %7s %7s %s\n",
                                    vir->vir_id, vir->vir_creator_pid,
-                                   vir->vir_ncpus, vir->vir_memory_size,
-                                   vir->vir_used_size / 1024 / 1024 , 
VM_TTYNAME_MAX,
-                                   list[i].vir_ttyname, vir->vir_name);
+                                   vir->vir_ncpus, maxmem, curmem,
+                                   tty, vir->vir_name);
                        } else {
                                /* disabled vm */
-                               printf("%5s %5s %5zd %7zdMB %9s %*s %s\n",
+                               printf("%5s %5s %5zd %7s %7s %7s %s\n",
                                    "-", "-",
-                                   vir->vir_ncpus, vir->vir_memory_size,
-                                   "-", VM_TTYNAME_MAX,
+                                   vir->vir_ncpus, maxmem, curmem,
                                    "-", vir->vir_name);
                        }
                }

Reply via email to