def upt_engineer_profile(request, slug): from forms import EngineerForm, UserForm from django.contrib.auth.models import Permission message = None engineer = Engineer.objects.get(user__username=slug) mailserver_list = get_mx_list(engineer.company) user_form = UserForm(instance=engineer.user) form = EngineerForm(instance=engineer) if request.method == 'POST': form = EngineerForm(data=request.POST, instance=engineer) user_form = UserForm(data=request.POST, instance=engineer.user) perm_form = EngineerPermForm(request.POST) if form.is_valid() and user_form.is_valid() and perm_form.is_valid(): form.save() user_form.save() message = "Engineer updated successfully" company = engineer.company engineer_list = Engineer.objects.filter(company=company) return render_to_response("profiles/engineer.html", { 'slug': slug, 'engineer_form': form.as_ul(), 'user_form': user_form.as_ul(), 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def upt_mailserver(request, slug): from forms import UptMailserverForm, MailserverPrefsForm engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) mx = Mailserver.objects.get(slug=slug) form = UptMailserverForm(mx, instance=mx) threshold_form = MailserverPrefsForm(instance=mx.mailserverprefs_set.get()) message = None company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': form = UptMailserverForm(mx, data=request.POST, instance=mx) threshold_form = MailserverPrefsForm(request.POST) form.user = engineer.user if form.is_valid(): message = "Mailserver details updated successfully" form.save() name = form.cleaned_data['name'] mx.slug = slugify(name) mx.save() add_feed_mailserver(mx) threshold_form = MailserverPrefsForm(data=request.POST, instance=mx.mailserverprefs_set.get()) threshold_form.save() return render_to_response("hosts/update_mailserver.html", { 'mx': mx, 'form': form, 'threshold_form': threshold_form, 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def add_mailserver(request): from datetime import datetime from datetime import timedelta from mxhelpers import fake_fill engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) message = None company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': site_form = MailserverForm(request.POST) if site_form.is_valid(): if request.user.is_authenticated(): mx_url=site_form.cleaned_data['mx_url'] ipaddr=site_form.cleaned_data['ipaddr'] new_mailserver = Mailserver(name=site_form.cleaned_data['name'], slug=slugify(site_form.cleaned_data['name']), company=engineer.company, mx_url=mx_url, ipaddr=ipaddr, ) new_mailserver.save() new_mailserver.alert_contact.add(engineer) MailserverPrefs.objects.create(mailserver=new_mailserver) rbl_all = Blacklist.objects.all() for rbl_obj in rbl_all: new_mailserver.rbl.add(rbl_obj) mx_status = MailserverRblStatus(mailserver=new_mailserver, rbl=rbl_obj, status='clear') mx_status.save() end_results, rbl_result = run_diag(mx_url, ipaddr) if end_results['revdns_result'] is not "no": revdns_status = "yes" else: revdns_status = "no" MailserverStatus.objects.create(mailserver=new_mailserver, port="up", blacklist="clear", webmail="up", relay=end_results['relay_result'], backupmx=end_results['redund_result'], backupmxport=end_results['backupmxport_result'], revdns=revdns_status) add_feed_mailserver(new_mailserver) fake_fill(new_mailserver) # DO NOT remove. mark_checked(new_mailserver, 'port', 'us') # DO NOT remove message = "Mailserver has been created successfully." site_form = MailserverForm() # this clears the form to add more else: site_form = MailserverForm() return render_to_response("hosts/add_mailserver.html", { 'mailserver_form': site_form, 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def dashboard(request): from monitor.models import PortHistory, BlacklistHistory try: engineer = Engineer.objects.get(user__username=request.user.username) except: return HttpResponseRedirect('/accounts/profile/') success_type = request.GET.get('success') if success_type == "mailserver": message = "Mailserver deleted successfully" elif success_type == "engineer": message = "Engineer deleted successfully" elif success_type == "password": message = "Password changed successfully" else: message = None mailserver_list = get_mx_list(engineer.company) avail_history = PortHistory.objects.filter( mailserver__company=engineer.company, mailserver__active=True).order_by('-add_time') open_avail_history = avail_history.filter(close_time=None) dataset_availability = [ mailserver_list.filter(mailserverstatus__port='up').count(), mailserver_list.filter(mailserverstatus__port='down').count() ] blacklist_history = BlacklistHistory.objects.filter( mailserver__company=engineer.company, mailserver__active=True).order_by('-add_time') open_blacklist_history = blacklist_history.filter(close_time=None) dataset_blacklist = [ mailserver_list.filter( mailserverstatus__blacklist='blacklisted').count(), mailserver_list.filter(mailserverstatus__blacklist='clear').count() ] dataset_hist, d_range = build_hist_dataset(avail_history) open_incidents = [] for s in [open_blacklist_history, open_avail_history]: for x in s: open_incidents.append(x) company = engineer.company daily_cost = get_daily_cost(company) engineer_list = Engineer.objects.filter(company=company) return render_to_response("profiles/dashboard.html", { 'mailserver_list': mailserver_list, 'engineer_list': engineer_list, 'company': company, 'message': message, 'dataset_availability': dataset_availability, 'blacklist_history': open_blacklist_history, 'dataset_blacklist': dataset_blacklist, 'dataset_hist': dataset_hist, 'open_incidents': open_incidents, 'daily_cost': daily_cost, 'max_daily_incidents': max(dataset_hist), 'd_range': d_range, }, context_instance=RequestContext(request))
def add_engineer(request): from django.contrib.auth.models import User, Permission from django.template.defaultfilters import slugify site_form = AddEngineerForm() perm_form = EngineerPermForm() message = None engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': site_form = AddEngineerForm(request.POST) if site_form.is_valid(): if request.user.is_authenticated(): new_user = User.objects.create_user( slugify(site_form.cleaned_data['user']), site_form.cleaned_data['email'], site_form.cleaned_data['password1']) new_user.is_active = True new_user.first_name = site_form.cleaned_data['first_name'] new_user.last_name = site_form.cleaned_data['last_name'] new_user.save() if site_form.cleaned_data['can_edit_mx'] == True: perm = Permission.objects.get(codename="delete_mailserver") new_user.user_permissions.add(perm) perm = Permission.objects.get(codename="change_mailserver") new_user.user_permissions.add(perm) perm = Permission.objects.get(codename="add_mailserver") new_user.user_permissions.add(perm) if site_form.cleaned_data['can_edit_company'] == True: perm = Permission.objects.get(codename="change_company") new_user.user_permissions.add(perm) if site_form.cleaned_data['can_edit_billing'] == True: perm = Permission.objects.get( codename="add_invoicehistory") new_user.user_permissions.add(perm) perm = Permission.objects.get(codename="change_credit") new_user.user_permissions.add(perm) new_engineer = Engineer( user=new_user, timezone=site_form.cleaned_data['timezone'], company=company, mobile=site_form.cleaned_data['mobile']) new_engineer.save() message = "Engineer added successfully" return render_to_response("profiles/add_engineer.html", { 'mailserver_list': mailserver_list, 'engineer_form': site_form, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def free_diag(request): import timeit import dns.resolver from forms import DiagnosticForm diag_form = DiagnosticForm() pick_mx = None domain = None if request.method == 'POST': diag_form = DiagnosticForm(request.POST) if diag_form.is_valid(): domain = diag_form.cleaned_data['domain'] answers = dns.resolver.query(domain, 'MX') #if len(answers) > 1: # need to pick one # TODO: if user has only one MX, go straight to it pick_mx = [] for rdata in answers: raw_ip = dns.resolver.query( rdata.exchange.to_text().strip('.')) ipaddr = raw_ip[0].to_text() try: z = """\ import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2.0) s.connect(('%s', 25)) s.close() """ % ipaddr t = timeit.Timer(stmt=z).timeit(number=1) * 1000 pick_mx.append([rdata.exchange.to_text().strip('.'), "Up"]) except: pick_mx.append( [rdata.exchange.to_text().strip('.'), "Down"]) if request.user.is_authenticated(): engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) template = "hosts/diagnostic_int.html" else: mailserver_list = None template = "hosts/diagnostic.html" return render_to_response(template, { 'diagnostic_form': diag_form.as_ul(), 'pick_mx': pick_mx, 'tld': domain, 'mailserver_list': mailserver_list, }, context_instance=RequestContext(request))
def disp_error(request, slug): engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) company = engineer.company engineer_list = Engineer.objects.filter(company=company) return render_to_response("profiles/company.html", { 'company_form': form.as_ul(), 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, 'error_code': slug, }, context_instance=RequestContext(request))
def detail_mx(request, slug): from mxhelpers import get_rtt_dataset, get_availability, run_diag, get_diag_score from django.http import HttpResponse from django.core import serializers engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) mx_obj = Mailserver.objects.get(slug=slug) blacklist_history = BlacklistHistory.objects.filter(mailserver=mx_obj).order_by('-close_time') avail_history = PortHistory.objects.filter(mailserver=mx_obj) blacklist_status = MailserverRblStatus.objects.filter(mailserver=mx_obj) company = engineer.company engineer_list = Engineer.objects.filter(company=company) dataset = None rtt_labels = None scale_num = None img_url = None message = None end_results = MailserverStatus.objects.get(mailserver=mx_obj) if request.method == 'GET': if request.GET.get('range'): disp_range = request.GET.get('range') else: disp_range = 'hourly' return render_to_response("hosts/detail_mx.html", { 'message': message, 'mailserver_list': mailserver_list, 'mx': mx_obj, 'company': company, 'disp_range': disp_range, 'engineer_list': engineer_list, 'blacklist_history': blacklist_history, 'avail_history': avail_history, 'blacklist_status': blacklist_status, 'redund_result': end_results.backupmx, 'backupmxport_result': end_results.backupmxport, 'relay_result': end_results.relay, 'avail_result': end_results.port, 'revdns_result': end_results.revdns, 'diag_score': end_results.score, }, context_instance=RequestContext(request))
def free_diag(request): import timeit import dns.resolver from forms import DiagnosticForm diag_form = DiagnosticForm() pick_mx=None domain=None if request.method == 'POST': diag_form = DiagnosticForm(request.POST) if diag_form.is_valid(): domain = diag_form.cleaned_data['domain'] answers = dns.resolver.query(domain, 'MX') #if len(answers) > 1: # need to pick one # TODO: if user has only one MX, go straight to it pick_mx = [] for rdata in answers: raw_ip = dns.resolver.query(rdata.exchange.to_text().strip('.')) ipaddr = raw_ip[0].to_text() try: z = """\ import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2.0) s.connect(('%s', 25)) s.close() """ % ipaddr t = timeit.Timer(stmt=z).timeit(number=1)*1000 pick_mx.append([rdata.exchange.to_text().strip('.'), "Up"]) except: pick_mx.append([rdata.exchange.to_text().strip('.'), "Down"]) if request.user.is_authenticated(): engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) template = "hosts/diagnostic_int.html" else: mailserver_list = None template = "hosts/diagnostic.html" return render_to_response(template, { 'diagnostic_form': diag_form.as_ul(), 'pick_mx': pick_mx, 'tld': domain, 'mailserver_list': mailserver_list, }, context_instance=RequestContext(request))
def add_credit(request): from datetime import datetime from datetime import timedelta engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) message = None company = engineer.company engineer_list = Engineer.objects.filter(company=company) return render_to_response("hosts/add_credit.html", { 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def add_engineer(request): from django.contrib.auth.models import User, Permission from django.template.defaultfilters import slugify site_form = AddEngineerForm() perm_form = EngineerPermForm() message = None engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': site_form = AddEngineerForm(request.POST) if site_form.is_valid(): if request.user.is_authenticated(): new_user = User.objects.create_user(slugify(site_form.cleaned_data['user']), site_form.cleaned_data['email'], site_form.cleaned_data['password1']) new_user.is_active = True new_user.first_name = site_form.cleaned_data['first_name'] new_user.last_name = site_form.cleaned_data['last_name'] new_user.save() if site_form.cleaned_data['can_edit_mx'] == True: perm = Permission.objects.get(codename="delete_mailserver") new_user.user_permissions.add(perm) perm = Permission.objects.get(codename="change_mailserver") new_user.user_permissions.add(perm) perm = Permission.objects.get(codename="add_mailserver") new_user.user_permissions.add(perm) if site_form.cleaned_data['can_edit_company'] == True: perm = Permission.objects.get(codename="change_company") new_user.user_permissions.add(perm) if site_form.cleaned_data['can_edit_billing'] == True: perm = Permission.objects.get(codename="add_invoicehistory") new_user.user_permissions.add(perm) perm = Permission.objects.get(codename="change_credit") new_user.user_permissions.add(perm) new_engineer = Engineer(user=new_user, timezone=site_form.cleaned_data['timezone'], company=company, mobile=site_form.cleaned_data['mobile']) new_engineer.save() message = "Engineer added successfully" return render_to_response("profiles/add_engineer.html", { 'mailserver_list': mailserver_list, 'engineer_form': site_form, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def dashboard(request): from monitor.models import PortHistory, BlacklistHistory try: engineer = Engineer.objects.get(user__username=request.user.username) except: return HttpResponseRedirect('/accounts/profile/') success_type = request.GET.get('success') if success_type == "mailserver": message = "Mailserver deleted successfully" elif success_type == "engineer": message = "Engineer deleted successfully" elif success_type == "password": message = "Password changed successfully" else: message = None mailserver_list = get_mx_list(engineer.company) avail_history = PortHistory.objects.filter(mailserver__company=engineer.company, mailserver__active=True).order_by('-add_time') open_avail_history = avail_history.filter(close_time=None) dataset_availability = [mailserver_list.filter(mailserverstatus__port='up').count(), mailserver_list.filter(mailserverstatus__port='down').count()] blacklist_history = BlacklistHistory.objects.filter(mailserver__company=engineer.company, mailserver__active=True).order_by('-add_time') open_blacklist_history = blacklist_history.filter(close_time=None) dataset_blacklist = [mailserver_list.filter(mailserverstatus__blacklist='blacklisted').count(), mailserver_list.filter(mailserverstatus__blacklist='clear').count()] dataset_hist, d_range = build_hist_dataset(avail_history) open_incidents = [] for s in [open_blacklist_history, open_avail_history]: for x in s: open_incidents.append(x) company = engineer.company daily_cost = get_daily_cost(company) engineer_list = Engineer.objects.filter(company=company) return render_to_response("profiles/dashboard.html", { 'mailserver_list': mailserver_list, 'engineer_list': engineer_list, 'company': company, 'message': message, 'dataset_availability': dataset_availability, 'blacklist_history': open_blacklist_history, 'dataset_blacklist': dataset_blacklist, 'dataset_hist': dataset_hist, 'open_incidents': open_incidents, 'daily_cost': daily_cost, 'max_daily_incidents': max(dataset_hist), 'd_range': d_range, }, context_instance=RequestContext(request))
def user_login(request): engineer = Engineer.objects.filter(user=request.user) if len(engineer) == 0: form = AddCompanyForm() name_form = UpdateNameForm() return render_to_response("profiles/firstlogin.html", { 'company_form': form, 'name_form': name_form, }, context_instance=RequestContext(request)) else: try: message = None mailserver_list = get_mx_list(engineer.company) return HttpResponseRedirect('/dashboard/') except: return HttpResponseRedirect('/add/mailserver/')
def detail_mx(request, slug): from mxhelpers import get_rtt_dataset, get_availability, run_diag, get_diag_score from django.http import HttpResponse from django.core import serializers engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) mx_obj = Mailserver.objects.get(slug=slug) blacklist_history = BlacklistHistory.objects.filter( mailserver=mx_obj).order_by('-close_time') avail_history = PortHistory.objects.filter(mailserver=mx_obj) blacklist_status = MailserverRblStatus.objects.filter(mailserver=mx_obj) company = engineer.company engineer_list = Engineer.objects.filter(company=company) dataset = None rtt_labels = None scale_num = None img_url = None message = None end_results = MailserverStatus.objects.get(mailserver=mx_obj) if request.method == 'GET': if request.GET.get('range'): disp_range = request.GET.get('range') else: disp_range = 'hourly' return render_to_response("hosts/detail_mx.html", { 'message': message, 'mailserver_list': mailserver_list, 'mx': mx_obj, 'company': company, 'disp_range': disp_range, 'engineer_list': engineer_list, 'blacklist_history': blacklist_history, 'avail_history': avail_history, 'blacklist_status': blacklist_status, 'redund_result': end_results.backupmx, 'backupmxport_result': end_results.backupmxport, 'relay_result': end_results.relay, 'avail_result': end_results.port, 'revdns_result': end_results.revdns, 'diag_score': end_results.score, }, context_instance=RequestContext(request))
def company_profile(request): from forms import CompanyForm engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) company = engineer.company engineer_list = Engineer.objects.filter(company=company) form = CompanyForm(instance=company) message = None if request.method == 'POST': form = CompanyForm(data=request.POST, instance=company) if form.is_valid(): form.save() message = "Company details updated successfully" return render_to_response("profiles/upd_company.html", { 'company_form': form, 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def delete_mailserver(request, slug): engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) mx = Mailserver.objects.get(slug=slug) message = None company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': if request.user.is_authenticated(): mx = Mailserver.objects.get(slug=slug) mx.active = False mx.save() return HttpResponseRedirect('/dashboard/?success=mailserver') return render_to_response("hosts/delete_mailserver.html", { 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, 'mx': mx, }, context_instance=RequestContext(request))
def upt_mailserver(request, slug): from forms import UptMailserverForm, MailserverPrefsForm engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) mx = Mailserver.objects.get(slug=slug) form = UptMailserverForm(mx, instance=mx) threshold_form = MailserverPrefsForm(instance=mx.mailserverprefs_set.get()) message = None company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': form = UptMailserverForm(mx, data=request.POST, instance=mx) threshold_form = MailserverPrefsForm(request.POST) form.user = engineer.user if form.is_valid(): message = "Mailserver details updated successfully" form.save() name = form.cleaned_data['name'] mx.slug = slugify(name) mx.save() add_feed_mailserver(mx) threshold_form = MailserverPrefsForm( data=request.POST, instance=mx.mailserverprefs_set.get()) threshold_form.save() return render_to_response("hosts/update_mailserver.html", { 'mx': mx, 'form': form, 'threshold_form': threshold_form, 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))
def add_mailserver(request): from datetime import datetime from datetime import timedelta from mxhelpers import fake_fill engineer = Engineer.objects.get(user__username=request.user.username) mailserver_list = get_mx_list(engineer.company) message = None company = engineer.company engineer_list = Engineer.objects.filter(company=company) if request.method == 'POST': site_form = MailserverForm(request.POST) if site_form.is_valid(): if request.user.is_authenticated(): mx_url = site_form.cleaned_data['mx_url'] ipaddr = site_form.cleaned_data['ipaddr'] new_mailserver = Mailserver( name=site_form.cleaned_data['name'], slug=slugify(site_form.cleaned_data['name']), company=engineer.company, mx_url=mx_url, ipaddr=ipaddr, ) new_mailserver.save() new_mailserver.alert_contact.add(engineer) MailserverPrefs.objects.create(mailserver=new_mailserver) rbl_all = Blacklist.objects.all() for rbl_obj in rbl_all: new_mailserver.rbl.add(rbl_obj) mx_status = MailserverRblStatus(mailserver=new_mailserver, rbl=rbl_obj, status='clear') mx_status.save() end_results, rbl_result = run_diag(mx_url, ipaddr) if end_results['revdns_result'] is not "no": revdns_status = "yes" else: revdns_status = "no" MailserverStatus.objects.create( mailserver=new_mailserver, port="up", blacklist="clear", webmail="up", relay=end_results['relay_result'], backupmx=end_results['redund_result'], backupmxport=end_results['backupmxport_result'], revdns=revdns_status) add_feed_mailserver(new_mailserver) fake_fill(new_mailserver) # DO NOT remove. mark_checked(new_mailserver, 'port', 'us') # DO NOT remove message = "Mailserver has been created successfully." site_form = MailserverForm( ) # this clears the form to add more else: site_form = MailserverForm() return render_to_response("hosts/add_mailserver.html", { 'mailserver_form': site_form, 'mailserver_list': mailserver_list, 'message': message, 'company': company, 'engineer_list': engineer_list, }, context_instance=RequestContext(request))