views.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import csv
  2. from django.contrib import messages
  3. from django.core.urlresolvers import reverse
  4. from django.http import HttpResponseRedirect, HttpResponse
  5. from django.shortcuts import render
  6. from .testmodels import TestRun
  7. from mongoengine import ValidationError
  8. from datetime import datetime
  9. import logging
  10. logger = logging.getLogger(__name__)
  11. def index(request):
  12. tests = TestRun.objects().order_by('-created')
  13. return render(request, 'loadtests/index.html', {'tests': tests})
  14. def testsetup(request, testName):
  15. test = TestRun()
  16. test.name = testName
  17. test.created = datetime.now()
  18. test = test.save()
  19. response = HttpResponse('{ "testId": ' + str(test.id) + ' }', content_type='json')
  20. return response
  21. def deletetest(request, id):
  22. try:
  23. test = TestRun.objects(id=id).first()
  24. except (IndexError, ValidationError) as e:
  25. return handleException(request, id, e)
  26. test.delete()
  27. return HttpResponseRedirect(reverse('loadtests:home'))
  28. def createcsv(request, id):
  29. test = TestRun.objects(id=id).first()
  30. # Create the HttpResponse object with the appropriate CSV header.
  31. response = HttpResponse(content_type='text/csv')
  32. filename = '%s_%s.csv' % (test.name, test.volumeId)
  33. response['Content-Disposition'] = 'attachment; filename="%s"' % (filename)
  34. writer = csv.writer(response)
  35. for result in test.results:
  36. writer.writerow([result.durationInSec])
  37. writer.writerow(['average', test.get_average])
  38. return response
  39. def handleException(request, id, e):
  40. if type(e) is ValidationError:
  41. messages.error(request, '%s not a valid ObjectId' % id)
  42. elif type(e) is IndexError:
  43. messages.error(request, 'object for %s not found in db' % id)
  44. return HttpResponseRedirect(reverse('loadtests:home'))