-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcheck_rt_ticketcount
executable file
·211 lines (158 loc) · 5.52 KB
/
check_rt_ticketcount
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/usr/bin/env perl
# check_rt_ticketcount
# a nagios check that will take arguments to specify an RT instance and ticketSQL
# it will then alert based on the number of tickets matching.
# Requirements:
#
# RT::Client::REST
# Nagios::Plugin
# Config::Tiny
use strict;
use warnings;
use Error qw(:try);
use Carp;
use Nagios::Plugin;
use vars qw($VERSION $PROGNAME $verbose $warn $critical $timeout $result);
$VERSION = '1.0';
# get the base name of this script for use in the examples
use File::Basename;
$PROGNAME = basename($0);
##############################################################################
# define and get the command line options.
# see the command line option guidelines at
# http://nagiosplug.sourceforge.net/developer-guidelines.html#PLUGOPTIONS
# Instantiate Nagios::Plugin object (the 'usage' parameter is mandatory)
my $p = Nagios::Plugin->new(
usage => "Usage: %s -q|--query = \"TicketSQL goes here\"
[ -v|--verbose ] [-t <timeout>]
[ -c|--critical=<critical threshold> ]
[ -w|--warning=<warning threshold> ]
[ -f|--file = <CONFIGFILE> ]
[ -u|--url = <URL>
",
version => $VERSION,
blurb => 'A Nagios plugin to check Request Tracker for the number of tickets that satisfy some arbitrary TicketSQL.',
extra => qq{
THRESHOLDs for -w and -c are specified 'min:max' or 'min:' or ':max'
(or 'max'). If specified '\@min:max', a warning status will be generated
if the count *is* inside the specified range.
See more threshold examples at http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT
CONFIGFILE
location of the file containing the auth credentials that nagios use to talk to RT
The format is:
user = my_nagios_user_rt
pass = their_password
URL
defaults to https://localhost
Examples:
$PROGNAME -w 10 -c 18
Returns a warning if the resulting number is greater than 10,
or a critical error if it is greater than 18.
$PROGNAME -w 10 : -c 4 :
Returns a warning if the resulting number is less than 10,
or a critical error if it is less than 4.
$PROGNAME -q \'Queue="11"\'
$PROGNAME -u https://rt.example.com --file /etc/nagios/rtrc --query 'queue =\"work_queue\" and status=\"open\" and created < \"5 minutes ago\"' -c 5 -w 2
Usage with Nagios:
define service {
use generic-service
service_description check-queue
host_name rt.example.com
check_command check_rt_ticketcount!https://rt.example.com!queue ="work_queue" and (status="open" or status="new") and created < "5 minutes ago"!2!5
}
define command{
command_name check_rt_ticketcount
command_line \$USER1\$/check_rt_ticketcount -f /etc/nagios/rtrc -u "\$ARG1\$" --query '\$ARG2\$' -w \$ARG3\$ -c \$ARG4\$
}
Requirements:
RT::Client::REST
Nagios::Plugin
Config::Tiny
}
);
$p->add_arg(
spec => 'warning|w=s',
help =>
qq{-w, --warning=INTEGER:INTEGER
Minimum and maximum number of allowable result, outside of which a
warning will be generated. If omitted, no warning is generated.},
# required => 1,
# default => 10,
);
$p->add_arg(
spec => 'critical|c=s',
help =>
qq{-c, --critical=INTEGER:INTEGER
Minimum and maximum number of the generated result, outside of
which a critical will be generated. },
);
$p->add_arg(
spec => 'file|f=s',
help => qq{-f, --file=CONFIGFILE
This is the configfile that contains the auth credentials that this check should use to query RT, default: %s.},
required => 0,
default => '/etc/nagios/rtrc',
);
$p->add_arg(
spec => 'url|u=s',
help => qq{-u, --url=URL
The URL for the RT instance to query, default: https://localhost.},
required => 0,
default => "https://localhost"
);
$p->add_arg(spec => 'query|q=s',
help => "Specify the TicketSQL query to send, default: %s",
default => "Queue='general'"
);
# Parse arguments and process standard ones (e.g. usage, help, version)
$p->getopts;
# perform sanity checking on command line options
if ( (! defined $p->opts->file) || (!(-s $p->opts->file) ) || (!( -r $p->opts->file)) ) {
$p->nagios_die( "config problem: ".$p->opts->file );
}
unless ( defined $p->opts->warning || defined $p->opts->critical ) {
$p->nagios_die( " you didn't supply a threshold argument " );
}
###################
## CHECK STUFF HERE
###################
my $query=($p->opts->query);
use RT::Client::REST;
use Config::Tiny;
my $config = Config::Tiny->new;
$config = Config::Tiny->read( $p->opts->file );
my $user = $config->{_}->{user};
my $pass = $config->{_}->{pass};
my $url = $p->opts->url;
my $rt = RT::Client::REST->new(
server => $url,
timeout => 30,
);
try {
$rt->login(username => $user, password => $pass);
} catch Exception::Class::Base with {
croak("failed to login to $url :",shift->message);
};
# Find all tickets that satisfy the specified query
my @ids = $rt->search(
type => 'ticket',
query => $query,
);
my $result = scalar(@ids);
##############################################################################
# check the result against the defined warning and critical thresholds,
# output the result and exit
#$p->nagios_exit(
# return_code => $p->check_threshold(check => $result,
# warning => $p->opts->warning,
# critical => $p->opts->critical,
# ),
# message => " matching tickets was $result"
#);
$p->nagios_exit(
$p->check_threshold(check => $result,
warning => $p->opts->warning,
critical => $p->opts->critical,
),
" matching tickets was $result"
);