RE: [Nagios-devel] Defining services at runtime

Support forum for Nagios Core, Nagios Plugins, NCPA, NRPE, NSCA, NDOUtils and more. Engage with the community of users including those using the open source solutions.
Locked
Guest

RE: [Nagios-devel] Defining services at runtime

Post by Guest »

Thanks for your reply Bob.

Comments are inline.

> -----Original Message-----
> From: [email protected] [mailto:nagios-devel-
> [email protected]] On Behalf Of Bob Ingraham
> Sent: 11 May 2006 15:08
> To: Sam Stickland
> Cc: [email protected]
> Subject: RE: [Nagios-devel] Defining services at runtime


> >
> > * Create for existing services
> >
> > I notice that Nagios-db gets it's configuration information from the
> > following callback:
>
>
> Which callback were you thinking of?

The message got sent too early first time around. The second message didn't
mention this :)

> > * Create a new service check
> >
> > nebstructs.h defines a struct "nebstruct_service_check_struct". However,
> > this seems to be the only place this struct is referred to in the header
> > files. How do I pass a completed struct to Nagios?
> >
> > It looks reality straight forward to work out how to fill out this
> struct,
> > but "char *host_name;" could be a problem. The plugin is only going to
> > know
> > the host address, so I'll need a way to get a hostname from an address.
>
> You can't add a service to Nagios using the
> nebstruct_service_check_struct; in fact you can't add anything to Nagios
> using any of the nebstruct_* structure. They are one-way, informational
> only - passed down to your module. When your module returns, Nagios never
> examines the structure that it passed to you for changes.
>
> The way to add a service from within a NEB module would be to call the
> internal "add_service()" function. It's the same one that Nagios uses to
> add services during configuration load.
>
> The API for the add_service() function is:

OK, that makes sense. Of course, the need to get the host_name from the host
address still remains.

> However, you have a significant problem with your above strategy:


> So, you have a timing issue:

> One strategy might be to have your service_check either:
>
> - Return the list of services it wants created as a result string
> (although, you might not have enough space to do so on one line,) and then
> have your callback routine create services based on the contents of the
> results string, or
>
> - Your service check writes it results to a temp file or IPC message queue
> or some such, and your callback routine then reads this file (or from the
> message queue,) and creates the services based upon that information
> source.
>
> I'm sure that there are many other ways to do this...
>
> Anyway, anyone please correct me if I'm off on any of this, but that's how
> I understand the way the callback routine mechanism works.

Yes, I understand the issue here. The code here

http://www.louisville.edu/~tjande01/nagios/exthandler.c

uses a schedule_new_event callback that executes once a second in order to
handle the socket code. Personally, I'd prefer to spawn a new thread to
handle the socket communication with the check-command. This ties into the
last thing that got missed off my original email that is:

* Submit passive service check results

The old school method of doing this is via the external command file, but I
presume the new API has a method of doing this? There's some functions in
broker.h that look like likely candidates, but they don't even have basic
comments ;) (e.g. broker_service_check).

The check-command that reports back to the broker module would only return
state based on its ability to reach the switch and to talk to the broker
module.

Sam






This post was automatically imported from historical nagios-devel mailing list archives
Original poster: [email protected]
Locked