]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2004-01-16 11:12:26 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Fri, 16 Jan 2004 11:12:26 +0000 (11:12 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Fri, 16 Jan 2004 11:12:26 +0000 (11:12 +0000)
some bugs in plugin_xmms fixed, parsing moved to own function
plugin_proc_stat nearly finished

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@317 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

hash.h
plugin_cpuinfo.c
plugin_proc_stat.c
plugin_xmms.c

diff --git a/hash.h b/hash.h
index d410d3dc306b2a899006a6a4409d18600c1e1a6f..7ab163489095597b349bd458e9d09e28790daeb5 100644 (file)
--- a/hash.h
+++ b/hash.h
@@ -1,4 +1,4 @@
-/* $Id: hash.h,v 1.3 2004/01/16 07:26:25 reinelt Exp $
+/* $Id: hash.h,v 1.4 2004/01/16 11:12:26 reinelt Exp $
  *
  * hashes (associative arrays)
  *
  *
  *
  * $Log: hash.h,v $
+ * Revision 1.4  2004/01/16 11:12:26  reinelt
+ * some bugs in plugin_xmms fixed, parsing moved to own function
+ * plugin_proc_stat nearly finished
+ *
  * Revision 1.3  2004/01/16 07:26:25  reinelt
  * moved various /proc parsing to own functions
  * made some progress with /proc/stat parsing
@@ -56,7 +60,7 @@ typedef struct {
 
 
 typedef struct {
-  struct timeval time;
+  // struct timeval time;
   double val;
 } FILTER_SLOT;
 
index efa5d4a5f3a3a886e41e0b2adfcfac36752a407b..11020564c3d181004cf284fd45273b26dc6720fe 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: plugin_cpuinfo.c,v 1.4 2004/01/16 07:26:25 reinelt Exp $
+/* $Id: plugin_cpuinfo.c,v 1.5 2004/01/16 11:12:26 reinelt Exp $
  *
  * plugin for /proc/cpuinfo parsing
  *
  *
  *
  * $Log: plugin_cpuinfo.c,v $
+ * Revision 1.5  2004/01/16 11:12:26  reinelt
+ * some bugs in plugin_xmms fixed, parsing moved to own function
+ * plugin_proc_stat nearly finished
+ *
  * Revision 1.4  2004/01/16 07:26:25  reinelt
  * moved various /proc parsing to own functions
  * made some progress with /proc/stat parsing
@@ -100,7 +104,7 @@ static int parse_cpuinfo (void)
     // strip trailing blanks from value
     for (c=val; *c!='\0';c++);
     while (isspace(*--c)) *c='\0';
-      
+    
     // add entry to hash table
     hash_set (&CPUinfo, key, val);
       
index e7b9bf826e25705e81df87d22ff50387da0e41e8..90ddd459beb65c16e1fbd288eef10f226a1a2c17 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: plugin_proc_stat.c,v 1.2 2004/01/16 07:26:25 reinelt Exp $
+/* $Id: plugin_proc_stat.c,v 1.3 2004/01/16 11:12:26 reinelt Exp $
  *
  * plugin for /proc/stat parsing
  *
  *
  *
  * $Log: plugin_proc_stat.c,v $
+ * Revision 1.3  2004/01/16 11:12:26  reinelt
+ * some bugs in plugin_xmms fixed, parsing moved to own function
+ * plugin_proc_stat nearly finished
+ *
  * Revision 1.2  2004/01/16 07:26:25  reinelt
  * moved various /proc parsing to own functions
  * made some progress with /proc/stat parsing
@@ -79,12 +83,26 @@ static int renew(int msec)
 }
 
 
-static void my_hash_set (char *key1, char *key2, char *val) 
+static void hash_set1 (char *key1, char *val) 
 {
-  char key[16];
+  hash_set (&Stat, key1, val);
+}
+
+static void hash_set2 (char *key1, char *key2, char *val) 
+{
+  char key[32];
   
   snprintf (key, sizeof(key), "%s.%s", key1, key2);
-  debug ("Michi: hash_set(%s, %s)", key, val);
+  // debug ("Michi: hash_set(%s, %s)", key, val);
+  hash_set (&Stat, key, val);
+}
+
+static void hash_set3 (char *key1, char *key2, char *key3, char *val) 
+{
+  char key[32];
+  
+  snprintf (key, sizeof(key), "%s.%s.%s", key1, key2, key3);
+  debug ("Michi: hash_set(%s)=<%s>", key, val);
   hash_set (&Stat, key, val);
 }
 
@@ -103,34 +121,64 @@ static int parse_proc_stat (void)
   }
   
   while (!feof(stream)) {
-    char buffer[256];
-    fgets (buffer, sizeof(buffer), stream);
-    
+    char buffer[1024];
+    if (fgets (buffer, sizeof(buffer), stream) ==NULL) break;
     if (strncmp(buffer, "cpu", 3)==0) {
       char *cpu;
-      cpu=strtok(buffer, " \t");
-      my_hash_set (cpu, "user",   strtok(NULL, " \t"));
-      my_hash_set (cpu, "nice",   strtok(NULL, " \t"));
-      my_hash_set (cpu, "system", strtok(NULL, " \t"));
-      my_hash_set (cpu, "idle",   strtok(NULL, " \t"));
+      cpu=strtok(buffer, " \t\n");
+      hash_set2 (cpu, "user",   strtok(NULL, " \t\n"));
+      hash_set2 (cpu, "nice",   strtok(NULL, " \t\n"));
+      hash_set2 (cpu, "system", strtok(NULL, " \t\n"));
+      hash_set2 (cpu, "idle",   strtok(NULL, " \t\n"));
     } 
     else if (strncmp(buffer, "page ", 5)==0) {
-      
+      strtok(buffer, " \t\n");
+      hash_set2 ("page", "in",  strtok(NULL, " \t\n"));
+      hash_set2 ("page", "out", strtok(NULL, " \t\n"));
     } 
     else if (strncmp(buffer, "swap ", 5)==0) {
+      strtok(buffer, " \t\n");
+      hash_set2 ("swap", "in",  strtok(NULL, " \t\n"));
+      hash_set2 ("swap", "out", strtok(NULL, " \t\n"));
     } 
     else if (strncmp(buffer, "intr ", 5)==0) {
+      int i;
+      strtok(buffer, " \t\n");
+      hash_set2 ("intr", "sum", strtok(NULL, " \t\n"));
+      for (i=0; i<16; i++) {
+       char buffer[3];
+       snprintf(buffer, sizeof(buffer), "%d", i);
+       hash_set2 ("intr", buffer, strtok(NULL, " \t\n"));
+      }
     } 
     else if (strncmp(buffer, "disk_io:", 8)==0) {
+      char *dev=strtok(buffer+8, " \t\n:()");
+      while (dev!=NULL) {
+       char *p;
+       while ((p=strchr(dev, ','))!=NULL) *p=':';
+       hash_set3 ("disk_io", dev, "io",   strtok(NULL, " :(,"));
+       hash_set3 ("disk_io", dev, "rio",  strtok(NULL, " ,"));
+       hash_set3 ("disk_io", dev, "rblk", strtok(NULL, " ,"));
+       hash_set3 ("disk_io", dev, "wio",  strtok(NULL, " ,"));
+       hash_set3 ("disk_io", dev, "wblk", strtok(NULL, " ,)"));
+       // Fixme: check this one...
+       dev=strtok(NULL, " \t\n:()");
+      }
     } 
     else if (strncmp(buffer, "ctxt ", 5)==0) {
+      strtok(buffer, " \t\n");
+      hash_set2 ("ctxt", NULL, strtok(NULL, " \t\n"));
     } 
-    else if (strncmp(buffer, "btime ", 5)==0) {
+    else if (strncmp(buffer, "btime ", 6)==0) {
+      strtok(buffer, " \t\n");
+      hash_set2 ("btime", NULL, strtok(NULL, " \t\n"));
     } 
-    else if (strncmp(buffer, "processes ", 5)==0) {
+    else if (strncmp(buffer, "processes ", 10)==0) {
+      strtok(buffer, " \t\n");
+      hash_set1 ("processes", strtok(NULL, " \t\n"));
     } 
     else {
-      error ("unknown line <%s> from /proc/stat");
+      error ("internal error: unhandled entry '%s' from /proc/stat", strtok(buffer, " \t\n"));
     }
   }
   fclose (stream);
index 700b82841d04bba29bb47d9d392635e3b5f19d46..4759196e0e4e083ed836921965abaafc6d2e5d11 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: plugin_xmms.c,v 1.3 2004/01/16 10:09:49 mkeil Exp $
+/* $Id: plugin_xmms.c,v 1.4 2004/01/16 11:12:26 reinelt Exp $
  *
  * XMMS-Plugin for LCD4Linux
  * Copyright 2003 Markus Keil <markus_keil@t-online.de>
  *
  *
  * $Log: plugin_xmms.c,v $
+ * Revision 1.4  2004/01/16 11:12:26  reinelt
+ * some bugs in plugin_xmms fixed, parsing moved to own function
+ * plugin_proc_stat nearly finished
+ *
  * Revision 1.3  2004/01/16 10:09:49  mkeil
  *   -include caching for values
  *
 
 #include <string.h>
 #include <stdio.h>
+#include <ctype.h>
 #include <time.h>
 
 #include "hash.h"
 #include "debug.h"
 #include "plugin.h"
 
-static void my_xmms (RESULT *result, RESULT *arg1)
-{      
-  static HASH xmms = { 0, 0, NULL };
-  char *hash_key, *val;
+
+static HASH xmms = { 0, 0, NULL };
+
+
+static int parse_xmms_info (void)
+{
   static time_t now=0;
   FILE *xmms_stream;
   char zeile[200];
-  char *key=R2S(arg1);
-  int len=strlen(key);
   
   // reread every second only
-  if (time(NULL)!=now) { 
-
-  //Open Filestream for '/tmp/xmms-info'
+  if (time(NULL)==now) return 0;
+  time(&now);
+  
+  // Open Filestream for '/tmp/xmms-info'
   xmms_stream = fopen("/tmp/xmms-info","r");
 
-  //Check for File
+  // Check for File
   if( !xmms_stream ) {
     error("Error: Cannot open XMMS-Info Stream! Is XMMS started?");
-    SetResult(&result, R_STRING, "");
-    return;
+    return -1;
   }
   
-  //Read Lines from the Stream
-  while(fgets(zeile,200,xmms_stream)) {
-   hash_key=key; val=zeile; 
-   if (strncmp(key, zeile, len)==0 && zeile[len]==':') {
-      // remove trailing newline
-      zeile[strlen(zeile)-1]='\0';
-      // add entry to hash table
-      val=zeile+len+2;
-      hash_set (&xmms, hash_key, val);
-      time(&now);
-      fclose(xmms_stream);
-    }
-   }
+  // Read Lines from the Stream
+  while(fgets(zeile,sizeof(zeile),xmms_stream)) {
+    char *c, *key, *val;
+    c=strchr(zeile, ':');
+    if (c==NULL) continue;
+    key=zeile; val=c+1;
+    // strip leading blanks from key
+    while (isspace(*key)) *key++='\0';
+    // strip trailing blanks from key
+    do *c='\0'; while (isspace(*--c));
+    // strip leading blanks from value
+    while (isspace(*val)) *val++='\0';
+    // strip trailing blanks from value
+    for (c=val; *c!='\0';c++);
+    while (isspace(*--c)) *c='\0';
+    hash_set (&xmms, key, val);
   }
-  hash_key=R2S(arg1);
-  val=hash_get(&xmms, hash_key);
-  if (val==NULL) val="";
+  
+  fclose(xmms_stream);
+  return 0;
+  
+}
 
+static void my_xmms (RESULT *result, RESULT *arg1)
+{      
+  char *key, *val;
+
+  if (parse_xmms_info()<0) {
+    SetResult(&result, R_STRING, ""); 
+    return;
+  }
+   
+  key=R2S(arg1);
+  val=hash_get(&xmms, key);
+  if (val==NULL) val="";
+  
   SetResult(&result, R_STRING, val);
 }