Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.00 KB | None | 0 0
  1. import requests, re, json, urllib2, base64, time, multiprocessing, sys
  2. from joblib import Parallel, delayed
  3. from django.views.decorators.cache import never_cache
  4. from sites.models import SiteData
  5. from monitoring.models import Service
  6. from datetime import datetime
  7.  
  8. def service_change(site, service_name, service_status):
  9. # get showroom records
  10. try:
  11. t_data = Service.objects.filter(site=site,service_name=service_name).latest('timestamp')
  12. # check if service status has changed
  13. if t_data[-1].service_status != service_status:
  14. return True
  15. else:
  16. return False
  17. except:
  18. return True
  19.  
  20. def https_ios_reqeuest(url,username, password):
  21. # https auth
  22. base64string = base64.b64encode('%s:%s' % (username, password))
  23. request = urllib2.Request(url)
  24. request.add_header("Authorization", "Basic %s" % base64string)
  25. return urllib2.urlopen(request).read()
  26.  
  27. def output_cleaner(output):
  28. # results
  29. try:
  30. clean_output = re.findall('(?s)(?<=Command was: )(.*?)(?=</DL>)', output, flags=re.S)
  31. return re.sub(r'<.*>', '', clean_output[0])
  32. except:
  33. try:
  34. clean_output = re.findall('(?s)(?<=Command was: )(.*?)(?=</FORM>)', output, flags=re.S)
  35. return re.sub(r'<.*>', '', clean_output[0])
  36. except:
  37. return 'Error: {0}'.format(output)
  38.  
  39. def traceroute(site,trace_ip,service_name, username, password):
  40. trace_dns_url = 'https://{0}:8443/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(site.r1_loopback_ip,trace_ip)
  41. try:
  42. traceroute_dns = https_ios_reqeuest(trace_dns_url,username, password)
  43. except:
  44. return 'could not connect to {0}'.format(site.r1_loopback_ip)
  45. traceroute_dns_data = Service.objects.create(
  46. site = site,
  47. service_name = service_name,
  48. service_status = 'N/A',
  49. service_output = output_cleaner(traceroute_dns),
  50. timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  51. )
  52. return 'Trace: {0} Completed'.format(trace_ip)
  53.  
  54. def ping(site,ping_ip,service_name, username, password):
  55. dns_url = 'https://{0}:8443/level/15/exec/-/ping/{1}/timeout/1/source/vlan/5/CR'.format(site.r1_loopback_ip,ping_ip)
  56. try:
  57. ping = https_ios_reqeuest(dns_url,username, password)
  58. except:
  59. return 'could not connect to {0}'.format(site.r1_loopback_ip)
  60. # count the occurances of !
  61. ping_result = ping.count('!')
  62. # set service status
  63. ping_service_status = ''
  64. if ping_result >= 3:
  65. ping_service_status = 'OK'
  66. elif 1 <= ping_result <= 3:
  67. ping_service_status = 'WARNING'
  68. elif ping_result == 0:
  69. ping_service_status = 'DOWN'
  70. else:
  71. ping_service_status = 'UNKNOWN'
  72. # check to see if service has change, if yes create record
  73. ping_change = service_change(site, service_name, ping_service_status)
  74. if ping_change:
  75. ping_service_data = WrenService.objects.create(
  76. site = site,
  77. service_name = service_name,
  78. service_status = ping_service_status,
  79. service_output = output_cleaner(ping),
  80. timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  81. )
  82. return 'Ping: {0} Completed'.format(ping_ip)
  83.  
  84. def queries(sr):
  85. # define device credentials
  86. username="ncm"
  87. password="********"
  88. # ping DNS
  89. ping(sr,'10.10.1.1','Ping DNS', username, password)
  90. # traceroute DNS
  91. traceroute(sr,'10.10.1.1','Traceroute DNS', username, password)
  92. # ping frontend
  93. ping(sr,'frontend.domain.com','Ping Frontend', username, password)
  94. # traceroute frontend
  95. traceroute(sr,'frontend.domain.com','Traceroute Frontend', username, password)
  96. # ping test
  97. ping(sr,'test.domain.com','Ping Planner', username, password)
  98. # traceroute test
  99. traceroute(sr,'test.domain.com','Traceroute Planner', username, password)
  100. # ping Site 1
  101. ping(sr,'192.168.56.1','Ping Site 1', username, password)
  102. # traceroute Site 1
  103. traceroute(sr,'192.168.56.1','Traceroute Site 1', username, password)
  104. # ping Site 2
  105. ping(sr,'192.168.57.1','Ping Site 2', username, password)
  106. # traceroute Site 2
  107. traceroute(sr,'192.168.57.1','Traceroute Site 2', username, password)
  108. # ping Site 3
  109. ping(sr,'lon-dc-01.domain.com','Ping Site 3', username, password)
  110. # traceroute Site 3
  111. traceroute(sr,'lon-dc-01.domain.com','Traceroute Site 3', username, password)
  112. sys.stdout.write('Completed site: {}'.format(sr.location))
  113. sys.stdout.flush()
  114.  
  115. def main():
  116. num_cores = multiprocessing.cpu_count()
  117. srData = SiteData.objects.only('location','subnet').filter(is_live=True).exclude(site_type='Major Site')
  118. results = Parallel(n_jobs=num_cores)(delayed(queries)(i) for i in srData)
  119.  
  120. if __name__ == "__main__":
  121. start_time = time.time()
  122. main()
  123. print("--- %s seconds ---" % (time.time() - start_time))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement