Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests, re, json, urllib2, base64, time, multiprocessing, sys
- from joblib import Parallel, delayed
- from django.views.decorators.cache import never_cache
- from sites.models import SiteData
- from monitoring.models import Service
- from datetime import datetime
- def service_change(site, service_name, service_status):
- # get showroom records
- try:
- t_data = Service.objects.filter(site=site,service_name=service_name).latest('timestamp')
- # check if service status has changed
- if t_data[-1].service_status != service_status:
- return True
- else:
- return False
- except:
- return True
- def https_ios_reqeuest(url,username, password):
- # https auth
- base64string = base64.b64encode('%s:%s' % (username, password))
- request = urllib2.Request(url)
- request.add_header("Authorization", "Basic %s" % base64string)
- return urllib2.urlopen(request).read()
- def output_cleaner(output):
- # results
- try:
- clean_output = re.findall('(?s)(?<=Command was: )(.*?)(?=</DL>)', output, flags=re.S)
- return re.sub(r'<.*>', '', clean_output[0])
- except:
- try:
- clean_output = re.findall('(?s)(?<=Command was: )(.*?)(?=</FORM>)', output, flags=re.S)
- return re.sub(r'<.*>', '', clean_output[0])
- except:
- return 'Error: {0}'.format(output)
- def traceroute(site,trace_ip,service_name, username, password):
- 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)
- try:
- traceroute_dns = https_ios_reqeuest(trace_dns_url,username, password)
- except:
- return 'could not connect to {0}'.format(site.r1_loopback_ip)
- traceroute_dns_data = Service.objects.create(
- site = site,
- service_name = service_name,
- service_status = 'N/A',
- service_output = output_cleaner(traceroute_dns),
- timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- )
- return 'Trace: {0} Completed'.format(trace_ip)
- def ping(site,ping_ip,service_name, username, password):
- dns_url = 'https://{0}:8443/level/15/exec/-/ping/{1}/timeout/1/source/vlan/5/CR'.format(site.r1_loopback_ip,ping_ip)
- try:
- ping = https_ios_reqeuest(dns_url,username, password)
- except:
- return 'could not connect to {0}'.format(site.r1_loopback_ip)
- # count the occurances of !
- ping_result = ping.count('!')
- # set service status
- ping_service_status = ''
- if ping_result >= 3:
- ping_service_status = 'OK'
- elif 1 <= ping_result <= 3:
- ping_service_status = 'WARNING'
- elif ping_result == 0:
- ping_service_status = 'DOWN'
- else:
- ping_service_status = 'UNKNOWN'
- # check to see if service has change, if yes create record
- ping_change = service_change(site, service_name, ping_service_status)
- if ping_change:
- ping_service_data = WrenService.objects.create(
- site = site,
- service_name = service_name,
- service_status = ping_service_status,
- service_output = output_cleaner(ping),
- timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
- )
- return 'Ping: {0} Completed'.format(ping_ip)
- def queries(sr):
- # define device credentials
- username="ncm"
- password="********"
- # ping DNS
- ping(sr,'10.10.1.1','Ping DNS', username, password)
- # traceroute DNS
- traceroute(sr,'10.10.1.1','Traceroute DNS', username, password)
- # ping frontend
- ping(sr,'frontend.domain.com','Ping Frontend', username, password)
- # traceroute frontend
- traceroute(sr,'frontend.domain.com','Traceroute Frontend', username, password)
- # ping test
- ping(sr,'test.domain.com','Ping Planner', username, password)
- # traceroute test
- traceroute(sr,'test.domain.com','Traceroute Planner', username, password)
- # ping Site 1
- ping(sr,'192.168.56.1','Ping Site 1', username, password)
- # traceroute Site 1
- traceroute(sr,'192.168.56.1','Traceroute Site 1', username, password)
- # ping Site 2
- ping(sr,'192.168.57.1','Ping Site 2', username, password)
- # traceroute Site 2
- traceroute(sr,'192.168.57.1','Traceroute Site 2', username, password)
- # ping Site 3
- ping(sr,'lon-dc-01.domain.com','Ping Site 3', username, password)
- # traceroute Site 3
- traceroute(sr,'lon-dc-01.domain.com','Traceroute Site 3', username, password)
- sys.stdout.write('Completed site: {}'.format(sr.location))
- sys.stdout.flush()
- def main():
- num_cores = multiprocessing.cpu_count()
- srData = SiteData.objects.only('location','subnet').filter(is_live=True).exclude(site_type='Major Site')
- results = Parallel(n_jobs=num_cores)(delayed(queries)(i) for i in srData)
- if __name__ == "__main__":
- start_time = time.time()
- main()
- print("--- %s seconds ---" % (time.time() - start_time))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement