Advertisement
Guest User

Untitled

a guest
Dec 4th, 2017
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #!/usr/bin/python
  2. '''docasap_monitor.py
  3. '''
  4.  
  5. import sys
  6. import platform
  7. import cx_Oracle
  8. import time
  9. import smtplib
  10. import os
  11. from pprint import pprint
  12.  
  13. # Set some defaults - maybe need config file or more arguments?
  14. _DB_CON = None
  15. JYTHON = 0
  16. db_username = '<password>'
  17. db_password = '<password>'
  18. tnsname = sys.argv[1]
  19.  
  20. GRAB_SQL_INFO = """select name, "MAX_DATAFILES", "CURRENT_#_DATAFILES", round(("CURRENT_#_DATAFILES"/"MAX_DATAFILES")*100) "Percent_Used" from (select v.name, v.value "MAX_DATAFILES", max(df.FILE_ID) "CURRENT_#_DATAFILES" from v$parameter v, dba_data_files df where v.name='db_files' group by v.name, v.value)"""
  21. GRAB_DB_INFO = """select name from v$database"""
  22.  
  23.  
  24. # Establish connection
  25. def est_db_con (username, password, tnsname):
  26. global _DB_CON
  27. # if not _DB_CON:
  28. dbinfo = username
  29. try:
  30. dbinfo = 'db: %s@%s' % (username, tnsname)
  31. print('--'+dbinfo)
  32. _DB_CON = cx_Oracle.connect(username, password, tnsname)
  33. print ('--cx_Oracle version: ' + _DB_CON.version),
  34. except:
  35. print '\n###### Database Connection Info ######'
  36. print ('Python version: ' + platform.python_version())
  37. ex = sys.exc_info()
  38. s = 'Exception: %s: %s\n%s' % (ex[0], ex[1], dbinfo)
  39. print(s)
  40. return None
  41. return _DB_CON
  42.  
  43. # Alias the database connection
  44. def db_con():
  45. return _DB_CON
  46.  
  47. def query_to_dict(sql):
  48. est_db_con (db_username, db_password, tnsname)
  49. cur = db_con().cursor()
  50. print "EXECUTE_SQL:"+sql
  51. cur.execute(sql)
  52. columns = [i[0] for i in cur.description]
  53. results = [dict(zip(columns, row)) for row in cur]
  54. return results
  55. cur.close()
  56.  
  57. def add_db_info(sql):
  58. cur = db_con().cursor()
  59. print "PROCESS_SQL:"+sql
  60. try:
  61. cur.execute(sql)
  62. sql_output = cur.fetchone()
  63. result = next(iter(sql_output))
  64. cur.close()
  65. return result
  66. except cx_Oracle.DatabaseError, exc:
  67. error, = exc.args
  68. print >> sys.stderr, "Oracle-Error-Code:", error.code
  69. print >> sys.stderr, "Oracle-Error-Message:", error.message
  70. cur.close()
  71.  
  72.  
  73. def alert():
  74. for item in db_files_results:
  75. if db_files_results[0].get("Percent_Used") > 50:
  76. f = open('test_file', 'w')
  77. f.write(' '.join('{0}: {1} \n'.format(key, val) for key, val in db_files_results[0].items()))
  78. f.close()
  79. os.system("mailx -s '{0} DB_FILES WARNING' xxxxxx.xxxxxx@xxxxxx.com < /home/oracle/test_file".format(db_files_results[0]["db_name"]))
  80. print("email sent")
  81. else:
  82. print("script finished")
  83.  
  84. db_files_results = query_to_dict(GRAB_SQL_INFO)
  85.  
  86. db_files_results[0]["db_name"] = add_db_info(GRAB_DB_INFO)
  87.  
  88. alert()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement