Source code for monitor.views
from django.shortcuts import render_to_response ,get_object_or_404
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.db.models import Q
from django.template import RequestContext
from django.contrib.contenttypes.models import ContentType
from scripts.my_shortcuts import render_to_hxr_response, paginate
from models import *
from django.contrib.auth import authenticate, login, logout
from django.core.urlresolvers import reverse
from django.contrib import messages
[docs]def login_user(request):
"""
Logs the user in
"""
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
messages.add_message(request, messages.SUCCESS, 'Welcome back!')
return HttpResponseRedirect(reverse('home'))
messages.add_message(request, messages.ERROR, 'We could not log you in')
return HttpResponseRedirect(reverse('login'))
return render_to_response('login.html',
context_instance=RequestContext(request))
def logout_user(request):
logout(request)
messages.add_message(request, messages.INFO, 'You have logged out')
return HttpResponseRedirect(reverse('login'))
[docs]def home(request):
"""
Show monitoring results for all systems being monitored.
This doesn't do any parsing, it just gets the latest information from the
database. A seperate script does the db update work.
"""
if request.user.is_authenticated():
groups = Group.objects.all()
error_count = Site.objects.filter(is_active = True, down_count__gte = 3).count()
return render_to_response('home.html',
{'groups': groups},
context_instance=RequestContext(request))
else:
return HttpResponseRedirect(reverse('login'))
@login_required
[docs]def group_data(request, group_id):
"""
Returns a json object containing details for each site being monitored in
this particular group
"""
group = Group.objects.get(pk = group_id)
sites = Site.objects.filter(group = group,
is_active = True).order_by('priority')
warning_count = sites.filter(down_count__gte = 1).count()
error_count = sites.filter(down_count__gte = 3).count()
return render_to_hxr_response('group.html',
{'sites': sites,
'warning_count': warning_count,
'error_count': error_count},
context_instance=RequestContext(request))
@login_required
[docs]def site_data(request, site_id):
"""
Returns details of the last 10 requests to view this particular site as a
json object
"""
site = Site.objects.get(pk = site_id)
recent_views = SiteView.objects.filter(site = site).order_by('-attempt_time')[:10]
good_codes = settings.GOOD_CODES
return render_to_hxr_response('views.html',
{'recent': recent_views,
'good_codes': good_codes},
context_instance=RequestContext(request))
@login_required
[docs]def outage(request, outage_id=None, code=None):
"""
Shows details of an outage, or the current outage if there is one
"""
if outage_id is not None:
outage = get_object_or_404(Outage, pk = outage_id)
elif code is not None:
try:
outage = Outage.objects.filter(code = code).order_by('-start_date')[0]
except:
outage = get_object_or_404(Outage, end_time = None)
else:
outage = get_object_or_404(Outage, end_time = None)
return render_to_response('outage.html',
{'outage': outage},
context_instance=RequestContext(request))
@login_required
[docs]def outages(request):
"""
Lists all outages recorded on the system. You can click on each one to
view the details of it.
"""
outage_list = Outage.objects.all().order_by('-start_time')
outages = paginate(outage_list, 25, request.GET.get('page'))
return render_to_response('outages.html',
{'outages': outages},
context_instance=RequestContext(request))