Re: [collectd] collectd-5.0.1-mine.patch some processes.c fixes for FreeBSD

2012-02-19 Thread Phil Kulin
Bump! What about this bug? More than two releases...

2012/1/8 Phil Kulin sch...@gmail.com:
 I welcome from rainy Ingermanland!

 Our thoughts are now occupied by Putin and vodka, however...

 I have paid attention to a little incorrect data which is given out by
 a processes plugin on my beautifull FreeBSD system.
 I have corrected them and in process have made absolutely slightly
 have improved accuracy and productivity of a processes plugin for
 FreeBSD systems.

 - Fix strange plural call of getpagesize(). Has entered a global
 variable and initialization procedure for FreeBSD
 - Data was summarized on all processes including threads. It led to
 absolutely uncertain result. Fix based on codebase of FreeBSD top
 programm. KERN_PROC_ALL attribute keep for future purposes.
 - Gets command argument failed for some processes as system and some
 other. It led to error messages to console. Fix based on codebase of
 FreeBSD top programm.
 - System and user CPU times turned out from the sum of miliseconds
 and... Oh! microseconds in one glass with overflow possibility. Fixed.

 My girlfriend has left me for such Christmas vacation, but I am
 assured that have made good business.

 Patch in mail attachment.

 --
 Non nobis Domine non nobis sed Nomini Tuo da gloriam
 Phil Kulin



-- 
Non nobis Domine non nobis sed Nomini Tuo da gloriam
Phil Kulin

___
collectd mailing list
collectd@verplant.org
http://mailman.verplant.org/listinfo/collectd


Re: [collectd] collectd-5.0.1-mine.patch some processes.c fixes for FreeBSD

2012-02-19 Thread Florian Forster
Hey Phil,

thank you very much for your patch :)

I've created a branch, pk/processes, which is available at
https://github.com/octo/collectd/tree/pk/processes. I've applied a few
coding style fixes. Can you please verify that I didn't accidentally
break anything?

Best regards,
—octo
-- 
collectd – The system statistics collection daemon
Website: http://collectd.org
Google+: http://collectd.org/+
Github:  https://github.com/collectd
Twitter: http://twitter.com/collectd


signature.asc
Description: Digital signature
___
collectd mailing list
collectd@verplant.org
http://mailman.verplant.org/listinfo/collectd


[collectd] collectd-5.0.1-mine.patch some processes.c fixes for FreeBSD

2012-01-08 Thread Phil Kulin
I welcome from rainy Ingermanland!

Our thoughts are now occupied by Putin and vodka, however...

I have paid attention to a little incorrect data which is given out by
a processes plugin on my beautifull FreeBSD system.
I have corrected them and in process have made absolutely slightly
have improved accuracy and productivity of a processes plugin for
FreeBSD systems.

- Fix strange plural call of getpagesize(). Has entered a global
variable and initialization procedure for FreeBSD
- Data was summarized on all processes including threads. It led to
absolutely uncertain result. Fix based on codebase of FreeBSD top
programm. KERN_PROC_ALL attribute keep for future purposes.
- Gets command argument failed for some processes as system and some
other. It led to error messages to console. Fix based on codebase of
FreeBSD top programm.
- System and user CPU times turned out from the sum of miliseconds
and... Oh! microseconds in one glass with overflow possibility. Fixed.

My girlfriend has left me for such Christmas vacation, but I am
assured that have made good business.

Patch in mail attachment.

-- 
Non nobis Domine non nobis sed Nomini Tuo da gloriam
Phil Kulin
diff -pur collectd-5.0.1/src/processes.c collectd-5.0.1-mine/src/processes.c
--- collectd-5.0.1/src/processes.c	2011-10-15 00:49:49.0 +0400
+++ collectd-5.0.1-mine/src/processes.c	2012-01-08 20:23:29.0 +0400
@@ -200,7 +200,7 @@ static long pagesize_g;
 /* #endif KERNEL_LINUX */
 
 #elif HAVE_LIBKVM_GETPROCS  HAVE_STRUCT_KINFO_PROC_FREEBSD
-/* no global variables */
+static int pagesize;
 /* #endif HAVE_LIBKVM_GETPROCS  HAVE_STRUCT_KINFO_PROC_FREEBSD */
 
 #elif HAVE_PROCINFO_H
@@ -609,7 +609,7 @@ static int ps_init (void)
 /* #endif KERNEL_LINUX */
 
 #elif HAVE_LIBKVM_GETPROCS  HAVE_STRUCT_KINFO_PROC_FREEBSD
-/* no initialization */
+	pagesize = getpagesize();
 /* #endif HAVE_LIBKVM_GETPROCS  HAVE_STRUCT_KINFO_PROC_FREEBSD */
 
 #elif HAVE_PROCINFO_H
@@ -1586,6 +1586,8 @@ static int ps_read (void)
   	int count; /* returns number of processes */
 	int i;
 
+	struct kinfo_proc *prev_pp = NULL;
+
 	procstat_t *ps_ptr;
 	procstat_entry_t pse;
 
@@ -1599,7 +1601,6 @@ static int ps_read (void)
 errbuf);
 		return (0);
 	}
-
 	/* Get the list of processes. */
 	procs = kvm_getprocs(kd, KERN_PROC_ALL, 0, count);
 	if (procs == NULL)
