root/tester/views.py

Revision 0013bdd19ea17ff1809bb2431bb3a920bcd712ee, 4.8 KB (checked in by Frederic Lepied <frederic.lepied@…>, 3 years ago)

added a naviagtion by test names

  • Property mode set to 100644
Line 
1import re
2from django.http import HttpResponseRedirect, HttpResponse, Http404
3from django.shortcuts import render_to_response, get_object_or_404
4from django.core.servers.basehttp import FileWrapper
5from forms import UploadFileForm
6from pxe.common import *
7from tester.models import *
8
9def upload_file(request, logid):
10    print 'upload_file', logid
11    if request.method == 'POST':
12        form = UploadFileForm(request.POST, request.FILES)
13        mac = get_mac(request)
14        s = get_object_or_404(System, macaddress__mac=simplify_mac(mac))
15        log = get_object_or_404(TestLog, id=logid)
16        if form.is_valid():
17            log.status = 'D'
18            log.save()
19            print 'valid', log.status
20            handle_uploaded_file(request.FILES['file'], log.id)
21            process_file(log)
22            return HttpResponse("uploaded", mimetype="text/plain")
23        else:
24            log.status = 'E'
25            log.save()
26            print 'invalid form', log.status
27    else:
28        form = UploadFileForm()
29    return render_to_response('upload.html', {'form': form})
30
31def get_filename(id):
32    return '%s/%d.log' % (settings.TEST_UPLOAD_DIR, id)
33
34def handle_uploaded_file(f, id):
35    destination = open(get_filename(id), 'wb+')
36    for chunk in f.chunks():
37        destination.write(chunk)
38    destination.close()
39
40info_regexp = re.compile('^([IEWSVT]): (.*)')
41
42def add_info_line(type, text, log):
43    i = InfoLine(type=type, text=text, log=log)
44    i.save()
45    return i
46
47def process_file(log):
48    info = 0
49    error = 0
50    warning = 0
51    for line in open(get_filename(log.id)).readlines():
52        res = info_regexp.search(line)
53        if res:
54            if res.group(1) == 'I':
55                info = info + 1
56                add_info_line(res.group(1), res.group(2), log)
57            elif res.group(1) == 'E':
58                error = error + 1
59                add_info_line(res.group(1), res.group(2), log)
60            elif res.group(1) == 'W':
61                warning = warning + 1
62                add_info_line(res.group(1), res.group(2), log)
63            elif res.group(1) == 'V':
64                version = res.group(2)
65                try:
66                    v = SystemVersion.objects.get(name=version)
67                except SystemVersion.DoesNotExist:
68                    v = SystemVersion(name=version)
69                    v.save()
70                log.version = v
71    log.warnings = warning
72    log.infos = info
73    log.errors = error
74    log.save()
75   
76def next_test1(request):
77    mac = get_mac(request)
78    return next_test(request, mac)
79
80def next_test(request, mac):
81    smac = simplify_mac(mac)
82    s = get_object_or_404(System, macaddress__mac=smac)
83    name = 'wait'
84    logs = TestLog.objects.filter(system=s, status='R').order_by('date')
85    if logs and len(logs) > 0:
86        log = logs[0]
87        name = log.test_name.name
88        log.status = 'S'
89        log.save()
90    else:
91        log = None
92    print "%s (%s) -> %s (%s)" % (s.name, mac, name, str(log))
93    return render_to_response(name + settings.TEST_SUFFIX, {'testname': name, 'system': s.name, 'log': log})
94
95def logs(request, verid):
96    version = get_object_or_404(SystemVersion, id=verid)
97    logs = TestLog.objects.filter(version=version).order_by('-date')
98    return render_to_response('logs.html', {'logs': logs, 'version': version})   
99
100def log(request, logid):
101    log = get_object_or_404(TestLog, id=logid)
102    infos = InfoLine.objects.filter(log=log).order_by('id')
103    return render_to_response('log.html', {'log': log, 'infos': infos})
104
105def content(request, logid):
106    log = get_object_or_404(TestLog, id=logid)
107    filename = get_filename(log.id)
108    wrapper = FileWrapper(file(filename))
109    response = HttpResponse(wrapper, content_type='text/plain')
110    response['Content-Length'] = os.path.getsize(filename)
111    return response
112
113def index(request):
114    versions = SystemVersion.objects.all().order_by('-id')
115    systems = System.objects.all().order_by('name')
116    testnames = TestName.objects.filter(available=True).order_by('name')
117    return render_to_response('index.html', {'versions': versions,
118                                             'systems': systems,
119                                             'testnames': testnames})   
120
121def script(request, name):
122    return render_to_response(name + settings.TEST_SUFFIX, {'testname': name, 'system': 'system', 'log': None})
123
124def system(request, sysid):
125    s = get_object_or_404(System, id=sysid)
126    testlogs = TestLog.objects.filter(system=s).order_by('-date')
127    logs = Log.objects.filter(system=s).order_by('-date')[0:10]
128    return render_to_response('system.html', {'system': s, 'logs': testlogs, 'boots': logs})   
129
130def testname(request, tstid):
131    name = get_object_or_404(TestName, id=tstid)
132    logs = TestLog.objects.filter(test_name=name).order_by('-date')
133    return render_to_response('tests.html', {'logs': logs, 'testname': name})   
134
135# views.py ends here
Note: See TracBrowser for help on using the browser.