2.0b3 hacks: checks.c - failure message from one plugin as output of (2) others ...
Stanley Hopcroft
Stanley.Hopcroft at IPAustralia.Gov.AU
Sat Apr 16 03:55:35 CEST 2005
Dear Folks,
I hoping for some enlightenment on what I may have done to checks.c to
cause one plugins output to appear in the logs as the output of another
(couple) of plugins.
[1113611613] EXTERNAL COMMAND: DISABLE_SVC_NOTIFICATIONS;external;ATMOSS
search
[1113611627] EXTERNAL COMMAND: SCHEDULE_FORCED_SVC_CHECK;external;ATMOSS
search;1113611624
.. modified Perl plugin 'check_atmoss' to raise a syntax error (to
check that checks.c reports it and recovers when the error is
corrected)
[1113611638] SERVICE ALERT: external;ATMOSS search;UNKNOWN;SOFT;1;"**ePN
failed to compile "/usr/local/nagios/libexec/check_atmoss": "syntax
error at (eval 68) line 50, near "use Getopt::Long"" at
/usr/local/nagios/bin/p1.pl line 255, <DATA> line 225.
.. Ok so far.
[1113611638] SERVICE ALERT: foo-internet;Internet access to
foo;UNKNOWN;SOFT;1;"**ePN failed to compile
"/usr/local/nagios/libexec/check_atmoss": "syntax error at (eval 68)
line 50, near "use Getopt::Long"" at /usr/local/nagios/bin/p1.pl line
255, <DATA> line 225.
[1113611638] SERVICE ALERT: foo-prod;prod access to
foo;UNKNOWN;SOFT;1;"**ePN failed to compile
"/usr/local/nagios/libexec/check_atmoss": "syntax error at (eval 68)
line 50, near "use Getopt::Long"" at /usr/local/nagios/bin/p1.pl line
255, <DATA> line 225.
.. Whoops ! foo-internet and foo-prod are both check_tcp ! The normal
plugin output of check_tcp has been replaced by that from the
Perl plugin check_atmoss.
[1113611698] SERVICE ALERT: foo-internet;Internet access to
foo;OK;SOFT;2;TCP OK - 0 second response time on port 514
[1113611698] SERVICE ALERT: foo-prod;prod access to
foo;OK;SOFT;2;TCP OK - 0 second response time on port 514
.. Now back to normal.
[1113611818] SERVICE ALERT: external;ATMOSS search;UNKNOWN;SOFT;2;**ePN
"/usr/local/nagios/libexec/check_atmoss": "syntax error at (eval 68)
line 50, near "use Getopt::Long"".
[1113611998] SERVICE ALERT: external;ATMOSS search;UNKNOWN;HARD;3;**ePN
"/usr/local/nagios/libexec/check_atmoss": "syntax error at (eval 68)
line 50, near "use Getopt::Long"".
[1113612066] EXTERNAL COMMAND: SCHEDULE_FORCED_SVC_CHECK;external;ATMOSS
search;1113612062
[1113612068] SERVICE ALERT: external;ATMOSS search;OK;HARD;3;ATMOSS
Transaction completed Ok.
The context of these remarks is embedded Perl.
I have changed checks.c to return immediately after a failure of
perl_call_argv(). In other words, when Perl reports that a plugin fails
to compile, it sets ERRSV (to report the syntax error) and this causes
checks.c to
- fill out the remaining fields in struct svc_msg
- write the struct to the IPC pipe
- return
This saves the futile running of a plugin with syntax errors in the
grandchild process (and an equally futile extra call to Perl to run the
plugin in perl_call_pv()). Currently, checks.c caches the error in
memory and when the grandchild calls perl_call_pv() to run it, Perl
inspects the cached error and either returns immediately or runs and
returns the plugin output).
Obviously I fail to understand something here, so any clues are
welcome.
Here is the hacked checks.c
if ( SvTRUE(ERRSV) ) {
/*
* if
SvTRUE(ERRSV)
* write
failure to IPC pipe
* return
*/
pclose_result=STATE_UNKNOWN;
perl_plugin_output=SvPVX(ERRSV);
#ifdef DEBUG1
printf("embedded perl ran %s with compile error
%s - skipping plugin\n",fname,perl_plugin_output);
#endif
/* get the check finish time */
gettimeofday(&end_time,NULL);
/* record check result info */
strncpy(svc_msg.output,perl_plugin_output,sizeof(svc_msg.output)-1);
svc_msg.output[sizeof(svc_msg.output)-1]='\x0';
svc_msg.return_code=pclose_result;
svc_msg.exited_ok=TRUE;
svc_msg.check_type=SERVICE_CHECK_ACTIVE;
svc_msg.finish_time=end_time;
svc_msg.early_timeout=FALSE;
/* write check results to message queue */
write_svc_message(&svc_msg);
return ;
}
#endif
/*
* Plugin is a C
plugin or a Perl plugin _without_ compilation errors
*/
.. contine to run the plugin in grandchild process ..
Yours sincerely.
--
Stanley Hopcroft
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: disclaimer.txt
URL: <https://www.monitoring-lists.org/archive/developers/attachments/20050416/941c4c3a/attachment.txt>
More information about the Developers
mailing list