Changeset 11055 for trunk/Ohana/src/opihi/pantasks/TaskOps.c
- Timestamp:
- Jan 11, 2007, 4:51:41 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/pantasks/TaskOps.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/pantasks/TaskOps.c
r10733 r11055 52 52 void ListTasks (int verbose) { 53 53 54 int i, j, valid ;54 int i, j, valid, nameLength, cmdLength; 55 55 char *start, *stop; 56 char format[128]; 56 57 57 58 gprint (GP_LOG, "\n"); … … 61 62 } 62 63 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 63 75 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); 65 81 for (i = 0; i < Ntasks; i++) { 66 82 valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges); … … 77 93 } 78 94 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]); 82 98 } 83 99 if (verbose) { … … 129 145 } 130 146 147 /* list known tasks */ 148 void 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 131 210 /* show details of a task */ 132 211 int ShowTask (char *name) { … … 311 390 NewTask[0].Nmax = 0; /* default value means 'no limit' */ 312 391 392 NewTask[0].NpendingMax = 0; /* default value means 'no limit' */ 393 313 394 NewTask[0].Njobs = 0; 314 395 NewTask[0].Nsuccess = 0; 315 396 NewTask[0].Nfailure = 0; 316 397 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; 317 411 318 412 NewTask[0].active = TRUE; … … 433 527 if (!strcasecmp (command, "OPTIONS")) hash = TASK_OPTIONS; 434 528 if (!strcasecmp (command, "PERIODS")) hash = TASK_PERIODS; 529 if (!strcasecmp (command, "NPENDING")) hash = TASK_NPENDING; 435 530 if (!strcasecmp (command, "TASK.EXIT")) hash = TASK_EXIT; 436 531 if (!strcasecmp (command, "TASK.EXEC")) hash = TASK_EXEC; … … 461 556 462 557 Task *task; 558 double isec, fsec; 463 559 464 560 while ((task = NextTask ()) != NULL) { 465 561 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; 466 565 } 467 566 } 567 568 /* must call this after updating the corresponding counter */ 569 void 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.
