apache plugin: Support for lighttpd's `BusyServers' field was added.
Merge branch 'collectd-3.11' into merge/master
Conflicts:
contrib/fedora/collectd.spec
Conflicts:
contrib/fedora/collectd.spec
Bumped version to 3.11.2; Updated ChangeLog.
{email,multimeter,users} plugin: Don't pass NULL-pointers to `plugin_submit'.
plugin.c: Catch NULL-pointers and fix it or ignore the values.
Some systems, such as Solaris, cannot handle NULL-pointers being passed to
`printf ("%s", NULL);' or the like. This caused a crash when sending the users
plugin's values over the network under Solaris.
Some systems, such as Solaris, cannot handle NULL-pointers being passed to
`printf ("%s", NULL);' or the like. This caused a crash when sending the users
plugin's values over the network under Solaris.
README: Updated the informatioin about plugins and prerequisites.
dns plugin: Only include and build with `utils_dns.c' if it's actually used.
configure.in: Don't link all objects with `libkstat' and `libdevinfo'.
configure.in: Bump to 3.11.1; Improve the detection of `netinet/udp.h'.
ChangeLog: Added changes for version 3.11.1.
Merge branch 'pull/collectd-3.11' into collectd-3.11
src/utils_mount.c: Fix defines so `cu_mount_getlist' works under Solaris.
Merge branch 'sh/freebsd'
17 years agosrc/utils_dns.c: Fix the handling of the `struct udphdr' under the GNU libc and other...
src/utils_dns.c: Fix the handling of the `struct udphdr' under the GNU libc and other systems.
processes.c, utils_dns.c: Fix compile errors on GNU/kFreeBSD.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Sebastian Harl <sh@tokkee.org>
collection.cgi: Fix typos.
collection.cgi: Reload the images using JavaScript if enabled.
configure.in: Fix typo.
contrib/fedora/collectd.spec: Corrected the position of the init.d-script.
collectd.spec: Moved to `contrib/fedora/'.
Likewise the init.d-script.
Likewise the init.d-script.
collectd.spec: Updates for Fedora.
* Wed Jan 11 2007 Iain Lea <iain@bricbrac.de> 3.11.0-1
- fixed spec file to build correctly on fedora core
- added improved init.d script to work with chkconfig
- added %post and %postun to call chkconfig automatically
* Wed Jan 11 2007 Iain Lea <iain@bricbrac.de> 3.11.0-1
- fixed spec file to build correctly on fedora core
- added improved init.d script to work with chkconfig
- added %post and %postun to call chkconfig automatically
collectd.spec: Updated for version 3.11
Never received any feedback from you and every release still contains a spec
file that is out of date... here is the spec file updated to build ok on fedora
core 3-6.
Never received any feedback from you and every release still contains a spec
file that is out of date... here is the spec file updated to build ok on fedora
core 3-6.
email plugin: Ignore size if it less than or equal to zero.
Some daemons (e.g. postgrey) don't provide any size information.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Some daemons (e.g. postgrey) don't provide any size information.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
sensors plugin: Avoid assertion in ignorelist_match () when not configured.
If the sensors plugin is not configured (i.e. default settings are used) the
ignorelist (sensors_list) is never created causing the assertion in
ignorelist_match () to fail. This fixes it.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
If the sensors plugin is not configured (i.e. default settings are used) the
ignorelist (sensors_list) is never created causing the assertion in
ignorelist_match () to fail. This fixes it.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Bumped version to 3.11.0; Updated ChangeLog.
src/collectd.h: Don't mess with the syslog-stuff if it's present.
No idea where it came from, but it's not necessary, thus remove it. This even
resolves a conflice with some newer glibc version.
No idea where it came from, but it's not necessary, thus remove it. This even
resolves a conflice with some newer glibc version.
AUTHORS: Converted to UTF-8 and added Lubos' efforts.
Added the `mbmon' plugin to the ChangeLog for 3.11.0
.. and Flavio Stanchina to the list of contributors.
.. and Flavio Stanchina to the list of contributors.
Merge branch 'fs/mbmon'
Merge branch 'ls/sensors'
mbmon plugin: Change the definition of the RRD files.
Change the RRD files to be of the same format as the `apple_sensors' or the
`sensors extended' formats.
Change the RRD files to be of the same format as the `apple_sensors' or the
`sensors extended' formats.
Merge branch 'sh/email'
email plugin: Unlock mutexes before submitting the data.
All values are copied to local data structures in email_read () before they
are submitted. Thus the mutex can be unlocked before data is sent to the rrd
files or the network.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
All values are copied to local data structures in email_read () before they
are submitted. Thus the mutex can be unlocked before data is sent to the rrd
files or the network.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Merge branch 'collectd-3.10'
Conflicts:
ChangeLog
Conflicts:
ChangeLog
Bumped version to 3.10.4; Updated ChangeLog.
Bug#404018: Close the file descriptor when binding to a socket fails.
This closes the second part of the bug reported by Max Kellermann.
This closes the second part of the bug reported by Max Kellermann.
Bug#404018: Break out of the `while (loop)'-loop when no socket can be opened.
This fixes the first part of the bug reported by Max Kellermann.
This fixes the first part of the bug reported by Max Kellermann.
New plugin "mbmon" to collect motherboard status information:
temperatures, voltages and cooling fan speeds.
Signed-off-by: Flavio Stanchina <flavio@stanchina.net>
temperatures, voltages and cooling fan speeds.
Signed-off-by: Flavio Stanchina <flavio@stanchina.net>
email plugin: Made read_{char,line} functions static.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Write "0" values as well to distinguish from NaN's.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Sebastian Harl <sh@tokkee.org>
collectd{,.conf}.pod: Extended and clarified documentation of the email plugin.
* Added a description of the protocol and the DS's to the manpage.
* Make clear that the group of the UNIX socket is always changed when running
as root.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
* Added a description of the protocol and the DS's to the manpage.
* Make clear that the group of the UNIX socket is always changed when running
as root.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
sensors plugin: Simplify the reload machanism.
Instead of calling `stat' in the `read' function and then, eventually, calling
the reload stuff, just call the reload function every time and have it return
without doing anything if the config didn't change. This way the reload logic
is not in the read function.
Instead of calling `stat' in the `read' function and then, eventually, calling
the reload stuff, just call the reload function every time and have it return
without doing anything if the config didn't change. This way the reload logic
is not in the read function.
Merge branches 'sh/email' and 'ls/processes'
sensors plugin: Reload lm_sensors' configuration when changed
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
sensors plugin: Made sensors.conf path configurable
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
sensors plugin: syslog() and DBG() calls unification
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
processes plugin: Do not complain of a disappeared task's proc dir
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
email plugin: Prepend the module name to any syslog messages
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Kill threads before closing the associated socket
If the socket is closed before the thread is terminated it might cause some
confusing error messages if the thread wants to read from the socket.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
If the socket is closed before the thread is terminated it might cause some
confusing error messages if the thread wants to read from the socket.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
SA plugin: Documentation updates
Signed-off-by: Alexander Wirt <formorer@formorer.de>
Signed-off-by: Alexander Wirt <formorer@formorer.de>
SA plugin: Added reconnect support (collectd_retries), code cleanup
The plugin now tries to reconnect if connection isn't possible
(default is 3 tries), this can adjusted with the collectd_retries
config parameter.
Signed-off-by: Alexander Wirt <formorer@formorer.de>
The plugin now tries to reconnect if connection isn't possible
(default is 3 tries), this can adjusted with the collectd_retries
config parameter.
Signed-off-by: Alexander Wirt <formorer@formorer.de>
src/Makefile.am: Added utils_dns.h to dns_la_SOURCES.
Without this change the .tar.{bz2,gz} does not contain utils_dns.h.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Without this change the .tar.{bz2,gz} does not contain utils_dns.h.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
contrib/collection.cgi: Added support for the email plugin.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Do not allocate memory for the return value in read_line ().
The read_line () function now uses the provided buffer to save the return
value to. In case no complete line could be read, read_line () is called
recursively until '\n' has been found or end-of-file has been reached.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
The read_line () function now uses the provided buffer to save the return
value to. In case no complete line could be read, read_line () is called
recursively until '\n' has been found or end-of-file has been reached.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Use a thread pool.
Up to now the email plugin created a thread for each connection. This thread
was destroyed after the connection has been closed. Now, a pool containing
MaxConns threads is created and a new connection is assigned to a free thread.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Up to now the email plugin created a thread for each connection. This thread
was destroyed after the connection has been closed. Now, a pool containing
MaxConns threads is created and a new connection is assigned to a free thread.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Prevent a segfault in read_line ().
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Signed-off-by: Sebastian Harl <sh@tokkee.org>
SpamAssassin plugin: Reclicense again und remove debugging die
Due to some misunderstanding Artistic was not the right license so
I should GPL now instead of Artistic.
Additionally I removed a debugging "die" that should never have been checked
in into my svn repo (Thanks tokkee).
Signed-off-by: Alexander Wirt <formorer@formorer.de>
Due to some misunderstanding Artistic was not the right license so
I should GPL now instead of Artistic.
Additionally I removed a debugging "die" that should never have been checked
in into my svn repo (Thanks tokkee).
Signed-off-by: Alexander Wirt <formorer@formorer.de>
SpamAssassin plugin: Update license foo and add timout
Also updated example.cf to reflect the new timeout option
(default is 2 sec.). The whole thing is now dual licensed
(Artistic and Apache License).
Signed-off-by: Alexander Wirt <formorer@formorer.de>
Also updated example.cf to reflect the new timeout option
(default is 2 sec.). The whole thing is now dual licensed
(Artistic and Apache License).
Signed-off-by: Alexander Wirt <formorer@formorer.de>
email plugin: Added some information about this plugin and it's config options to the manpages.
Also updated the README file, fixed a little indentation in `src/collectd.h'
and force the base of the `SocketPerms' to be eight (i. e. assume octal numbers
when setting the permission).
Also updated the README file, fixed a little indentation in `src/collectd.h'
and force the base of the `SocketPerms' to be eight (i. e. assume octal numbers
when setting the permission).
Merge branch 'master' of octo@verplant.org:/var/lib/git/collectd
dns plugin: Documented plugin in the README file and the manpages.
contrib/collection.cgi: Added graphs for `opcode' RRD-files (from the dns plugin)
src/utils_dns.c: Implemented a handler for `DLT_LINUX_SLL'.
This is the ``Linux cooked capture encapsulation'', which is at least returned
when capturing the `any' device under Linux. This patch will strip off the
header and pass the packet to the IPv4 or IPv6 handler, whichever one is
ppropriate.
This is the ``Linux cooked capture encapsulation'', which is at least returned
when capturing the `any' device under Linux. This patch will strip off the
header and pass the packet to the IPv4 or IPv6 handler, whichever one is
ppropriate.
Merge branch 'aw/spamassassin'
Merge branch 'ls/shutdown'
sensors plugin: declare variables only if SENSORS_HAVE_READ
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Merge branch 'ls/shutdown'
sensors plugin: fix shutdown for SENSORS_HAVE_READ
Sorry, too many changes for me to observe at once.
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Sorry, too many changes for me to observe at once.
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
sensors plugin: shutdown implementation
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
sensors plugin: SENSORS_HAVE_READ unification
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Signed-off-by: Stanek Lubos <kolektor@atlas.cz>
Merge branch 'sh/shutdown'
email plugin: Shutdown cleanly.
Using a shutdown function the email plugin closes any sockets, terminates all
running threads and removes the UNIX socket.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Using a shutdown function the email plugin closes any sockets, terminates all
running threads and removes the UNIX socket.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: "Calculate" UNIX_PATH_MAX if it is not defined.
Some systems (e.g. Darwin) do not seem to define UNIX_PATH_MAX at all. Thus I
calculate it from the size of the sun_path character array of struct
sockaddr_un in this case.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Some systems (e.g. Darwin) do not seem to define UNIX_PATH_MAX at all. Thus I
calculate it from the size of the sun_path character array of struct
sockaddr_un in this case.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Make UNIX socket path configurable at compile time.
The prefix for the UNIX socket can be configured using the
COLLECTD_SOCKET_PREFIX macro. "email" will be prepended to it.
If you configure collectd using
CFLAGS="-DCOLLECTD_SOCKET_PREFIX='\"$path-\"'" ./configure
the socket will be found at "$path-email".
Signed-off-by: Sebastian Harl <sh@tokkee.org>
The prefix for the UNIX socket can be configured using the
COLLECTD_SOCKET_PREFIX macro. "email" will be prepended to it.
If you configure collectd using
CFLAGS="-DCOLLECTD_SOCKET_PREFIX='\"$path-\"'" ./configure
the socket will be found at "$path-email".
Signed-off-by: Sebastian Harl <sh@tokkee.org>
dns plugin: Remove unnecessary poll code and use the (blocking) `pcap_loop' function instead.
Not only does this simplify things *a lot* on *BSD and Mac OS X, because you
can't always call `poll' on their filedescriptors, it also simplifies the code
a lot and thus removes potential error sources.
Not only does this simplify things *a lot* on *BSD and Mac OS X, because you
can't always call `poll' on their filedescriptors, it also simplifies the code
a lot and thus removes potential error sources.
dns plugin: Use the standard member names for `struct in6_addr' accesses.
The 32bit members apparently are Linux or glibc specific, so don't use them.
The 32bit members apparently are Linux or glibc specific, so don't use them.
Imported Alexander's SpamAssassin-plugin to contrib/SpamAssassin/
configure.in: Set the default case for `--with--libpthread' to `yes'.
Also removed the `regex' output at the end of the configure run, because it was
empty.
Also removed the `regex' output at the end of the configure run, because it was
empty.
plugin.[ch]: Added support for an optional plugin shutdown function.
A plugin may register a shutdown function using plugin_register_shutdown ().
This function is called when collectd terminates either during normal
termination or after SIGINT or SIGTERM have been received.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
A plugin may register a shutdown function using plugin_register_shutdown ().
This function is called when collectd terminates either during normal
termination or after SIGINT or SIGTERM have been received.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
dns plugin: Fixed a compile error if pcap.h is not found.
If pcap.h is not found, the compiler complains about some "defined but not
used" warnings. As we're using -Werror this causes the build to abort.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
If pcap.h is not found, the compiler complains about some "defined but not
used" warnings. As we're using -Werror this causes the build to abort.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
ChangeLog: Collected the changes so far.
The new version needs to be released soon!
The new version needs to be released soon!
Merge branch 'ff/processes'
email plugin: Limit the `MaxConns' option by a hardcoded value.
Because typos (and ``typos'', i. e. dumb users) happen, it's better to not
allow INT_MAX connections. The problem is that on 32bit machines this would
a) create 2147483648 threads
b) allocate (at least) 512 GBytes of memory
which would result in certain death of either the daemon or the system.
This patch limits the number of connections (and thus threads and allocated
memory) to 16384, which ought to be enough for most people. Those, who need
more connections (and can accomplish this, even though there are quite narrow
OS limits) will need to recompile themselves.
Because typos (and ``typos'', i. e. dumb users) happen, it's better to not
allow INT_MAX connections. The problem is that on 32bit machines this would
a) create 2147483648 threads
b) allocate (at least) 512 GBytes of memory
which would result in certain death of either the daemon or the system.
This patch limits the number of connections (and thus threads and allocated
memory) to 16384, which ought to be enough for most people. Those, who need
more connections (and can accomplish this, even though there are quite narrow
OS limits) will need to recompile themselves.
email plugin: Made socket settings configurable.
Added config file support to the email plugin.
The following options are available:
* "SocketGroup <group name>"
Set the group the UNIX socket belongs to to <group name>.
* "SocketPerms <perms>"
Set the permissions of the UNIX socket to <perms>. No validation is done.
The user has to make sure reasonable values are given.
* "MaxConns <conns>"
The maximum number of concurrent connections is set to <conns>.
<perms> and <conns> may be given as decimal (no prefix), octal (prefix "0") or
sedecimal (a.k.a. hexadecimal, prefix "0x") values.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Added config file support to the email plugin.
The following options are available:
* "SocketGroup <group name>"
Set the group the UNIX socket belongs to to <group name>.
* "SocketPerms <perms>"
Set the permissions of the UNIX socket to <perms>. No validation is done.
The user has to make sure reasonable values are given.
* "MaxConns <conns>"
The maximum number of concurrent connections is set to <conns>.
<perms> and <conns> may be given as decimal (no prefix), octal (prefix "0") or
sedecimal (a.k.a. hexadecimal, prefix "0x") values.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Make it possible to build the plugin write-only.
So far the plugin simply imported `pthread.h'. If this headerfile (or the
library for that case) was not present, building the plugin would fail. This
patch makes `libpthread' a soft dependency, i. e. it's only necessary if you
want to read from the socket. Without `libpthread' being available the plugin
can still be used in server processes.
So far the plugin simply imported `pthread.h'. If this headerfile (or the
library for that case) was not present, building the plugin would fail. This
patch makes `libpthread' a soft dependency, i. e. it's only necessary if you
want to read from the socket. Without `libpthread' being available the plugin
can still be used in server processes.
Merge branches 'ff/dns' and 'sh/email' into next
Conflicts:
configure.in
src/Makefile.am
Conflicts:
configure.in
src/Makefile.am
dns plugin: Improved config checks for the pthread library.
The checks for the pthread-library have been extended to match the other
libraries being used. The dns plugin (in particular `utils_dns.c') has been
verified to build without `libpcap' being present.
The checks for the pthread-library have been extended to match the other
libraries being used. The dns plugin (in particular `utils_dns.c') has been
verified to build without `libpcap' being present.
dns plugin: Added the dns plugin to the sample `collectd.conf'.
email plugin: Use strtok_r() instead of strtok().
strtok() internally uses a static buffer and thus is not thread-safe.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
strtok() internally uses a static buffer and thus is not thread-safe.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Change owner and mode of the UNIX socket if possible.
Set the owner and mode to COLLECTD_GRP_NAME (defaulting to "collectd") and 0770
respectively. A couple of different daemons running as different users might
want to connect to it.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Set the owner and mode to COLLECTD_GRP_NAME (defaulting to "collectd") and 0770
respectively. A couple of different daemons running as different users might
want to connect to it.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
email plugin: Minor code cleanup.
Removed debugging output and whitespaces at end of lines.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
Removed debugging output and whitespaces at end of lines.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
src/utils_ignorelist.c: Fix build-problems when building without regex support.
dns plugin: Check for `libpthread' and link the plugin against it.
dns plugin: Use `pthread_sigmask' rather than `signal'.
dns plugin: Use threads rather than two processes and a pipe.
This is not only much simpler, code wise, but also more elegant and hopefully
faster. This code is alpha quality at best.
This is not only much simpler, code wise, but also more elegant and hopefully
faster. This code is alpha quality at best.
New plugin "email" to collectd ham, spam, ... statistics
This plugin collects email count and size for each type (e.g. ham, spam,
virus, ...) of emails, spam score values and the count of successful spam
checks (e.g. BAYES_99, SUBJECT_DRUG_GAP_C, ...).
These information are provided by external programs which communicate with the
plugin thru a UNIX socket and a simple line-based protocol:
/* e-mail type (e.g. ham, spam, virus, ...) and size */
e:<type>:<bytes>
/* spam score */
s:<value>
/* successful spam checks */
c:<type1>[,<type2>,...]
At most MAX_CONNS (currently set to 5) clients can connect to the plugin
simultaneously. Each connection is handled by a separate thread. Any input
line is limited to 256 characters (including the newline character) which
ought to be enough for anybody[tm] by definition. "c"-lines have to be split
up if they grow longer.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
This plugin collects email count and size for each type (e.g. ham, spam,
virus, ...) of emails, spam score values and the count of successful spam
checks (e.g. BAYES_99, SUBJECT_DRUG_GAP_C, ...).
These information are provided by external programs which communicate with the
plugin thru a UNIX socket and a simple line-based protocol:
/* e-mail type (e.g. ham, spam, virus, ...) and size */
e:<type>:<bytes>
/* spam score */
s:<value>
/* successful spam checks */
c:<type1>[,<type2>,...]
At most MAX_CONNS (currently set to 5) clients can connect to the plugin
simultaneously. Each connection is handled by a separate thread. Any input
line is limited to 256 characters (including the newline character) which
ought to be enough for anybody[tm] by definition. "c"-lines have to be split
up if they grow longer.
Signed-off-by: Sebastian Harl <sh@tokkee.org>
17 years agoconfigure.in: Removed `src/libconfig' from the list of subdirs requireing configuration.
configure.in: Removed `src/libconfig' from the list of subdirs requireing configuration.
Merge branch 'ff/dns'
Conflicts:
configure.in
contrib/collection.cgi
Conflicts:
configure.in
contrib/collection.cgi
17 years agodf plugin: Match `spec_device' rather than `device' when matching the `Device' ignore...
df plugin: Match `spec_device' rather than `device' when matching the `Device' ignorelist.
src/Makefile.am: Install the `collectd.conf' with restricted permissions, 0640.
Thanks to Lubos for suggesting this :)
Thanks to Lubos for suggesting this :)