diff options
Diffstat (limited to 'plugins/check_nagios.c')
-rw-r--r-- | plugins/check_nagios.c | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/plugins/check_nagios.c b/plugins/check_nagios.c index ab9c877b..45514f1a 100644 --- a/plugins/check_nagios.c +++ b/plugins/check_nagios.c | |||
@@ -85,22 +85,25 @@ main (int argc, char **argv) | |||
85 | /* open the status log */ | 85 | /* open the status log */ |
86 | fp = fopen (status_log, "r"); | 86 | fp = fopen (status_log, "r"); |
87 | if (fp == NULL) { | 87 | if (fp == NULL) { |
88 | printf (_("CRITICAL - Cannot open status log for reading!\n")); | 88 | die (STATE_CRITICAL, "NAGIOS %s: %s\n", _("CRITICAL"), _("Cannot open status log for reading!")); |
89 | return STATE_CRITICAL; | ||
90 | } | 89 | } |
91 | 90 | ||
92 | /* get the date/time of the last item updated in the log */ | 91 | /* get the date/time of the last item updated in the log */ |
93 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) { | 92 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) { |
94 | temp_ptr = strtok (input_buffer, "]"); | 93 | if ((temp_ptr = strstr (input_buffer, "created=")) != NULL) { |
95 | temp_entry_time = | 94 | temp_entry_time = strtoul (temp_ptr + 8, NULL, 10); |
96 | (temp_ptr == NULL) ? 0L : strtoul (temp_ptr + 1, NULL, 10); | ||
97 | if (temp_entry_time > latest_entry_time) | ||
98 | latest_entry_time = temp_entry_time; | 95 | latest_entry_time = temp_entry_time; |
96 | break; | ||
97 | } else if ((temp_ptr = strtok (input_buffer, "]")) != NULL) { | ||
98 | temp_entry_time = strtoul (temp_ptr + 1, NULL, 10); | ||
99 | if (temp_entry_time > latest_entry_time) | ||
100 | latest_entry_time = temp_entry_time; | ||
101 | } | ||
99 | } | 102 | } |
100 | fclose (fp); | 103 | fclose (fp); |
101 | 104 | ||
102 | if (verbose >= 2) | 105 | if (verbose >= 2) |
103 | printf(_("command: %s\n"), PS_COMMAND); | 106 | printf("command: %s\n", PS_COMMAND); |
104 | 107 | ||
105 | /* run the command to check for the Nagios process.. */ | 108 | /* run the command to check for the Nagios process.. */ |
106 | if((result = np_runcmd(PS_COMMAND, &chld_out, &chld_err, 0)) != 0) | 109 | if((result = np_runcmd(PS_COMMAND, &chld_out, &chld_err, 0)) != 0) |
@@ -146,22 +149,29 @@ main (int argc, char **argv) | |||
146 | alarm (0); | 149 | alarm (0); |
147 | 150 | ||
148 | if (proc_entries == 0) { | 151 | if (proc_entries == 0) { |
149 | printf (_("Could not locate a running Nagios process!\n")); | 152 | die (STATE_CRITICAL, "NAGIOS %s: %s\n", _("CRITICAL"), _("Could not locate a running Nagios process!")); |
150 | return STATE_CRITICAL; | ||
151 | } | 153 | } |
152 | 154 | ||
153 | result = STATE_OK; | 155 | if (latest_entry_time == 0L) { |
156 | die (STATE_CRITICAL, "NAGIOS %s: %s\n", _("CRITICAL"), _("Cannot parse Nagios log file for valid time")); | ||
157 | } | ||
154 | 158 | ||
155 | time (¤t_time); | 159 | time (¤t_time); |
156 | if ((int)(current_time - latest_entry_time) > (expire_minutes * 60)) | 160 | if ((int)(current_time - latest_entry_time) > (expire_minutes * 60)) { |
157 | result = STATE_WARNING; | 161 | result = STATE_WARNING; |
162 | } else { | ||
163 | result = STATE_OK; | ||
164 | } | ||
158 | 165 | ||
159 | printf | 166 | printf ("NAGIOS %s: ", (result == STATE_OK) ? _("OK") : _("WARNING")); |
160 | (_("Nagios %s: located %d process%s, status log updated %d second%s ago\n"), | 167 | printf (ngettext ("%d process", "%d processes", proc_entries), proc_entries); |
161 | (result == STATE_OK) ? "ok" : "problem", proc_entries, | 168 | printf (", "); |
162 | (proc_entries == 1) ? "" : "es", | 169 | printf ( |
163 | (int) (current_time - latest_entry_time), | 170 | ngettext ("status log updated %d second ago", |
164 | ((int) (current_time - latest_entry_time) == 1) ? "" : "s"); | 171 | "status log updated %d seconds ago", |
172 | (int) (current_time - latest_entry_time) ), | ||
173 | (int) (current_time - latest_entry_time) ); | ||
174 | printf ("\n"); | ||
165 | 175 | ||
166 | return result; | 176 | return result; |
167 | } | 177 | } |