Index: trunk/Ohana/src/opihi/pantasks/TaskOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 26891)
+++ trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 26946)
@@ -58,8 +58,10 @@
 }  
 
+# define getnchars(LEN, MINLEN) { float loglength; loglength = log10(LEN); LEN = ((int)loglength < loglength) ? loglength + 1 : loglength; LEN = (LEN < MINLEN) ? MINLEN : LEN; }
+
 /* list known tasks */
 void ListTasks (int verbose) {
 
-  int i, j, valid, nameLength, cmdLength;
+  int i, j, valid, nameLength, cmdLength, maxJobs, maxRun, maxDone, maxFail, maxTime, Nrun;
   char *start, *stop;
   char format[128];
@@ -73,4 +75,5 @@
   /* find string lengths */
   nameLength = cmdLength = 0;
+  maxJobs = maxRun = maxDone = maxFail = maxTime = 0;
   for (i = 0; i < Ntasks; i++) {
     nameLength = MAX (nameLength, strlen(tasks[i][0].name));
@@ -80,12 +83,23 @@
       cmdLength = MAX (nameLength, strlen(tasks[i][0].argv[0]));
     }
+    maxJobs = MAX(maxJobs, tasks[i][0].Njobs);
+    maxDone = MAX(maxDone, tasks[i][0].Nsuccess);
+    maxFail = MAX(maxFail, tasks[i][0].Nfailure);
+    maxTime = MAX(maxTime, tasks[i][0].Ntimeout);
+    maxRun  = MAX(maxRun,  tasks[i][0].Njobs - tasks[i][0].Nsuccess - tasks[i][0].Nfailure - tasks[i][0].Ntimeout);
   }
 
   gprint (GP_LOG, " Task Status\n");
 
-  snprintf (format, 128, "  AV %%-%ds %5s  %5s %5s %5s %%-%ds\n", nameLength, "Njobs", "Ngood", "Nfail", "Ntime", cmdLength);
-  gprint (GP_LOG, format, "Name", "Command");
-
-  snprintf (format, 128, "%%-%ds %%5d  %%5d %%5d %%5d %%-%ds\n", nameLength, cmdLength);
+  getnchars(maxJobs, 5);
+  getnchars(maxRun,  5);
+  getnchars(maxDone, 5);
+  getnchars(maxFail, 5);
+  getnchars(maxTime, 5);
+
+  snprintf (format, 128, "  AV %%-%ds  %%%ds  %%%ds  %%%ds %%%ds %%%ds %%-%ds\n", nameLength, maxRun, maxJobs, maxDone, maxFail, maxTime, cmdLength);
+  gprint (GP_LOG, format, "Name", "Nrun", "Njobs", "Ngood", "Nfail", "Ntime", "Command");
+
+  snprintf (format, 128, "%%-%ds  %%%dd  %%%dd  %%%dd %%%dd %%%dd %%-%ds\n", nameLength, maxRun, maxJobs, maxDone, maxFail, maxTime, cmdLength);
   for (i = 0; i < Ntasks; i++) {
     valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
@@ -101,8 +115,9 @@
       gprint (GP_LOG, "- ");
     }
+    Nrun = tasks[i][0].Njobs - tasks[i][0].Nsuccess - tasks[i][0].Nfailure - tasks[i][0].Ntimeout;
     if (tasks[i][0].argv == NULL) {
-      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, "(dynamic)");
-    } else {
-      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, tasks[i][0].argv[0]);
+      gprint (GP_LOG, format, tasks[i][0].name, Nrun, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, "(dynamic)");
+    } else {
+      gprint (GP_LOG, format, tasks[i][0].name, Nrun, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, tasks[i][0].argv[0]);
     }
     if (verbose) {
Index: trunk/Ohana/src/opihi/pantasks/status_server.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/status_server.c	(revision 26891)
+++ trunk/Ohana/src/opihi/pantasks/status_server.c	(revision 26946)
@@ -4,4 +4,5 @@
 
   int N;
+  int checkController,showJobs, showDetails;
 
   if (get_argument (argc, argv, "-h")) goto help;
@@ -9,22 +10,8 @@
   if (get_argument (argc, argv, "--help")) goto help;
 
-  if ((N = get_argument (argc, argv, "-tasks"))) {
-    remove_argument (N, &argc, argv);
-    JobTaskLock();
-    ListTasks (FALSE);
-    JobTaskUnlock();
-    return (TRUE);
-  }
-
-  if ((N = get_argument (argc, argv, "-taskinfo"))) {
-    remove_argument (N, &argc, argv);
-    JobTaskLock();
-    ListTasks (TRUE);
-    JobTaskUnlock();
-    return (TRUE);
-  }
-
+  // special options for task timing stats
   if ((N = get_argument (argc, argv, "-taskstats"))) {
     remove_argument (N, &argc, argv);
+    status_scheduler();
     JobTaskLock();
     if (argc == 2) {
@@ -49,4 +36,72 @@
   }
 
+  checkController = FALSE;
+  if ((N = get_argument (argc, argv, "-c"))) {
+    remove_argument (N, &argc, argv);
+    checkController = TRUE;
+  }
+  if ((N = get_argument (argc, argv, "-control"))) {
+    remove_argument (N, &argc, argv);
+    checkController = TRUE;
+  }
+  if ((N = get_argument (argc, argv, "-controller"))) {
+    remove_argument (N, &argc, argv);
+    checkController = TRUE;
+  }
+
+  showJobs = FALSE;
+  if ((N = get_argument (argc, argv, "-jobs"))) {
+    remove_argument (N, &argc, argv);
+    showJobs = TRUE;
+  }
+
+  showDetails = FALSE;
+  if ((N = get_argument (argc, argv, "-info"))) {
+    remove_argument (N, &argc, argv);
+    showDetails = TRUE;
+  }
+  if ((N = get_argument (argc, argv, "-v"))) {
+    remove_argument (N, &argc, argv);
+    showDetails = TRUE;
+  }
+  if ((N = get_argument (argc, argv, "-details"))) {
+    remove_argument (N, &argc, argv);
+    showDetails = TRUE;
+  }
+  if ((N = get_argument (argc, argv, "-verbose"))) {
+    remove_argument (N, &argc, argv);
+    showDetails = TRUE;
+  }
+
+  status_scheduler();
+
+  JobTaskLock();
+  ListTasks (showDetails);
+  if (showJobs) {
+    ListJobs();
+  }
+  JobTaskUnlock();
+
+  if (checkController) {
+    ControlLock(__func__);
+    PrintControllerBusyJobs();
+    ControlUnlock(__func__);
+  }
+
+  gprint (GP_LOG, "\n");
+  return (TRUE);
+
+help:
+  gprint (GP_LOG, "USAGE: status [options]\n");
+  gprint (GP_LOG, "       (without options: show system status)\n");
+  gprint (GP_LOG, "       -c | -control | -controller      : add status of jobs on controller\n");
+  gprint (GP_LOG, "       -v | -verbose | -details | -info : add details for tasks\n");
+  gprint (GP_LOG, "       -taskstats                       : show timing statistics for tasks\n");
+  gprint (GP_LOG, "       -taskstatsreset                  : reset timing statistics for tasks\n");
+  return (FALSE);
+}
+
+int status_scheduler() {
+  
   gprint (GP_LOG, "\n");
   if (CheckTasksGetState()) {
@@ -64,23 +119,4 @@
     gprint (GP_LOG, " Controller is stopped\n");
   }
-
-  JobTaskLock();
-  ListTasks (FALSE);
-  ListJobs ();
-  JobTaskUnlock();
-
-  ControlLock(__func__);
-  PrintControllerBusyJobs();
-  ControlUnlock(__func__);
-
   return (TRUE);
-
-help:
-  gprint (GP_LOG, "USAGE: status [options]\n");
-  gprint (GP_LOG, "       (without options: over system status)\n");
-  gprint (GP_LOG, "       -tasks     : list defined tasks\n");
-  gprint (GP_LOG, "       -taskinfo  : details for tasks\n");
-  gprint (GP_LOG, "       -taskstats : processing statistics for tasks\n");
-  gprint (GP_LOG, "       -taskstatsreset : reset processing statistics for tasks\n");
-  return (FALSE);
 }
