Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import logging
- import logging.config
- import sys
- import time
- import threading
- import os
- import pymssql as db_api
- #Status
- STATUS_PROBLEM = -1
- STATUS_TIMEOUT = -10
- STATUS_NO_CONNECT = -3
- STATUS_INVALID_ARGUMENTS = -4
- STATUS_INVALID_CONNECTION_PARAMETERS = -5
- STATUS_EMPTY_RESULT = -6
- #Timeout
- QUERY_TIMEOUT = 12
- #Logging setting
- if os.getenv('external_logging') == 'console':
- logging.basicConfig(level=logging.DEBUG)
- else:
- logging.config.fileConfig('/etc/zabbix/externalscripts/logging2.ini')
- def database_query(db_host, db_port, db_name, db_user, db_password, db_query):
- try:
- try:
- config = {'connpar':{'host': db_host + ":" + db_port, 'database': db_name, 'user': db_user,
- 'password': db_password}}
- connection_parameters = config.get('connpar', None)
- if connection_parameters:
- logging.info("Connect config: {conf}".format(conf=connection_parameters))
- logging.info("Connecting to db {db} on {host}:{port}".format(db=db_name, host=db_host, port=db_port))
- connect = db_api.connect(**connection_parameters)
- else:
- logging.error("Invalid parameters for query: {conf}".format(conf=connection_parameters))
- print("{err_code}".format(err_code=STATUS_INVALID_CONNECTION_PARAMETERS))
- sys.exit(STATUS_INVALID_CONNECTION_PARAMETERS)
- except Exception as e:
- logging.exception(e)
- logging.error("Can't connect to database: {db}".format(db=db_name))
- print(STATUS_NO_CONNECT)
- sys.exit(STATUS_NO_CONNECT)
- logging.error("Connect to db {db} is OK. Creating cursor".format(db=db_name))
- cursor = connect.cursor()
- logging.error("Running query: {query}".format(query=db_query))
- cursor.execute(db_query)
- query_result = cursor.fetchall()
- cursor.close()
- connect.close()
- try:
- if query_result[0][0]:
- a = query_result[0][0]
- print(a)
- logging.error('Execution completed')
- else:
- print(0)
- sys.exit(0)
- except IndexError:
- logging.error('Query returned an empty result, Database = {0}, Query = {1})'.format(db_name, db_query))
- print(STATUS_EMPTY_RESULT)
- sys.exit(STATUS_EMPTY_RESULT)
- sys.exit(0)
- except Exception as e:
- logging.exception(e)
- print(STATUS_PROBLEM)
- sys.exit(STATUS_PROBLEM)
- except db_api.OperationalError as er:
- logging.exception(er)
- print(STATUS_PROBLEM)
- sys.exit(STATUS_PROBLEM)
- if len(sys.argv) < 8:
- logging.error("Not enough arguments. Passed arguments are: {args}".format(args=sys.argv))
- print("{err_code}".format(err_code=STATUS_INVALID_ARGUMENTS))
- sys.exit(STATUS_INVALID_ARGUMENTS)
- try:
- host = sys.argv[2]
- port = sys.argv[3]
- db_name = sys.argv[4]
- db_user = sys.argv[5]
- db_password = sys.argv[6]
- db_query = sys.argv[7]
- # logging.error("Data for login: USER:'{user}',PASSWORD:'{pwd}'".format(user=db_user,pwd=db_password))
- logging.info("Data for login: USER:'{user}'".format(user=db_user))
- query_thread = threading.Thread(target=database_query, args=(host, port, db_name, db_user, db_password, db_query))
- query_thread.setDaemon(True)
- query_thread.start()
- query_thread.join(QUERY_TIMEOUT) #canceling query
- if query_thread.isAlive():
- logging.error('Query timeouted after {timeout} seconds for host: {m_host} DB: {m_db}'.format(timeout=QUERY_TIMEOUT,m_host=host,m_db=db_name))
- print(STATUS_TIMEOUT)
- sys.exit(STATUS_TIMEOUT)
- except Exception as e:
- logging.exception(e)
- print(STATUS_PROBLEM)
- sys.exit(STATUS_PROBLEM)
- except RuntimeError as e:
- logging.exception(e)
- print(STATUS_PROBLEM)
- sys.exit(STATUS_PROBLEM)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement