mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	puppet: Remove pageduty_nagios.pl.
This hasn't been used in like 4 years, and clutters the repo.
This commit is contained in:
		@@ -64,10 +64,6 @@ Copyright: 2003-2009 Edgewall Software
 | 
				
			|||||||
 2003-2004 Jonas Borgström <jonas@edgewall.com>
 | 
					 2003-2004 Jonas Borgström <jonas@edgewall.com>
 | 
				
			||||||
License: BSD-3-Clause
 | 
					License: BSD-3-Clause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Files: puppet/zulip_internal/files/pagerduty_nagios.pl
 | 
					 | 
				
			||||||
Copyright: 2011, PagerDuty, Inc.
 | 
					 | 
				
			||||||
License: BSD-3-Clause
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Files: puppet/zulip_internal/files/zulip-ec2-configure-interfaces
 | 
					Files: puppet/zulip_internal/files/zulip-ec2-configure-interfaces
 | 
				
			||||||
Copyright: 2013-2017, Dropbox, Inc., Kandra Labs, Inc., and contributors
 | 
					Copyright: 2013-2017, Dropbox, Inc., Kandra Labs, Inc., and contributors
 | 
				
			||||||
License: Expat
 | 
					License: Expat
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
# Edit this file to introduce tasks to be run by cron.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Each task to run has to be defined through a single line
 | 
					 | 
				
			||||||
# indicating with different fields when the task will be run
 | 
					 | 
				
			||||||
# and what command to run for the task
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# To define the time you can provide concrete values for
 | 
					 | 
				
			||||||
# minute (m), hour (h), day of month (dom), month (mon),
 | 
					 | 
				
			||||||
# and day of week (dow) or use '*' in these fields (for 'any').#
 | 
					 | 
				
			||||||
# Notice that tasks will be started based on the cron's system
 | 
					 | 
				
			||||||
# daemon's notion of time and timezones.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Output of the crontab jobs (including errors) is sent through
 | 
					 | 
				
			||||||
# email to the user the crontab file belongs to (unless redirected).
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# For example, you can run a backup of all your user accounts
 | 
					 | 
				
			||||||
# at 5 a.m every week with:
 | 
					 | 
				
			||||||
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# For more information see the manual pages of crontab(5) and cron(8)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# m h  dom mon dow   command
 | 
					 | 
				
			||||||
* * * * * /usr/local/bin/pagerduty_nagios.pl flush
 | 
					 | 
				
			||||||
@@ -1,280 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env perl
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Nagios plugin that sends Nagios events to PagerDuty.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2011, PagerDuty, Inc. <info@pagerduty.com>
 | 
					 | 
				
			||||||
# All rights reserved.
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Redistribution and use in source and binary forms, with or without
 | 
					 | 
				
			||||||
# modification, are permitted provided that the following conditions are met:
 | 
					 | 
				
			||||||
#     * Redistributions of source code must retain the above copyright
 | 
					 | 
				
			||||||
#       notice, this list of conditions and the following disclaimer.
 | 
					 | 
				
			||||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
					 | 
				
			||||||
#       notice, this list of conditions and the following disclaimer in the
 | 
					 | 
				
			||||||
#       documentation and/or other materials provided with the distribution.
 | 
					 | 
				
			||||||
#     * Neither the name of PagerDuty Inc nor the
 | 
					 | 
				
			||||||
#       names of its contributors may be used to endorse or promote products
 | 
					 | 
				
			||||||
#       derived from this software without specific prior written permission.
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
					 | 
				
			||||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
					 | 
				
			||||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
					 | 
				
			||||||
# DISCLAIMED. IN NO EVENT SHALL PAGERDUTY INC BE LIABLE FOR ANY
 | 
					 | 
				
			||||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
					 | 
				
			||||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
					 | 
				
			||||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
					 | 
				
			||||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
					 | 
				
			||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
					 | 
				
			||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use Pod::Usage;
 | 
					 | 
				
			||||||
use Getopt::Long;
 | 
					 | 
				
			||||||
use Sys::Syslog;
 | 
					 | 
				
			||||||
use HTTP::Request::Common qw(POST);
 | 
					 | 
				
			||||||
use HTTP::Status qw(is_client_error);
 | 
					 | 
				
			||||||
use LWP::UserAgent;
 | 
					 | 
				
			||||||
use File::Path;
 | 
					 | 
				
			||||||
use Fcntl qw(:flock);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 NAME
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pagerduty_nagios -- Send Nagios events to the PagerDuty alert system
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 SYNOPSIS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pagerduty_nagios enqueue [options]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pagerduty_nagios flush [options]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 DESCRIPTION
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  This script passes events from Nagios to the PagerDuty alert system. It's
 | 
					 | 
				
			||||||
  meant to be run as a Nagios notification plugin. For more details, please see
 | 
					 | 
				
			||||||
  the PagerDuty Nagios integration docs at:
 | 
					 | 
				
			||||||
  http://www.pagerduty.com/docs/nagios-integration.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  When called in the "enqueue" mode, the script loads a Nagios notification out
 | 
					 | 
				
			||||||
  of the environment and into the event queue.  It then tries to flush the
 | 
					 | 
				
			||||||
  queue by sending any enqueued events to the PagerDuty server.  The script is
 | 
					 | 
				
			||||||
  typically invoked in this mode from a Nagios notification handler.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  When called in the "flush" mode, the script simply tries to send any enqueued
 | 
					 | 
				
			||||||
  events to the PagerDuty server.  This mode is typically invoked by cron.  The
 | 
					 | 
				
			||||||
  purpose of this mode is to retry any events that couldn't be sent to the
 | 
					 | 
				
			||||||
  PagerDuty server for whatever reason when they were initially enqueued.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=head1 OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  --api-base URL
 | 
					 | 
				
			||||||
    The base URL used to communicate with PagerDuty.  The default option here
 | 
					 | 
				
			||||||
    should be fine, but adjusting it may make sense if your firewall doesn't
 | 
					 | 
				
			||||||
    pass HTTPS traffic for some reason.  See the PagerDuty Nagios integration
 | 
					 | 
				
			||||||
    docs for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  --field KEY=VALUE
 | 
					 | 
				
			||||||
    Add this key-value pair to the event being passed to PagerDuty.  The script
 | 
					 | 
				
			||||||
    automatically gathers Nagios macros out of the environment, so there's no
 | 
					 | 
				
			||||||
    need to specify these explicitly.  This option can be repeated as many
 | 
					 | 
				
			||||||
    times as necessary to pass multiple key-value pairs.  This option is only
 | 
					 | 
				
			||||||
    useful when an event is being enqueued.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  --help
 | 
					 | 
				
			||||||
    Display documentation for the script.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  --queue-dir DIR
 | 
					 | 
				
			||||||
    Path to the directory to use to store the event queue.  By default, we use
 | 
					 | 
				
			||||||
    /tmp/pagerduty_nagios.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  --verbose
 | 
					 | 
				
			||||||
    Turn on extra debugging information.  Useful for debugging.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
=cut
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This release tested on:
 | 
					 | 
				
			||||||
# Debian Sarge (Perl 5.8.4)
 | 
					 | 
				
			||||||
# Ubuntu 9.04  (Perl 5.10.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my $opt_api_base = "https://events.pagerduty.com/nagios/2010-04-15";
 | 
					 | 
				
			||||||
my %opt_fields;
 | 
					 | 
				
			||||||
my $opt_help;
 | 
					 | 
				
			||||||
my $opt_queue_dir = "/tmp/pagerduty_nagios";
 | 
					 | 
				
			||||||
my $opt_verbose;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub get_queue_from_dir {
 | 
					 | 
				
			||||||
	my $dh;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	unless (opendir($dh, $opt_queue_dir)) {
 | 
					 | 
				
			||||||
		syslog(LOG_ERR, "opendir %s failed: %s", $opt_queue_dir, $!);
 | 
					 | 
				
			||||||
		die $!;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	my @files;
 | 
					 | 
				
			||||||
	while (my $f = readdir($dh)) {
 | 
					 | 
				
			||||||
		next unless $f =~ /^pd_(\d+)_\d+\.txt$/;
 | 
					 | 
				
			||||||
		push @files, [int($1), $f];
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	closedir($dh);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	@files = sort { @{$a}[0] <=> @{$b}[0] } @files;
 | 
					 | 
				
			||||||
	return map { @{$_}[1] } @files;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub flush_queue {
 | 
					 | 
				
			||||||
	my @files = get_queue_from_dir();
 | 
					 | 
				
			||||||
	my $ua = LWP::UserAgent->new;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# It's not a big deal if we don't get the message through the first time.
 | 
					 | 
				
			||||||
	# It will get sent the next time cron fires.
 | 
					 | 
				
			||||||
	$ua->timeout(15);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	foreach (@files) {
 | 
					 | 
				
			||||||
		my $filename = "$opt_queue_dir/$_";
 | 
					 | 
				
			||||||
		my $fd;
 | 
					 | 
				
			||||||
		my %event;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		print STDERR "==== Now processing: $filename\n" if $opt_verbose;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		unless (open($fd, "<", $filename)) {
 | 
					 | 
				
			||||||
			syslog(LOG_ERR, "open %s for read failed: %s", $filename, $!);
 | 
					 | 
				
			||||||
			die $!;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		while (<$fd>) {
 | 
					 | 
				
			||||||
			chomp;
 | 
					 | 
				
			||||||
			my @fields = split("=", $_, 2);
 | 
					 | 
				
			||||||
			$event{$fields[0]} = $fields[1];
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		close($fd);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		my $req = POST("$opt_api_base/create_event", \%event);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if ($opt_verbose) {
 | 
					 | 
				
			||||||
			my $s = $req->as_string;
 | 
					 | 
				
			||||||
			print STDERR "Request:\n$s\n";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		my $resp = $ua->request($req);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if ($opt_verbose) {
 | 
					 | 
				
			||||||
			my $s = $resp->as_string;
 | 
					 | 
				
			||||||
			print STDERR "Response:\n$s\n";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if ($resp->is_success) {
 | 
					 | 
				
			||||||
			syslog(LOG_INFO, "Nagios event in file %s ACCEPTED by the PagerDuty server.", $filename);
 | 
					 | 
				
			||||||
			unlink($filename);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		elsif (is_client_error($resp->code)) {
 | 
					 | 
				
			||||||
			syslog(LOG_WARNING, "Nagios event in file %s REJECTED by the PagerDuty server.  Server says: %s", $filename, $resp->content);
 | 
					 | 
				
			||||||
			unlink($filename);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else {
 | 
					 | 
				
			||||||
			# Something else went wrong.
 | 
					 | 
				
			||||||
			syslog(LOG_WARNING, "Nagios event in file %s DEFERRED due to network/server problems.", $filename);
 | 
					 | 
				
			||||||
			return 0;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Everything that needed to be sent was sent.
 | 
					 | 
				
			||||||
	return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub lock_and_flush_queue {
 | 
					 | 
				
			||||||
	# Serialize access to the queue directory while we flush.
 | 
					 | 
				
			||||||
	# (We don't want more than one flush at once.)
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	my $lock_filename = "$opt_queue_dir/lockfile";
 | 
					 | 
				
			||||||
	my $lock_fd;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	unless (open($lock_fd, ">", $lock_filename)) {
 | 
					 | 
				
			||||||
		syslog(LOG_ERR, "open %s for write failed: %s", $lock_filename, $!);
 | 
					 | 
				
			||||||
		die $!;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	unless (flock($lock_fd, LOCK_EX)) {
 | 
					 | 
				
			||||||
		syslog(LOG_ERR, "flock %s failed: %s", $lock_filename, $!);
 | 
					 | 
				
			||||||
		die $!;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	my $ret = flush_queue();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	close($lock_fd);
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub enqueue_event {
 | 
					 | 
				
			||||||
	my %event;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Scoop all the Nagios related stuff out of the environment.
 | 
					 | 
				
			||||||
	while ((my $k, my $v) = each %ENV) {
 | 
					 | 
				
			||||||
		next unless $k =~ /^NAGIOS_(.*)$/;
 | 
					 | 
				
			||||||
		$event{$1} = $v;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Apply any other variables that were passed in.
 | 
					 | 
				
			||||||
	%event = (%event, %opt_fields);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	$event{"pd_version"} = "1.0";
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	# Right off the bat, enqueue the event.  Nothing tiem consuming should come
 | 
					 | 
				
			||||||
	# before here (i.e. no locks or remote connections), because we want to
 | 
					 | 
				
			||||||
	# make sure we get the event written out within the Nagios notification
 | 
					 | 
				
			||||||
	# timeout.  If we get killed off after that, it isn't a big deal.
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	my $filename = sprintf("$opt_queue_dir/pd_%u_%u.txt", time(), $$);
 | 
					 | 
				
			||||||
	my $fd;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	unless (open($fd, ">", $filename)) {
 | 
					 | 
				
			||||||
		syslog(LOG_ERR, "open %s for write failed: %s", $filename, $!);
 | 
					 | 
				
			||||||
		die $!;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	while ((my $k, my $v) = each %event) {
 | 
					 | 
				
			||||||
		# "=" can't occur in the keyname, and "\n" can't occur anywhere.
 | 
					 | 
				
			||||||
		# (Nagios follows this already, so I think we're safe)
 | 
					 | 
				
			||||||
		print $fd "$k=$v\n";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	close($fd);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
###########
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GetOptions("api-base=s" => \$opt_api_base,
 | 
					 | 
				
			||||||
		   "field=s%" => \%opt_fields,
 | 
					 | 
				
			||||||
		   "help" => \$opt_help,
 | 
					 | 
				
			||||||
		   "queue-dir=s" => \$opt_queue_dir,
 | 
					 | 
				
			||||||
		   "verbose" => \$opt_verbose
 | 
					 | 
				
			||||||
		  ) || pod2usage(2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pod2usage(2) if @ARGV < 1 ||
 | 
					 | 
				
			||||||
	 (($ARGV[0] ne "enqueue") && ($ARGV[0] ne "flush"));
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
pod2usage(-verbose => 3) if $opt_help;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my @log_mode = ("nofatal", "pid");
 | 
					 | 
				
			||||||
push(@log_mode, "perror") if $opt_verbose;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
openlog("pagerduty_nagios", join(",", @log_mode), LOG_LOCAL0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This function automatically terminates the program on things like permission
 | 
					 | 
				
			||||||
# errors.
 | 
					 | 
				
			||||||
mkpath($opt_queue_dir);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if ($ARGV[0] eq "enqueue") {
 | 
					 | 
				
			||||||
	enqueue_event();
 | 
					 | 
				
			||||||
	lock_and_flush_queue();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
elsif ($ARGV[0] eq "flush") {
 | 
					 | 
				
			||||||
	lock_and_flush_queue();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -40,14 +40,6 @@ class zulip_ops::nagios {
 | 
				
			|||||||
    ensure => running,
 | 
					    ensure => running,
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  file { '/usr/local/bin/pagerduty_nagios.pl':
 | 
					 | 
				
			||||||
    ensure     => file,
 | 
					 | 
				
			||||||
    mode       => 755,
 | 
					 | 
				
			||||||
    owner      => "root",
 | 
					 | 
				
			||||||
    group      => "root",
 | 
					 | 
				
			||||||
    source     => 'puppet:///modules/zulip_ops/pagerduty_nagios.pl',
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  file { [ '/etc/nagios3/conf.d/extinfo_nagios2.cfg',
 | 
					  file { [ '/etc/nagios3/conf.d/extinfo_nagios2.cfg',
 | 
				
			||||||
           '/etc/nagios3/conf.d/services_nagios2.cfg',
 | 
					           '/etc/nagios3/conf.d/services_nagios2.cfg',
 | 
				
			||||||
           '/etc/nagios3/conf.d/contacts_nagios2.cfg',
 | 
					           '/etc/nagios3/conf.d/contacts_nagios2.cfg',
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user