Re: [Ganglia-developers] Fwd: Getting started with developing a C++ DSO module

2009-11-16 Thread Sylvester Steele
Kim,

I got the tarball to which you'd put up the link earlier on in the mailing
list. I got your module to work no problem there!

But, I have a question: 

All the Ganglia modules have a metric array. The mod_cpu has this:

static Ganglia_25metric cpu_metric_info[] = 
{
{0, cpu_num,1200, GANGLIA_VALUE_UNSIGNED_SHORT, CPUs, zero,
%hu,  UDP_HEADER_SIZE+8, Total number of CPUs},
{0, cpu_speed,  1200, GANGLIA_VALUE_UNSIGNED_INT,   MHz,  zero,
%u,  UDP_HEADER_SIZE+8, CPU Speed in terms of MHz},
{0, cpu_user, 90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
while executing at the user level},
{0, cpu_nice, 90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
while executing at the user level with nice priority},
{0, cpu_system,   90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
while executing at the system level},
{0, cpu_idle, 90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, Percentage of time that the CPU or CPUs were
idle and the system did not have an outstanding disk I/O request},
{0, cpu_aidle,  3800, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, Percent of time since boot idle CPU},
{0, cpu_wio,  90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, Percentage of time that the CPU or CPUs were
idle during which the system had an outstanding disk I/O request},
{0, cpu_intr, 90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, cpu_intr},
{0, cpu_sintr,90, GANGLIA_VALUE_FLOAT,  %,both,
%.1f, UDP_HEADER_SIZE+8, cpu_sintr},
{0, NULL}

};


Now, what if the number of metrics that my module monitors changes? Ie If I
want to monitor 5 metrics today but 10 tomorrow- Is it possible to
dynamically initialize the metrics somehow?

Will the following work:


For (how many ever metrics)
{
cpu_metric_info[i]= appropriate string
}

And put this for loop in the metric_init function..

Will that do the trick?

Thanks,
Sylvester


--
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
___
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers


Re: [Ganglia-developers] Fwd: Getting started with developing a C++ DSO module

2009-11-16 Thread JB Kim
There are more qualified people on this list to answer your question
about dynamically setting metric callbacks.
But a quick glance through gmond.c reveals that it might not be
possible with the current framework.

When gmond starts up, it calls the function setup_metric_callbacks(),
which steps through linked list of mmodule objects (core/DSO) and
registers callbacks based on your metric_info array. This happens in
the beginning within the main() block. So unless you are planning to
bounce the gmond each day and have it initialize the metric_info array
differently each time, you won't be able to do this during runtime.

Hope that helps.
JB

On Mon, Nov 16, 2009 at 5:04 PM, Sylvester Steele
sylvesterste...@gmail.com wrote:
 Kim,

 I got the tarball to which you'd put up the link earlier on in the mailing
 list. I got your module to work no problem there!

 But, I have a question:

 All the Ganglia modules have a metric array. The mod_cpu has this:

 static Ganglia_25metric cpu_metric_info[] =
 {
    {0, cpu_num,    1200, GANGLIA_VALUE_UNSIGNED_SHORT, CPUs, zero,
 %hu,  UDP_HEADER_SIZE+8, Total number of CPUs},
    {0, cpu_speed,  1200, GANGLIA_VALUE_UNSIGNED_INT,   MHz,  zero,
 %u,  UDP_HEADER_SIZE+8, CPU Speed in terms of MHz},
    {0, cpu_user,     90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
 while executing at the user level},
    {0, cpu_nice,     90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
 while executing at the user level with nice priority},
    {0, cpu_system,   90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
 while executing at the system level},
    {0, cpu_idle,     90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of time that the CPU or CPUs were
 idle and the system did not have an outstanding disk I/O request},
    {0, cpu_aidle,  3800, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, Percent of time since boot idle CPU},
    {0, cpu_wio,      90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of time that the CPU or CPUs were
 idle during which the system had an outstanding disk I/O request},
    {0, cpu_intr,     90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, cpu_intr},
    {0, cpu_sintr,    90, GANGLIA_VALUE_FLOAT,          %,    both,
 %.1f, UDP_HEADER_SIZE+8, cpu_sintr},
    {0, NULL}

 };


 Now, what if the number of metrics that my module monitors changes? Ie If I
 want to monitor 5 metrics today but 10 tomorrow- Is it possible to
 dynamically initialize the metrics somehow?

 Will the following work:


 For (how many ever metrics)
 {
 cpu_metric_info[i]= appropriate string
 }

 And put this for loop in the metric_init function..

 Will that do the trick?

 Thanks,
 Sylvester


 --
 Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
 trial. Simplify your report design, integration and deployment - and focus on
 what you do best, core application coding. Discover what's new with
 Crystal Reports now.  http://p.sf.net/sfu/bobj-july
 ___
 Ganglia-developers mailing list
 Ganglia-developers@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/ganglia-developers


--
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
___
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers


Re: [Ganglia-developers] Fwd: Getting started with developing a C++ DSO module

2009-11-16 Thread Brad Nicholes
 On 11/16/2009 at 3:04 PM, in message 002c01ca6708$d7770020$866500...@com,
Sylvester Steele sylvesterste...@gmail.com wrote:
 Kim,
 
 I got the tarball to which you'd put up the link earlier on in the mailing
 list. I got your module to work no problem there!
 
 But, I have a question: 
 
 All the Ganglia modules have a metric array. The mod_cpu has this:
 
 static Ganglia_25metric cpu_metric_info[] = 
 {
 {0, cpu_num,1200, GANGLIA_VALUE_UNSIGNED_SHORT, CPUs, zero,
 %hu,  UDP_HEADER_SIZE+8, Total number of CPUs},
 {0, cpu_speed,  1200, GANGLIA_VALUE_UNSIGNED_INT,   MHz,  zero,
 %u,  UDP_HEADER_SIZE+8, CPU Speed in terms of MHz},
 {0, cpu_user, 90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
 while executing at the user level},
 {0, cpu_nice, 90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
 while executing at the user level with nice priority},
 {0, cpu_system,   90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of CPU utilization that occurred
 while executing at the system level},
 {0, cpu_idle, 90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of time that the CPU or CPUs were
 idle and the system did not have an outstanding disk I/O request},
 {0, cpu_aidle,  3800, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, Percent of time since boot idle CPU},
 {0, cpu_wio,  90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, Percentage of time that the CPU or CPUs were
 idle during which the system had an outstanding disk I/O request},
 {0, cpu_intr, 90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, cpu_intr},
 {0, cpu_sintr,90, GANGLIA_VALUE_FLOAT,  %,both,
 %.1f, UDP_HEADER_SIZE+8, cpu_sintr},
 {0, NULL}
   
 };
 
 
 Now, what if the number of metrics that my module monitors changes? Ie If I
 want to monitor 5 metrics today but 10 tomorrow- Is it possible to
 dynamically initialize the metrics somehow?
 
 Will the following work:
 
 
 For (how many ever metrics)
 {
 cpu_metric_info[i]= appropriate string
 }
 
 And put this for loop in the metric_init function..
 
 Will that do the trick?
 


Take a look at the pyth_metric_init() function in the mod_python.c module.  At 
the end of the function, mod_python takes all of the metric definitions and 
pushes them into an APR array.  Then it sets the metric_info field of the 
module structure with the metric_info-elts value.

python_module.metrics_info = (Ganglia_25metric *)metric_info-elts;

Basically it is just a matter of calling the APR function 
apr_array_push(metric_info); for each metric definition and then filling in the 
structure that is returned.

Brad




--
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
___
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers