Blob Blame History Raw
--- netkit-rusers-0.17/rpc.rstatd/rstat_proc.c.stats	Wed Jan 23 14:59:13 2002
+++ netkit-rusers-0.17/rpc.rstatd/rstat_proc.c	Wed Jan 23 15:40:50 2002
@@ -295,7 +295,7 @@
 int sincelastreq = 0;		/* number of alarms since last request */
 extern int closedown;
 
-union {
+struct {
 	struct stats s1;
 	struct statsswtch s2;
 	struct statstime s3;
@@ -415,14 +415,32 @@
     b = strstr(buff, "cpu ");
     if(b)
     sscanf(b, "cpu  %lu %lu %lu %lu", cuse, cice, csys, cide);
+    b = strstr(buff, "disk ");
+    if(b)
+      sscanf(b, "disk %u %u %u %u", &d->xfer[0], &d->xfer[1], &d->xfer[2], &d->xfer[3]);
+    b = strstr(buff, "disk_rio ");
+    if(b)
+      sscanf(b, "disk_rio %u %u %u %u", &d->rio[0], &d->rio[1], &d->rio[2], &d->rio[3]);
+    b = strstr(buff, "disk_wio ");
+    if(b)
+      sscanf(b, "disk_wio %u %u %u %u", &d->wio[0], &d->wio[1], &d->wio[2], &d->wio[3]);
+    b = strstr(buff, "disk_rblk ");
+    if(b)
+      sscanf(b, "disk_rblk %u %u %u %u", &d->rblk[0], &d->rblk[1], &d->rblk[2], &d->rblk[3]);
+    b = strstr(buff, "disk_wblk ");
+    if(b)
+      sscanf(b, "disk_wblk %u %u %u %u", &d->wblk[0], &d->wblk[1], &d->wblk[2], &d->wblk[3]);
+
     b = strstr(buff, "disk_io:");
-    ndisks = 0;
-    while ( (b = strstr(b, "):")) != NULL && ndisks < MAX_DISKS ) {
-      sscanf (b, "):(%u,%u,%u,%u,%u)", &d->xfer[ndisks], 
-	      &d->rio[ndisks], &d->rblk[ndisks], 
-	      &d->wio[ndisks], &d->wblk[ndisks]);
-      ndisks++;
-      b += 2;
+    if(b) {
+      ndisks = 0;
+      while ( (b = strstr(b, "):")) != NULL && ndisks < MAX_DISKS ) {
+        sscanf (b, "):(%u,%u,%u,%u,%u)", &d->xfer[ndisks], 
+	        &d->rio[ndisks], &d->rblk[ndisks], 
+	        &d->wio[ndisks], &d->wblk[ndisks]);
+        ndisks++;
+        b += 2;
+      }
     }
 
     b = strstr(buff, "page ");
@@ -637,18 +655,29 @@
 
 	memset(&stats_all, 0, sizeof(stats_all));
 
-	for (i = 0; i < dk_ndrive && i < DK_NDRIVE; i++)
+	for (i = 0; i < dk_ndrive && i < DK_NDRIVE; i++) {
 		stats_all.s1.dk_xfer[i] = cur.dk_xfer[i];
+		stats_all.s2.dk_xfer[i] = cur.dk_xfer[i];
+		stats_all.s3.dk_xfer[i] = cur.dk_xfer[i];
+        }
 
-	for (i = 0; i < CPUSTATES; i++)
+	for (i = 0; i < CPUSTATES; i++) {
 		stats_all.s1.cp_time[i] += cur.cp_time[cp_xlat[i]];
+		stats_all.s2.cp_time[i] += cur.cp_time[cp_xlat[i]];
+		stats_all.s3.cp_time[i] += cur.cp_time[cp_xlat[i]];
+        }
 
 	stats_all.s2.avenrun[0] = avrun[0] * FSCALE;
 	stats_all.s2.avenrun[1] = avrun[1] * FSCALE;
 	stats_all.s2.avenrun[2] = avrun[2] * FSCALE;
+	stats_all.s3.avenrun[0] = avrun[0] * FSCALE;
+	stats_all.s3.avenrun[1] = avrun[1] * FSCALE;
+	stats_all.s3.avenrun[2] = avrun[2] * FSCALE;
 
 	stats_all.s2.boottime.tv_sec = btm.tv_sec;
 	stats_all.s2.boottime.tv_usec = btm.tv_usec;
+	stats_all.s3.boottime.tv_sec = btm.tv_sec;
+	stats_all.s3.boottime.tv_usec = btm.tv_usec;
 
 #ifdef DEBUG
 	syslog(LOG_DEBUG, "%d %d %d %d", stats_all.s1.cp_time[0],
@@ -661,10 +690,25 @@
 	stats_all.s1.v_pswpin = cnt.v_pswpin;
 	stats_all.s1.v_pswpout = cnt.v_pswpout;
 	stats_all.s1.v_intr = cnt.v_intr;
+	stats_all.s2.v_pgpgin = cnt.v_pgpgin;
+	stats_all.s2.v_pgpgout = cnt.v_pgpgout;
+	stats_all.s2.v_pswpin = cnt.v_pswpin;
+	stats_all.s2.v_pswpout = cnt.v_pswpout;
+	stats_all.s2.v_intr = cnt.v_intr;
+	stats_all.s3.v_pgpgin = cnt.v_pgpgin;
+	stats_all.s3.v_pgpgout = cnt.v_pgpgout;
+	stats_all.s3.v_pswpin = cnt.v_pswpin;
+	stats_all.s3.v_pswpout = cnt.v_pswpout;
+	stats_all.s3.v_intr = cnt.v_intr;
 	gettimeofday(&tm, (struct timezone *) 0);
 	stats_all.s1.v_intr -= hz*(tm.tv_sec - btm.tv_sec) +
 	    hz*(tm.tv_usec - btm.tv_usec)/1000000;
+	stats_all.s2.v_intr -= hz*(tm.tv_sec - btm.tv_sec) +
+	    hz*(tm.tv_usec - btm.tv_usec)/1000000;
+	stats_all.s3.v_intr -= hz*(tm.tv_sec - btm.tv_sec) +
+	    hz*(tm.tv_usec - btm.tv_usec)/1000000;
 	stats_all.s2.v_swtch = cnt.v_swtch;
+	stats_all.s3.v_swtch = cnt.v_swtch;
 
     {	FILE *fh;
 	if ((fh = fopen("/proc/net/dev", "r")) != NULL) {
@@ -683,6 +727,16 @@
 		stats_all.s1.if_ierrors += ife->stats.rx_errors;
 		stats_all.s1.if_oerrors += ife->stats.tx_errors;
 		stats_all.s1.if_collisions += ife->stats.collisions;
+		stats_all.s2.if_ipackets += ife->stats.rx_packets;
+		stats_all.s2.if_opackets += ife->stats.tx_packets;
+		stats_all.s2.if_ierrors += ife->stats.rx_errors;
+		stats_all.s2.if_oerrors += ife->stats.tx_errors;
+		stats_all.s2.if_collisions += ife->stats.collisions;
+		stats_all.s3.if_ipackets += ife->stats.rx_packets;
+		stats_all.s3.if_opackets += ife->stats.tx_packets;
+		stats_all.s3.if_ierrors += ife->stats.rx_errors;
+		stats_all.s3.if_oerrors += ife->stats.tx_errors;
+		stats_all.s3.if_collisions += ife->stats.collisions;
 	    }
 
 	    fclose(fh);