home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / perfmon / hoststat.c < prev    next >
C/C++ Source or Header  |  1992-05-08  |  2KB  |  101 lines

  1. #include <rpcsvc/rstat.h>
  2. #include <sys/dk.h>
  3. #include <ctype.h>
  4. #include <stdio.h>
  5.  
  6. #define    SLPDEFAULT    10
  7. #define    sane(x)        ((x) > 100000 ? (-1) : (x))
  8. #define    scale(x)    sane(secs == 1 ? (x) : (x) / secs)
  9. #define    sleep(x)    usleep(1000000 * (x))
  10.  
  11. char    **hosts;
  12. struct    statstime *orig;
  13. int    secs;
  14. int    n;
  15.  
  16. main(ac, av)
  17.     char    **av;
  18. {
  19.     int    i;
  20.     char    *calloc();
  21.  
  22.     for (i = 1; i < ac && !isdigit(av[i][0]); i++)
  23.         ;
  24.     hosts = (char**)calloc(i, sizeof(char *));
  25.     orig = (struct statstime*)calloc(i, sizeof(struct statstime));
  26.  
  27.     /*
  28.      * Go through it once to fire up all the rstatd's.
  29.      */
  30.     for (i = 1; i < ac; ++i) {
  31.         fprintf(stderr, "%s ", av[i]);
  32.         if (rstat(av[i], &orig[i - 1]) == 0) {
  33.             hosts[n++] = av[i];
  34.         }
  35.     }
  36.     fprintf(stderr, "\n");
  37.     for (i = 1; i < ac; ++i) {
  38.         if (!hosts[i])
  39.             continue;
  40.         rstat(av[i], &orig[i - 1]);
  41.     }
  42.     /*
  43.      * Initialize
  44.      */
  45.     sleep(secs = 1);
  46.     for (i = 0; i < ac - 1; ++i) {
  47.         if (!hosts[i])
  48.             continue;
  49.         dohost(i);
  50.     }
  51.     secs = isdigit(av[ac - 1][0]) ? atoi(av[ac -1]) : SLPDEFAULT;
  52.     while (1) {
  53.         sleep(secs);
  54.         for (i = 0; i < ac - 1; ++i) {
  55.             if (!hosts[i])
  56.                 continue;
  57.             dohost(i);
  58.         }
  59.     }
  60. }
  61.  
  62. dohost(i)
  63. {
  64.     struct    statstime st;
  65.     static    count;
  66.     
  67.     if (count++ % n == 0) {
  68.         printf("%8.8s %4s %4s %4s %3s %3s %3s %3s %3s ",
  69.             "host", "load", "ipkt", "opkt", "err",
  70.             "d0", "d1", "d2", "d3");
  71.         printf("%3s %3s %4s %5s ",
  72.             "ipg", "opg", "intr", "cs");
  73.         printf("%3s %3s %3s\n", "usr", "sys", "idl");
  74.     }
  75.     if (rstat(hosts[i], &st) != 0) {
  76.         perror(hosts[i]);
  77.         exit(1);
  78.     }
  79.     printf("%8.8s %4.1f %4d %4d %3d %3d %3d %3d %3d %3d %3d %4d %5d ",
  80.         hosts[i], 
  81.         scale(st.avenrun[0] / 256.),
  82.         scale(st.if_ipackets - orig[i].if_ipackets),
  83.         scale(st.if_opackets - orig[i].if_opackets),
  84.         scale((st.if_collisions + st.if_oerrors) - 
  85.           (orig[i].if_collisions + orig[i].if_oerrors)),
  86.         scale(st.dk_xfer[0] - orig[i].dk_xfer[0]),
  87.         scale(st.dk_xfer[1] - orig[i].dk_xfer[1]),
  88.         scale(st.dk_xfer[2] - orig[i].dk_xfer[2]),
  89.         scale(st.dk_xfer[3] - orig[i].dk_xfer[3]),
  90.         scale(st.v_pgpgin - orig[i].v_pgpgin),
  91.         scale(st.v_pgpgout - orig[i].v_pgpgout),
  92.         scale(st.v_intr - orig[i].v_intr),
  93.         scale(st.v_swtch - orig[i].v_swtch),
  94.         0);
  95.     printf("%3d %3d %3d\n",
  96.         scale(st.cp_time[0] - orig[i].cp_time[0]),
  97.         scale(st.cp_time[2] - orig[i].cp_time[2]),
  98.         scale(st.cp_time[3] - orig[i].cp_time[3]));
  99.     orig[i] = st;
  100. }
  101.