monit-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Arkadiusz Miskiewicz] use /proc/meminfo instead of /proc/kcore (correct


From: Jan-Henrik Haukeland
Subject: [Arkadiusz Miskiewicz] use /proc/meminfo instead of /proc/kcore (correct version of the patch)
Date: Mon, 08 Sep 2003 20:54:09 +0200
User-agent: Gnus/5.1002 (Gnus v5.10.2) XEmacs/21.4 (Reasonable Discussion, linux)

What do you think Christian?

--- Begin Message --- Subject: use /proc/meminfo instead of /proc/kcore (correct version of the patch) Date: Mon, 8 Sep 2003 20:03:55 +0200 User-agent: KMail/1.5.3
diff -urN monit-4.0.org/process/sysdep_LINUX.c 
monit-4.0/process/sysdep_LINUX.c
--- monit-4.0.org/process/sysdep_LINUX.c        2003-09-08 19:20:44.000000000 
+0200
+++ monit-4.0/process/sysdep_LINUX.c    2003-09-08 19:26:46.000000000 +0200
@@ -84,24 +84,38 @@
  *  @file
  */
 
-#define PAGE_TO_KBYTE_SHIFT PAGE_SHIFT-10
+#define        PAGE_TO_KBYTE_SHIFT PAGE_SHIFT-10
+#define FREEMEM         "MemFree:"
+#define FREESWAP        "SwapFree:"
 
 int init_process_info_sysdep(void) {
 
-  struct stat buf;
-  
+  int memfd;
+  char buf[1024], *ptr1, *ptr2;
 
-  /* I hope this is okay hack to get the total memsize. (-: */
+  if ((memfd = open("/proc/meminfo", O_RDONLY)) == -1) {
+      return FALSE;
+  }
 
-  if ( stat("/proc/kcore", &buf) != 0 ) {
+  /* read the file */
+  if (read(memfd, buf, sizeof(buf)) < 0) {
+      close(memfd);
+      return FALSE;
+  }
 
-    return FALSE;
+  close(memfd);
+  
+  ptr1 = strstr(buf, FREEMEM);
+  ptr2 = strstr(buf, FREESWAP);
 
+  if (!ptr1 || !ptr2) {
+      return FALSE;
   }
 
-  num_cpus= sysconf(_SC_NPROCESSORS_CONF);
+  /* we only care about integer values */
+  mem_kbyte_max = atoi(ptr1+strlen(FREEMEM)) /* + atoi(ptr2+strlen(FREESWAP)) 
*/ ;
 
-  mem_kbyte_max = buf.st_size>>10;
+  num_cpus= sysconf(_SC_NPROCESSORS_CONF);
 
   return TRUE;
 

-- 
Arkadiusz Miƛkiewicz, Grupa BeeProvider - http://www.beep.pl/



--- End Message ---

-- 
Jan-Henrik Haukeland

reply via email to

[Prev in Thread] Current Thread [Next in Thread]