Changeset 5fc8fc0082bfa6f10d4a3a4edc64612ee737aab6

Show
Ignore:
Timestamp:
02/11/09 19:38:27 (3 years ago)
Author:
Frederic Lepied <frederic.lepied@…>
Children:
3d3414278502ad60842ab623bcae9692a7b9ec7b
Parents:
920e704d3e590918bbcc96affb46112454862f18
git-committer:
Frederic Lepied <frederic.lepied@…> (02/11/09 19:38:27)
Message:

- activated admin interface by default.
- put in place a mini web site to navigate through the tests reports.

Files:
5 added
6 modified

Legend:

Unmodified
Added
Removed
  • pxe/models.py

    r1f8d77d r5fc8fc0  
    2525    system = models.ForeignKey(System) 
    2626    boot_name = models.ForeignKey(BootName) 
    27      
     27 
     28from django.contrib import admin 
     29admin.site.register(System) 
     30admin.site.register(MacAddress) 
     31admin.site.register(BootName) 
     32admin.site.register(Log) 
     33 
    2834# models.py ends here 
  • pxe/views.py

    r8784ede r5fc8fc0  
    1010from django.http import HttpResponse, Http404 
    1111from django.shortcuts import get_object_or_404 
    12 from common import * 
    13 from models import * 
     12from pxe.common import * 
     13from pxe.models import * 
    1414 
    1515def localboot1(request): 
  • settings.py

    r7218e7c r5fc8fc0  
    2828TESTS_DIR = '/home/flepied/work/tests/' 
    2929TEST_SUFFIX = '.test' 
    30 TEST_UPLOAD_DIR = '/home/flepied/work/tests/results/' 
     30TEST_UPLOAD_DIR = '/home/flepied/work/test-results/' 
    3131 
    3232# Local time zone for this installation. Choices can be found here: 
     
    9595    'pxe', 
    9696    'tester', 
    97     #'django.contrib.admin', 
     97    'django.contrib.admin', 
    9898) 
  • tester/models.py

    r7218e7c r5fc8fc0  
    55    name = models.CharField(max_length=100) 
    66    available = models.BooleanField() 
     7 
     8class SystemVersion(models.Model): 
     9    name = models.CharField(max_length=100) 
    710 
    811class TestLog(models.Model): 
     
    1821    system = models.ForeignKey(System) 
    1922    test_name = models.ForeignKey(TestName) 
     23    warnings = models.IntegerField(default=0) 
     24    infos = models.IntegerField(default=0) 
     25    errors = models.IntegerField(default=0) 
     26    version = models.ForeignKey(SystemVersion, null=True) 
     27 
     28class InfoLine(models.Model): 
     29    type = models.CharField(max_length=1) 
     30    log = models.ForeignKey(TestLog) 
     31    text = models.CharField(max_length=100) 
     32 
     33from django.contrib import admin 
     34admin.site.register(SystemVersion) 
     35admin.site.register(TestName) 
     36admin.site.register(TestLog) 
     37admin.site.register(InfoLine) 
  • tester/views.py

    r7218e7c r5fc8fc0  
     1import re 
    12from django.http import HttpResponseRedirect, HttpResponse, Http404 
    23from django.shortcuts import render_to_response, get_object_or_404 
     4from django.core.servers.basehttp import FileWrapper 
    35from forms import UploadFileForm 
    46from pxe.common import * 
     
    2022            print 'valid', log.status 
    2123            handle_uploaded_file(request.FILES['file'], log.id) 
     24            process_file(log) 
    2225            return HttpResponse("uploaded", mimetype="text/plain") 
    2326        else: 
     
    2932    return render_to_response('upload.html', {'form': form}) 
    3033 
     34def get_filename(id): 
     35    return '%s/%d.log' % (settings.TEST_UPLOAD_DIR, id) 
     36 
    3137def handle_uploaded_file(f, id): 
    32     destination = open('%s/%d.log' % (settings.TEST_UPLOAD_DIR, id), 'wb+') 
     38    destination = open(get_filename(id), 'wb+') 
    3339    for chunk in f.chunks(): 
    3440        destination.write(chunk) 
    3541    destination.close() 
    3642 
     43info_regexp = re.compile('^([IEWSVT]): (.*)') 
     44 
     45def add_info_line(type, text, log): 
     46    i = InfoLine(type=type, text=text, log=log) 
     47    i.save() 
     48    return i 
     49 
     50def process_file(log): 
     51    info = 0 
     52    error = 0 
     53    warning = 0 
     54    for line in open(get_filename(log.id)).readlines(): 
     55        res = info_regexp.search(line) 
     56        if res: 
     57            if res.group(1) == 'I': 
     58                info = info + 1 
     59                add_info_line(res.group(1), res.group(2), log) 
     60            elif res.group(1) == 'E': 
     61                error = error + 1 
     62                add_info_line(res.group(1), res.group(2), log) 
     63            elif res.group(1) == 'W': 
     64                warning = warning + 1 
     65                add_info_line(res.group(1), res.group(2), log) 
     66            elif res.group(1) == 'V': 
     67                version = res.group(2) 
     68                try: 
     69                    v = SystemVersion.objects.get(name=version) 
     70                except SystemVersion.DoesNotExist: 
     71                    v = SystemVersion(name=version) 
     72                    v.save() 
     73                log.version = v 
     74    log.warnings = warning 
     75    log.infos = info 
     76    log.errors = error 
     77    log.save() 
     78     
    3779def next_test1(request): 
    3880    mac = get_mac(request) 
     
    4991        log.status = 'S' 
    5092        log.save() 
    51     return render_to_response(name + settings.TEST_SUFFIX, {'testname', name}) 
     93    print "%s (%s) -> %s" % (s.name, mac, name) 
     94    return render_to_response(name + settings.TEST_SUFFIX, {'testname': name, 'system': s.name}) 
     95 
     96def logs(request, verid): 
     97    version = get_object_or_404(SystemVersion, id=verid) 
     98    logs = TestLog.objects.filter(version=version).order_by('-date') 
     99    return render_to_response('logs.html', {'logs': logs, 'version': version})     
     100 
     101def log(request, logid): 
     102    log = get_object_or_404(TestLog, id=logid) 
     103    infos = InfoLine.objects.filter(log=log).order_by('id') 
     104    return render_to_response('log.html', {'log': log, 'infos': infos})     
     105 
     106def content(request, logid): 
     107    log = get_object_or_404(TestLog, id=logid) 
     108    filename = get_filename(log.id) 
     109    wrapper = FileWrapper(file(filename)) 
     110    response = HttpResponse(wrapper, content_type='text/plain') 
     111    response['Content-Length'] = os.path.getsize(filename) 
     112    return response 
     113 
     114def index(request): 
     115    versions = SystemVersion.objects.all().order_by('-id') 
     116    return render_to_response('index.html', {'versions': versions})     
    52117     
    53118# views.py ends here 
  • urls.py

    r7218e7c r5fc8fc0  
    22 
    33# Uncomment the next two lines to enable the admin: 
    4 #from django.contrib import admin 
    5 #admin.autodiscover() 
     4from django.contrib import admin 
     5admin.autodiscover() 
    66 
    77urlpatterns = patterns('', 
     
    2222    (r'^nexttest/(?P<mac>[a-fA-F0-9:-]+)/$', 'tester.views.next_test'), 
    2323     
     24    (r'^$', 'tester.views.index'), 
     25    (r'^tests/(?P<verid>[0-9]+)/$', 'tester.views.logs'), 
     26    (r'^test/(?P<logid>[0-9]+)/$', 'tester.views.log'), 
     27    (r'^testcontent/(?P<logid>[0-9]+)/$', 'tester.views.content'), 
     28 
    2429    # Uncomment the next line to enable the admin: 
    25     #(r'^admin/(.*)', admin.site.root), 
     30    (r'^admin/(.*)', admin.site.root), 
    2631)