Created
December 27, 2018 18:43
-
-
Save ruehowl/539edbd3e43c9bff22a629193dba262d to your computer and use it in GitHub Desktop.
fetch logs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from fabric import Connection | |
from invoke import task | |
import dns.resolver | |
import ipaddress | |
import sys | |
@task | |
def Mpw(cnt,domain): | |
print "MX records for {}".format(domain) | |
print find_host(domain,MX=True) | |
@task | |
def drmailforwardpostfix(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "drmailforwardpostfix" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def inboundcmfilter(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "inboundcmfilter" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def inboundopendkim(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "inboundopendkim" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def inboundpostfix(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "inboundpostfix" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def inboundratelmtd(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "inboundratelmtd" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def infraopenresty(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "infraopenresty" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def mailforwardcmfilter(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "mailforwardcmfilter" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def mailforwardpostfix(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "mailforwardpostfix" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def mailforwardpostsrsd(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "mailforwardpostsrsd" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def mailforwardratelimitd(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "mailforwardratelimitd" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def mailproxydovecot(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "mailproxydovecot" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def openxchangedoccnvrt(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "openxchangedoccnvrt" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def openxchangedovecot(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "openxchangedovecot" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def outbounddovecotsasl(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "outbounddovecotsasl" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def outboundopendkim(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "outboundopendkim" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def outboundpostfix(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "outboundpostfix" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
@task | |
def outboundratelmtd(cnt,colo='aus',list=False,date=None,keyword=None): | |
logName = "outboundratelmtd" | |
if list: | |
get_dates(colo,logName) | |
if keyword is not None: | |
get_log(colo,logName,keyword,date) | |
def get_dates(colo,logName): | |
try: | |
Connection("kafka1.tx1.mailhostbox.com").run("ls -al /kafkalogs/"+colo+"/"+logName+"* | awk -F \".\" '{print $2}' | sort | uniq") | |
except Exception as e: | |
print "Could not find any dates",e | |
return None | |
def get_log(colo,logName,keyword,date): | |
try: | |
Connection("kafka1.tx1.mailhostbox.com").run("zgrep {} /kafkalogs/{}/{}.{}*".format(keyword,colo,logName,date)) | |
except: | |
print "Could not find logs" | |
return None | |
def run_cmd(host,CMDs): | |
results = [] | |
with Connection(host) as cxn: | |
for cmd in CMDs: | |
try: | |
results.append(cxn.sudo(cmd, hide=True)) | |
except Exception as e: | |
results.append(None) | |
return results | |
def find_host(domain,A=False, MX=False): | |
ptr=[] | |
myResolver = dns.resolver.Resolver() | |
myResolver.nameservers = ['8.8.8.8', '8.8.4.4'] | |
if is_ip(domain): | |
IP = domain | |
if A: | |
return IP | |
else: | |
try: | |
resp = myResolver.query(domain ,'A') | |
except Exception as e: | |
return None | |
if A: | |
for ip in resp: | |
return str(ip) | |
if MX: | |
try: | |
myAnswers = myResolver.query(domain, "MX") | |
for rdata in myAnswers: | |
ptr.append(str(rdata)) | |
return ptr | |
except Exception as e: | |
print e | |
return None | |
else: | |
for ip in resp: | |
IP = ip | |
req = '.'.join(reversed(str(IP).split("."))) + ".in-addr.arpa" | |
try: | |
myAnswers = myResolver.query(req, "PTR") | |
for rdata in myAnswers: | |
ptr.append(str(rdata)) | |
return ptr | |
except Exception as e: | |
print e | |
return None | |
def is_ip(ip_addr): | |
try: | |
ip = ipaddress.ip_address(unicode(ip_addr, "utf-8")) | |
return True | |
except: | |
return False | |
def beautify(): | |
print "\n","+++"*10, "\n" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment