Created
March 11, 2014 06:27
-
-
Save junaid18183/9480570 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# +----------------------------------------------------------------------+ | |
# | | | |
# | _ _ __ __ | | |
# | | | | | | \/ | | | |
# | | |_ _ _ __ ___ __| | | \ / | ___ _ __ ___ ___ _ __ | | |
# | _ | | | | | '_ \ / _ \/ _` | | |\/| |/ _ \ '_ ` _ \ / _ \| '_ \ | | |
# | | |__| | |_| | | | | __/ (_| | | | | | __/ | | | | | (_) | | | | | | |
# | \____/ \__,_|_| |_|\___|\__,_| |_| |_|\___|_| |_| |_|\___/|_| |_| | | |
# | | | |
# | Author : Juned Memon Email : [email protected] | | |
# +----------------------------------------------------------------------+ | |
# This program is free software; you can redistribute it and/or | |
# modify it under the terms of the GNU General Public License | |
# as published by the Free Software Foundation; either version 2 | |
# of the License, or (at your option) any later version. | |
# | |
# This program is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU General Public License for more details. | |
# | |
# You should have received a copy of the GNU General Public License | |
# along with this program; if not, write to the Free Software | |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
# 02110-1301, USA. | |
# +----------------------------------------------------------------------+ | |
# | Version : 1.0 Date: 07-Mar-2014 | |
# | Script : set_downtime.py | |
# | Notes : This script is to set and remove the downtime in Check_mk Multisite using the | |
# | multisite api. | |
# Requires -H host - for which downtime needs to be set/remove | |
# -M mode - mode in which to operate i.e. set/remove | |
# -S services - Optional list of services to set/remove downtime | |
# -D duration - Default to 60 minutes, duration for which to set downtime | |
# +----------------------------------------------------------------------+ | |
import os,sys,urllib2,base64,argparse,urllib,re | |
from datetime import datetime,timedelta | |
#------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
omd_site = 'watchdog' | |
omd_host = 'monitor.juned.com' | |
username = 'omdadmin' | |
password = 'omd' | |
#------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
# DO NOT EDIT ANYTHING BELOW THIS LINE # | |
#------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
#Functions | |
def bail_out(reason): | |
sys.stderr.write(reason + "\n") | |
sys.exit(1) | |
def verbose(text): | |
opt_verbose=True | |
if opt_verbose: | |
sys.stdout.write(text + "\n") | |
def make_url(base, variables): | |
vartext = "&".join([ "%s=%s" % e for e in variables ]) | |
return base + "?" + vartext | |
def downtime(variables): | |
base_url = "http://" + omd_host+ "/" + omd_site + "/check_mk/" | |
auth_encoded = base64.encodestring('%s:%s' % (username, password))[:-1] | |
call = urllib.urlencode(variables) | |
url = base_url + "view.py?" + call | |
#verbose("URL: " + url) | |
req = urllib2.Request(url) | |
req.add_header('Authorization', 'Basic %s' % auth_encoded) | |
try: | |
response = urllib2.urlopen(req) | |
if re.match("(.*)MESSAGE: Successfully(.*)", response.readline()): | |
verbose("Success") | |
else : | |
bail_out("Error") | |
except Exception, e: | |
bail_out("Cannot call Multisite URL: %s" % e) | |
#------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
def main (): | |
parser = argparse.ArgumentParser(description="This script will set/remove the downtime on specified host.") | |
parser.add_argument("-M","--mode",help="Mode to operate [set|remove] downtime",required=True) #Positional Parameter | |
parser.add_argument("-H", "--host",help="Host to set/remove downtime",required=True) #This will have single argument | |
parser.add_argument("-S", "--services",help="Services to set/remove downtime",required=False,nargs='+') #This can have multiple arguments | |
parser.add_argument("-D", "--duration",help="Duration to set downtime in Minutes(Default 60 Minute)",type=int,default=60,required=False) # | |
parser.add_argument("-C", "--comment",help="Commnet to downtime",default="Added via script",required=False) #This can have multiple arguments | |
parser.add_argument("-v", "--verbose",help="verbose on",action="store_true") #This does not require any options with -v | |
args = parser.parse_args() | |
mode=args.mode | |
host=args.host | |
services=args.services | |
duration=args.duration | |
comment=args.comment | |
opt_verbose=args.verbose | |
opt_all=False | |
base_url = "http://" + omd_host+ "/" + omd_site + "/check_mk/" | |
variables = { | |
"_transid" : "-1" , | |
"_do_confirm" : "yes" , | |
"_do_actions" : "yes" , | |
"host" : host , | |
"output_format" :"json", | |
} | |
if mode == 'remove': | |
variables.update ({ | |
"view_name" : "downtimes", | |
"_remove_downtimes" : "Remove", | |
}) | |
else: | |
start=datetime.now() | |
end=start+timedelta(minutes=duration) | |
start_date=start.strftime('%Y-%m-%d') | |
start_time=start.strftime('%H:%M') | |
end_date=end.strftime('%Y-%m-%d') | |
end_time=end.strftime('%H:%M') | |
#( "_down_duration",duration ), | |
#( "_down_from_now", "yes" ), | |
#( "_down_minutes", duration ),Both of the above does not work for the older version of CMK | |
variables.update ({ | |
"_down_comment" : comment , | |
"_down_custom" : "Custom+time+range", | |
"_down_from_date" : start_date , | |
"_down_from_time" : start_time , | |
"_down_to_date" : end_date , | |
"_down_to_time" : end_time , | |
}) | |
if services: | |
variables.update({"view_name" : "service" }) | |
else: | |
variables.append({"view_name" : "hoststatus" }) | |
if services: | |
for service in services: | |
variables.update({"service" : service }) | |
downtime(variables) | |
else: | |
downtime(variables, []) | |
if opt_all: | |
if mode == 'set': | |
downtime(variables, [("view_name", "service")]) | |
#------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
if __name__ == "__main__": | |
sys.exit(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment