views.py 2.9 KB
Newer Older
A
Administrator 已提交
1 2
# ~*~ coding: utf-8 ~*~
from __future__ import unicode_literals
baltery's avatar
baltery 已提交
3
import time
baltery's avatar
baltery 已提交
4
import json
5
from datetime import datetime
baltery's avatar
baltery 已提交
6

A
Administrator 已提交
7
from django.conf import settings
8 9 10
from django.views.generic import ListView, DetailView, View
from django.utils import timezone
from django.shortcuts import redirect, reverse
A
Administrator 已提交
11

12 13
from .models import Task
from ops.tasks import rerun_task
A
Administrator 已提交
14 15


16
class TaskListView(ListView):
17
    paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
18
    model = Task
baltery's avatar
baltery 已提交
19
    ordering = ('-date_start',)
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
    context_object_name = 'task_list'
    template_name = 'ops/task_list.html'
    date_format = '%m/%d/%Y'
    keyword = date_from_s = date_to_s = ''

    def get_queryset(self):
        date_now = timezone.localtime(timezone.now())
        date_to_default = date_now.strftime(self.date_format)
        date_from_default = (date_now - timezone.timedelta(7)) \
            .strftime(self.date_format)

        self.queryset = super(TaskListView, self).get_queryset()
        self.keyword = self.request.GET.get('keyword', '')
        self.date_from_s = self.request.GET.get('date_from', date_from_default)
        self.date_to_s = self.request.GET.get('date_to', date_to_default)

        if self.date_from_s:
            date_from = datetime.strptime(self.date_from_s, self.date_format)
            date_from = date_from.replace(tzinfo=timezone.get_current_timezone())
            self.queryset = self.queryset.filter(date_start__gt=date_from)

        if self.date_to_s:
            date_to = timezone.datetime.strptime(
                self.date_to_s + ' 23:59:59', '%m/%d/%Y %H:%M:%S')
            date_to = date_to.replace(tzinfo=timezone.get_current_timezone())
            self.queryset = self.queryset.filter(date_finished__lt=date_to)

        if self.keyword:
            self.queryset = self.queryset.filter(
                name__icontains=self.keyword,
            )
        return self.queryset
52 53 54

    def get_context_data(self, **kwargs):
        context = {
baltery's avatar
baltery 已提交
55 56
            'app': 'Ops',
            'action': 'Task record list',
57 58 59
            'date_from': self.date_from_s,
            'date_to': self.date_to_s,
            'keyword': self.keyword,
60 61
        }
        kwargs.update(context)
62
        return super(TaskListView, self).get_context_data(**kwargs)
baltery's avatar
baltery 已提交
63 64


65 66 67
class TaskDetailView(DetailView):
    model = Task
    template_name = 'ops/task_detail.html'
68

baltery's avatar
baltery 已提交
69 70 71 72
    def get_context_data(self, **kwargs):
        context = {
            'app': 'Ops',
            'action': 'Task record detail',
73
            'results': json.loads(self.object.summary or '{}'),
baltery's avatar
baltery 已提交
74 75
        }
        kwargs.update(context)
76 77 78 79 80 81 82 83 84
        return super(TaskDetailView, self).get_context_data(**kwargs)


class TaskRunView(View):
    pk_url_kwarg = 'pk'

    def get(self, request, *args, **kwargs):
        pk = kwargs.get(self.pk_url_kwarg)
        rerun_task.delay(pk)
baltery's avatar
baltery 已提交
85
        time.sleep(0.5)
86
        return redirect(reverse('ops:task-detail', kwargs={'pk': pk}))