Advertisement
Guest User

dnishe.py

a guest
Jun 26th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.99 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import logging
  4. import logging.config
  5. import sys
  6. import time
  7. import threading
  8. import os
  9. import pymssql as db_api
  10.  
  11. #Status
  12. STATUS_PROBLEM = -1
  13. STATUS_TIMEOUT = -10
  14. STATUS_NO_CONNECT = -3
  15. STATUS_INVALID_ARGUMENTS = -4
  16. STATUS_INVALID_CONNECTION_PARAMETERS = -5
  17. STATUS_EMPTY_RESULT = -6
  18.  
  19. #Timeout
  20. QUERY_TIMEOUT = 12
  21.  
  22. #Logging setting
  23. if os.getenv('external_logging') == 'console':
  24.     logging.basicConfig(level=logging.DEBUG)
  25. else:
  26.     logging.config.fileConfig('/etc/zabbix/externalscripts/logging2.ini')
  27.  
  28.  
  29. def database_query(db_host, db_port, db_name, db_user, db_password, db_query):
  30.     try:
  31.         try:
  32.             config =  {'connpar':{'host': db_host + ":" + db_port, 'database': db_name, 'user': db_user,
  33.                                    'password': db_password}}
  34.  
  35.             connection_parameters = config.get('connpar', None)
  36.  
  37.             if connection_parameters:
  38.                 logging.info("Connect config: {conf}".format(conf=connection_parameters))
  39.                 logging.info("Connecting to db {db} on {host}:{port}".format(db=db_name, host=db_host, port=db_port))
  40.                 connect = db_api.connect(**connection_parameters)
  41.  
  42.             else:
  43.                 logging.error("Invalid parameters for query: {conf}".format(conf=connection_parameters))
  44.                 print("{err_code}".format(err_code=STATUS_INVALID_CONNECTION_PARAMETERS))
  45.                 sys.exit(STATUS_INVALID_CONNECTION_PARAMETERS)
  46.  
  47.         except Exception as e:
  48.             logging.exception(e)
  49.  
  50.             logging.error("Can't connect to database: {db}".format(db=db_name))
  51.  
  52.             print(STATUS_NO_CONNECT)
  53.             sys.exit(STATUS_NO_CONNECT)
  54.  
  55.         logging.error("Connect to db {db} is OK. Creating cursor".format(db=db_name))
  56.         cursor = connect.cursor()
  57.         logging.error("Running query: {query}".format(query=db_query))
  58.         cursor.execute(db_query)
  59.         query_result = cursor.fetchall()
  60.         cursor.close()
  61.         connect.close()
  62.         try:
  63.             if query_result[0][0]:
  64.                 a = query_result[0][0]
  65.                 print(a)
  66.                 logging.error('Execution completed')
  67.             else:
  68.                 print(0)
  69.             sys.exit(0)
  70.         except IndexError:
  71.             logging.error('Query returned an empty result, Database = {0}, Query = {1})'.format(db_name, db_query))
  72.             print(STATUS_EMPTY_RESULT)
  73.             sys.exit(STATUS_EMPTY_RESULT)  
  74.         sys.exit(0)
  75.  
  76.     except Exception as e:
  77.         logging.exception(e)
  78.         print(STATUS_PROBLEM)
  79.         sys.exit(STATUS_PROBLEM)
  80.  
  81.     except db_api.OperationalError as er:
  82.         logging.exception(er)
  83.         print(STATUS_PROBLEM)
  84.         sys.exit(STATUS_PROBLEM)
  85.  
  86.  
  87. if len(sys.argv) < 8:
  88.     logging.error("Not enough arguments. Passed arguments are: {args}".format(args=sys.argv))
  89.     print("{err_code}".format(err_code=STATUS_INVALID_ARGUMENTS))
  90.     sys.exit(STATUS_INVALID_ARGUMENTS)
  91.  
  92. try:
  93.     host = sys.argv[2]
  94.     port = sys.argv[3]
  95.     db_name = sys.argv[4]
  96.     db_user = sys.argv[5]
  97.     db_password = sys.argv[6]
  98.     db_query = sys.argv[7]
  99.  
  100. #    logging.error("Data for login: USER:'{user}',PASSWORD:'{pwd}'".format(user=db_user,pwd=db_password))
  101.     logging.info("Data for login: USER:'{user}'".format(user=db_user))
  102.     query_thread = threading.Thread(target=database_query, args=(host, port, db_name, db_user, db_password, db_query))
  103.     query_thread.setDaemon(True)
  104.     query_thread.start()
  105.     query_thread.join(QUERY_TIMEOUT)  #canceling query
  106.     if query_thread.isAlive():
  107.         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))
  108.         print(STATUS_TIMEOUT)
  109.         sys.exit(STATUS_TIMEOUT)
  110.  
  111. except Exception as e:
  112.     logging.exception(e)
  113.     print(STATUS_PROBLEM)
  114.     sys.exit(STATUS_PROBLEM)
  115.  
  116. except RuntimeError as e:
  117.     logging.exception(e)
  118.     print(STATUS_PROBLEM)
  119.     sys.exit(STATUS_PROBLEM)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement