~nskaggs/qa-dashboard/contribtrack

« back to all changes in this revision

Viewing changes to dashboard/views/bootspeed.py

  • Committer: Joe Talbott
  • Date: 2012-09-13 16:33:58 UTC
  • Revision ID: joe.talbott@canonical.com-20120913163358-u95p0q4am1ne5br4
bootspeed - Update to add charts and some prototyping code.

*** NOTE ***
This is not at a finished state.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import datetime
 
2
 
 
3
from django.db import models
1
4
from django.views.decorators.http import (
2
5
        require_GET,
3
6
        require_POST,
4
7
        )
5
8
 
6
 
from django.shortcuts import render_to_response
 
9
from django.http import HttpResponse
 
10
from django.shortcuts import (
 
11
        render_to_response,
 
12
        get_object_or_404,
 
13
        )
 
14
 
 
15
import matplotlib
 
16
matplotlib.use('Agg')
 
17
from matplotlib.backends.backend_agg import FigureCanvasAgg
 
18
from matplotlib.dates import date2num
 
19
from pylab import figure, plot, gca, plot_date, bar
7
20
 
8
21
from dashboard.models import (
9
22
        Image,
32
45
            }
33
46
 
34
47
    return render_to_response('bootspeed/overview.html', data)
 
48
 
 
49
@require_GET
 
50
def image_overview(request, image_id):
 
51
    image = get_object_or_404(Image, id=image_id)
 
52
 
 
53
    data = {
 
54
            'image': image,
 
55
            'results': image.imageresult_set.values('ran_at').annotate(
 
56
                kernel_init_avg=models.Avg('kernel_init'),
 
57
                kernel_init_min=models.Min('kernel_init'),
 
58
                kernel_init_max=models.Max('kernel_init'),
 
59
 
 
60
                kernel_avg=models.Avg('kernel'),
 
61
                kernel_min=models.Min('kernel'),
 
62
                kernel_max=models.Max('kernel'),
 
63
 
 
64
                plumbing_avg=models.Avg('plumbing'),
 
65
                plumbing_min=models.Min('plumbing'),
 
66
                plumbing_max=models.Max('plumbing'),
 
67
 
 
68
                xorg_avg=models.Avg('xorg'),
 
69
                xorg_min=models.Min('xorg'),
 
70
                xorg_max=models.Max('xorg'),
 
71
 
 
72
                desktop_avg=models.Avg('desktop'),
 
73
                desktop_min=models.Min('desktop'),
 
74
                desktop_max=models.Max('desktop'),
 
75
 
 
76
                boot_avg=models.Avg('boot'),
 
77
                boot_min=models.Min('boot'),
 
78
                boot_max=models.Max('boot'),
 
79
                ),
 
80
            }
 
81
 
 
82
    return render_to_response('bootspeed/image_overview.html', data)
 
83
 
 
84
CHART_WIDTH_DAYS = 60
 
85
@require_GET
 
86
def build_boot_chart(request, image_id):
 
87
    image = Image.objects.get(id=image_id)
 
88
 
 
89
    end = datetime.datetime.now()
 
90
    start = end - datetime.timedelta(days=CHART_WIDTH_DAYS)
 
91
    
 
92
    x_data, avg_data, max_data, min_data, low_error, hi_error = image.get_chart_data(
 
93
            start=start,
 
94
            end=end,
 
95
            )
 
96
 
 
97
    f = figure(figsize=(12,9)) # inches
 
98
    f.patch.set_alpha(0.0) # transparent background
 
99
 
 
100
 
 
101
    #plot_date(date2num(x_data), avg_data, 'b-')
 
102
    #plot_date(date2num(x_data), max_data, 'g-')
 
103
    #plot_date(date2num(x_data), min_data, 'r-')
 
104
    ax = gca()
 
105
    ax.bar(x_data, avg_data, color='#dd4814', yerr=[low_error, hi_error], ecolor='b')
 
106
    ax.set_title('Bootspeed (sec.)')
 
107
    labels = ax.get_xticklabels()
 
108
    for label in labels:
 
109
        label.set_rotation(90)
 
110
        label.set_size('small')
 
111
    ax.set_xlim(date2num(start), date2num(end))
 
112
    ax.xaxis.set_major_locator(
 
113
            matplotlib.dates.DayLocator()
 
114
            )
 
115
    ax.xaxis.set_major_formatter(
 
116
            matplotlib.dates.DateFormatter('%Y%m%d')
 
117
            )
 
118
    response = HttpResponse(content_type='image/png')
 
119
    canvas = FigureCanvasAgg(f)
 
120
    canvas.print_png(response, transparent=True)
 
121
    matplotlib.pyplot.close(f)
 
122
 
 
123
    return response
 
124