@@ -1613,64 +1614,84 @@ static int ps_read (void)
 	/* Iterate through the processes in kinfo_proc */
 	for (i = 0; i  count; i++)
 	{
-		/* retrieve the arguments */
-		cmdline[0] = 0;
-		cmdline_ptr = NULL;
-
-		argv = kvm_getargv (kd, (const struct kinfo_proc *) (procs[i]), 0);
-		if (argv != NULL)
+		if (prev_pp == NULL || prev_pp-ki_pid != procs[i].ki_pid) 
 		{
-			int status;
-			int argc;
+			/* store previos structure */
+			prev_pp = (procs[i]);
+			/* retrieve the arguments */
+			cmdline[0] = 0;
+			cmdline_ptr = NULL;
+			/* not probe system processes and processes without arguments*/
+			if ( !(procs[i].ki_flag  P_SYSTEM)  procs[i].ki_args != NULL )
+			{
+argv = kvm_getargv (kd, (const struct kinfo_proc *) (procs[i]), 0);
+if ( argv != NULL  *argv ) 
+{
+	int status;
+	int argc;
 
-			argc = 0;
-			while (argv[argc] != NULL)
-argc++;
+	argc = 0;
+	while (argv[argc] != NULL)
+		argc++;
 
-			status = strjoin (cmdline, sizeof (cmdline),
-	argv, argc,  );
+	status = strjoin (cmdline, sizeof (cmdline),
+			argv, argc,  );
 
-			if (status  0)
-			{
-WARNING (processes plugin: Command line did 
-		not fit into buffer.);
-			}
-			else
-			{
-cmdline_ptr = cmdline[0];
+	if (status  0)
+	{
+		WARNING (processes plugin: Command line did 
+not fit into buffer.);
+	}
+	else
+	{
+		cmdline_ptr = cmdline[0];
+	}
+}
 			}
-		}
 
-		pse.id   = procs[i].ki_pid;
-		pse.age  = 0;
+			pse.id   = procs[i].ki_pid;
+			pse.age  = 0;
 
-		pse.num_proc = 1;
-		pse.num_lwp  = procs[i].ki_numthreads;
+			pse.num_proc = 1;
+			pse.num_lwp  = procs[i].ki_numthreads;
 
-		pse.vmem_size = procs[i].ki_size;
-		pse.vmem_rss = procs[i].ki_rssize * getpagesize();
-		pse.vmem_data = procs[i].ki_dsize * getpagesize();
-		pse.vmem_code = procs[i].ki_tsize * getpagesize();
-		pse.stack_size = procs[i].ki_ssize * getpagesize();
-		pse.vmem_minflt = 0;
-		pse.vmem_minflt_counter = procs[i].ki_rusage.ru_minflt;
-		pse.vmem_majflt = 0;
-		pse.vmem_majflt_counter = procs[i].ki_rusage.ru_majflt;
+			pse.vmem_size = procs[i].ki_size;
+			pse.vmem_rss = procs[i].ki_rssize * pagesize;
+			pse.vmem_data = procs[i].ki_dsize * pagesize;
+			pse.vmem_code = procs[i].ki_tsize * pagesize;
+			pse.stack_size = procs[i].ki_ssize * pagesize;
+			pse.vmem_minflt = 0;
+			pse.vmem_minflt_counter = procs[i].ki_rusage.ru_minflt;
+			pse.vmem_majflt = 0;
+			pse.vmem_majflt_counter = procs[i].ki_rusage.ru_majflt;
 
-		pse.cpu_user = 0;
-		pse.cpu_user_counter = procs[i].ki_rusage.ru_utime.tv_sec
-			* 1000
-			

Re: [collectd] collectd-5.0.1-mine.patch some processes.c fixes for FreeBSD

2012-01-08 Thread Toni Ylenius
On Sunday 08 January 2012 18:50:27 Phil Kulin wrote:
 I welcome from rainy Ingermanland!
 
 Our thoughts are now occupied by Putin and vodka, however...
 
 I have paid attention to a little incorrect data which is given out by
 a processes plugin on my beautifull FreeBSD system.
 I have corrected them and in process have made absolutely slightly
 have improved accuracy and productivity of a processes plugin for
 FreeBSD systems.
 
 - Fix strange plural call of getpagesize(). Has entered a global
 variable and initialization procedure for FreeBSD
 - Data was summarized on all processes including threads. It led to
 absolutely uncertain result. Fix based on codebase of FreeBSD top
 programm. KERN_PROC_ALL attribute keep for future purposes.
 - Gets command argument failed for some processes as system and some
 other. It led to error messages to console. Fix based on codebase of
 FreeBSD top programm.
 - System and user CPU times turned out from the sum of miliseconds
 and... Oh! microseconds in one glass with overflow possibility. Fixed.
 
 My girlfriend has left me for such Christmas vacation, but I am
 assured that have made good business.
 
 Patch in mail attachment.

Hi Phil,

I got following errors (warnings) when I tried to make collectd with your 
patch

processes.c: In function 'ps_read':
processes.c:1592: warning: 'pse.cpu_user_counter' may be used uninitialized in 
this function
processes.c:1592: warning: 'pse.cpu_system_counter' may be used uninitialized 
in this function

I added pse.cpu_user_counter = 0; and pse.cpu_system_counter = 0; after 
pse.cpu_system = 0; to remove the warnings.

Thanks for your interesting patch.
Toni Ylenius
___
collectd mailing list
collectd@verplant.org
http://mailman.verplant.org/listinfo/collectd