IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 11, 2007, 4:51:41 PM (20 years ago)
Author:
eugene
Message:

added timing stats, npending limit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/pantasks/TaskOps.c

    r10733 r11055  
    5252void ListTasks (int verbose) {
    5353
    54   int i, j, valid;
     54  int i, j, valid, nameLength, cmdLength;
    5555  char *start, *stop;
     56  char format[128];
    5657
    5758  gprint (GP_LOG, "\n");
     
    6162  }
    6263
     64  /* find string lengths */
     65  nameLength = cmdLength = 0;
     66  for (i = 0; i < Ntasks; i++) {
     67    nameLength = MAX (nameLength, strlen(tasks[i][0].name));
     68    if (tasks[i][0].argv == NULL) {
     69      cmdLength = MAX (nameLength, strlen("(dynamic)"));
     70    } else {
     71      cmdLength = MAX (nameLength, strlen(tasks[i][0].argv[0]));
     72    }
     73  }
     74
    6375  gprint (GP_LOG, " Task Status\n");
    64   gprint (GP_LOG, "  * Name            Njobs  Command\n");
     76
     77  snprintf (format, 128, "  AV %%-%ds %5s %%-%ds\n", nameLength, "Njobs", cmdLength);
     78  gprint (GP_LOG, format, "Name", "Command");
     79
     80  snprintf (format, 128, "%%-%ds %%5d %%-%ds\n", nameLength, cmdLength);
    6581  for (i = 0; i < Ntasks; i++) {
    6682    valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
     
    7793    }
    7894    if (tasks[i][0].argv == NULL) {
    79       gprint (GP_LOG, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, "(dynamic)");
    80     } else {
    81       gprint (GP_LOG, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].argv[0]);
     95      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, "(dynamic)");
     96    } else {
     97      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].argv[0]);
    8298    }
    8399    if (verbose) {
     
    129145}
    130146
     147/* list known tasks */
     148void ListTaskStats () {
     149
     150  int i, j, valid, nameLength;
     151  char *start, *stop;
     152  char format[128];
     153
     154  gprint (GP_LOG, "\n");
     155  if (Ntasks == 0) {
     156    gprint (GP_LOG, " no defined tasks\n");
     157    return;
     158  }
     159
     160  /* find string lengths */
     161  nameLength = 0;
     162  for (i = 0; i < Ntasks; i++) {
     163    nameLength = MAX (nameLength, strlen(tasks[i][0].name));
     164  }
     165
     166  gprint (GP_LOG, " Task Statistics\n");
     167
     168  snprintf (format, 128, "     %%-%ds |           alljobs          |           success          |           failure          |\n", nameLength);
     169  gprint (GP_LOG, format, "");
     170  snprintf (format, 128, "  AV %%-%ds | Njobs   Tmin   Tave   Tmax | Njobs   Tmin   Tave   Tmax | Njobs   Tmin   Tave   Tmax |\n", nameLength);
     171  gprint (GP_LOG, format, "Name");
     172
     173  snprintf (format, 128, "%%-%ds", nameLength);
     174  for (i = 0; i < Ntasks; i++) {
     175    valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
     176    if (tasks[i][0].active) {
     177      gprint (GP_LOG, "  +");
     178    } else {
     179      gprint (GP_LOG, "  -");
     180    }
     181    if (valid) {
     182      gprint (GP_LOG, "+ ");
     183    } else {
     184      gprint (GP_LOG, "- ");
     185    }
     186    if (tasks[i][0].argv == NULL) {
     187      gprint (GP_LOG, format, tasks[i][0].name);
     188    } else {
     189      gprint (GP_LOG, format, tasks[i][0].name);
     190    }
     191    if (tasks[i][0].dtimeMin_alljobs < 0) {
     192      gprint (GP_LOG, " | %5d %6s %6.2f %6.2f",     tasks[i][0].Njobs,    "NONE",                       tasks[i][0].dtimeAve_alljobs, tasks[i][0].dtimeMax_alljobs);
     193    } else {
     194      gprint (GP_LOG, " | %5d %6.2f %6.2f %6.2f",   tasks[i][0].Njobs,    tasks[i][0].dtimeMin_alljobs, tasks[i][0].dtimeAve_alljobs, tasks[i][0].dtimeMax_alljobs);
     195    }     
     196    if (tasks[i][0].dtimeMin_success < 0) {
     197      gprint (GP_LOG, " | %5d %6s %6.2f %6.2f",     tasks[i][0].Nsuccess, "NONE",                       tasks[i][0].dtimeAve_success, tasks[i][0].dtimeMax_success);
     198    } else {
     199      gprint (GP_LOG, " | %5d %6.2f %6.2f %6.2f",   tasks[i][0].Nsuccess, tasks[i][0].dtimeMin_success, tasks[i][0].dtimeAve_success, tasks[i][0].dtimeMax_success);
     200    }
     201    if (tasks[i][0].dtimeMin_failure < 0) {
     202      gprint (GP_LOG, " | %5d %6s %6.2f %6.2f |\n",   tasks[i][0].Nfailure, "NONE",                       tasks[i][0].dtimeAve_failure, tasks[i][0].dtimeMax_failure);
     203    } else {
     204      gprint (GP_LOG, " | %5d %6.2f %6.2f %6.2f |\n", tasks[i][0].Nfailure, tasks[i][0].dtimeMin_failure, tasks[i][0].dtimeAve_failure, tasks[i][0].dtimeMax_failure);
     205    }
     206  }
     207  return;
     208}
     209
    131210/* show details of a task */
    132211int ShowTask (char *name) {
     
    311390  NewTask[0].Nmax = 0;  /* default value means 'no limit' */
    312391
     392  NewTask[0].NpendingMax = 0;  /* default value means 'no limit' */
     393
    313394  NewTask[0].Njobs = 0;
    314395  NewTask[0].Nsuccess = 0;
    315396  NewTask[0].Nfailure = 0;
    316397  NewTask[0].Ntimeout = 0;
     398
     399  /* jobs timing statistics */
     400  NewTask[0].dtimeAve_alljobs =  0.0;
     401  NewTask[0].dtimeMin_alljobs = -1.0;
     402  NewTask[0].dtimeMax_alljobs =  0.0;
     403
     404  NewTask[0].dtimeAve_success =  0.0;
     405  NewTask[0].dtimeMin_success = -1.0;
     406  NewTask[0].dtimeMax_success =  0.0;
     407
     408  NewTask[0].dtimeAve_failure =  0.0;
     409  NewTask[0].dtimeMin_failure = -1.0;
     410  NewTask[0].dtimeMax_failure =  0.0;
    317411
    318412  NewTask[0].active = TRUE;
     
    433527  if (!strcasecmp (command, "OPTIONS"))   hash = TASK_OPTIONS;
    434528  if (!strcasecmp (command, "PERIODS"))   hash = TASK_PERIODS;
     529  if (!strcasecmp (command, "NPENDING"))  hash = TASK_NPENDING;
    435530  if (!strcasecmp (command, "TASK.EXIT")) hash = TASK_EXIT;
    436531  if (!strcasecmp (command, "TASK.EXEC")) hash = TASK_EXEC;
     
    461556
    462557  Task *task;
     558  double isec, fsec;
    463559
    464560  while ((task = NextTask ()) != NULL) {
    465561    gettimeofday (&task[0].last, (void *) NULL);
     562    fsec = modf (task[0].exec_period, &isec);
     563    task[0].last.tv_sec -= isec;
     564    task[0].last.tv_usec -= 1e6*fsec;
    466565 }
    467566}
     567
     568/* must call this after updating the corresponding counter */
     569void UpdateTaskTimerStats (Task *task, int mode, double dtime) {
     570
     571  double total;
     572
     573  switch (mode) {
     574    case TIMER_ALLJOBS:
     575      total = task[0].dtimeAve_alljobs * (task[0].Njobs - 1);
     576      total += dtime;
     577      task[0].dtimeAve_alljobs = total / (float) task[0].Njobs;
     578      if (task[0].dtimeMin_alljobs < 0) {
     579        task[0].dtimeMin_alljobs = dtime;
     580      } else {
     581        task[0].dtimeMin_alljobs = MIN (task[0].dtimeMin_alljobs, dtime);
     582      }
     583      task[0].dtimeMax_alljobs = MAX (task[0].dtimeMax_alljobs, dtime);
     584      break;
     585    case TIMER_SUCCESS:
     586      total = task[0].dtimeAve_success * (task[0].Nsuccess - 1);
     587      total += dtime;
     588      task[0].dtimeAve_success = total / (float) task[0].Nsuccess;
     589      if (task[0].dtimeMin_success < 0) {
     590        task[0].dtimeMin_success = dtime;
     591      } else {
     592        task[0].dtimeMin_success = MIN (task[0].dtimeMin_success, dtime);
     593      }
     594      task[0].dtimeMax_success = MAX (task[0].dtimeMax_success, dtime);
     595      break;
     596    case TIMER_FAILURE:
     597      total = task[0].dtimeAve_failure * (task[0].Nfailure - 1);
     598      total += dtime;
     599      task[0].dtimeAve_failure = total / (float) task[0].Nfailure;
     600      if (task[0].dtimeMin_failure < 0) {
     601        task[0].dtimeMin_failure = dtime;
     602      } else {
     603        task[0].dtimeMin_failure = MIN (task[0].dtimeMin_failure, dtime);
     604      }
     605      task[0].dtimeMax_failure = MAX (task[0].dtimeMax_failure, dtime);
     606      break;
     607    default:
     608      abort();
     609  }
     610}
Note: See TracChangeset for help on using the changeset viewer.