|
|
- from datetime import timedelta as td
-
- from django.conf import settings
- from django.contrib.auth.decorators import login_required
- from django.http import HttpResponseForbidden
- from django.shortcuts import redirect, render
- from django.utils import timezone
-
- from hc.api.models import Check, Ping
- from hc.front.forms import TimeoutForm
-
-
- def _welcome(request):
- if "welcome_code" not in request.session:
- check = Check()
- check.save()
- code = str(check.code)
- request.session["welcome_code"] = code
- else:
- code = request.session["welcome_code"]
- check = Check.objects.get(code=code)
-
- if check.alert_after:
- duration = check.alert_after - timezone.now()
- timer = int(duration.total_seconds())
- timer_formatted = "%dh %dm %ds" % (timer / 3600, (timer / 60) % 60, timer % 60)
- else:
- timer = 0
- timer_formatted = "Never"
-
- ctx = {
- "page": "welcome",
- "check": check,
- "timer": timer,
- "timer_formatted": timer_formatted,
- "ping_url": check.url()
- }
-
- return render(request, "front/welcome.html", ctx)
-
-
- def _my_checks(request):
- checks = Check.objects.filter(user=request.user).order_by("created")
-
- ctx = {
- "checks": checks,
- "now": timezone.now()
- }
-
- return render(request, "front/my_checks.html", ctx)
-
-
- def index(request):
- if request.user.is_authenticated():
- return _my_checks(request)
- else:
- return _welcome(request)
-
-
- def pricing(request):
- return render(request, "front/pricing.html", {"page": "pricing"})
-
-
- def docs(request):
- ctx = {
- "page": "docs",
- "ping_endpoint": settings.PING_ENDPOINT
- }
-
- return render(request, "front/docs.html", ctx)
-
-
- def about(request):
- return render(request, "front/about.html", {"page": "about"})
-
-
- @login_required
- def add_check(request):
- assert request.method == "POST"
-
- check = Check(user=request.user)
- check.save()
- return redirect("hc-index")
-
-
- @login_required
- def update_name(request, code):
- assert request.method == "POST"
-
- check = Check.objects.get(code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- check.name = request.POST["name"]
- check.save()
-
- return redirect("hc-index")
-
-
- @login_required
- def update_timeout(request, code):
- assert request.method == "POST"
-
- check = Check.objects.get(code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- form = TimeoutForm(request.POST)
- if form.is_valid():
- check.timeout = td(seconds=form.cleaned_data["timeout"])
- check.grace = td(seconds=form.cleaned_data["grace"])
- check.save()
-
- return redirect("hc-index")
-
-
- @login_required
- def email_preview(request, code):
- """ A debug view to see how email will look.
-
- Will keep it around until I'm happy with email stying.
-
- """
-
- check = Check.objects.get(code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- ctx = {
- "check": check,
- "checks": check.user.check_set.all(),
- "now": timezone.now()
-
- }
-
- return render(request, "emails/alert/body.html", ctx)
-
-
- @login_required
- def remove(request, code):
- assert request.method == "POST"
-
- check = Check.objects.get(code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- check.delete()
-
- return redirect("hc-index")
-
-
- @login_required
- def log(request, code):
-
- check = Check.objects.get(code=code)
- if check.user != request.user:
- return HttpResponseForbidden()
-
- pings = Ping.objects.filter(owner=check).order_by("-created")[:100]
-
- ctx = {
- "check": check,
- "pings": pings
-
- }
-
- return render(request, "front/log.html", ctx)
|