From 9dc5446d0d7162bdf29abf62a4dafdcba23cca80 2016-04-06 20:11:35 From: Fiorella Quino Date: 2016-04-06 20:11:35 Subject: [PATCH] Task #487: Operation. Views: radar_play y radar_stop. Models: RunningExperiment. Attributes: status. Methods: get_status(), status_color() git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@105 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71 --- diff --git a/apps/main/models.py b/apps/main/models.py index a06b565..94b01a0 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -10,11 +10,11 @@ CONF_STATES = ( ) EXP_STATES = ( - (0,'Error'), #RED - (1,'Configurated'), #BLUE - (2,'Running'), #GREEN - (3,'Waiting'), #YELLOW - (4,'Nothing'), #WHITE + (0,'Error'), #RED + (1,'Configurated'), #BLUE + (2,'Running'), #GREEN + (3,'Waiting'), #YELLOW + (4,'Not Configured'), #WHITE ) CONF_TYPES = ( @@ -50,13 +50,12 @@ DEV_PORTS = { RADAR_STATES = ( (0, 'No connected'), - (1, 'Connnected'), + (1, 'Connected'), (2, 'Configured'), (3, 'Running'), (4, 'Scheduled'), ) # Create your models here. - class Location(models.Model): @@ -107,6 +106,8 @@ class Campaign(models.Model): template = models.BooleanField(default=False) name = models.CharField(max_length=40, unique=True) + experiment = models.ManyToManyField('Experiment') + start_date = models.DateTimeField(blank=True, null=True) end_date = models.DateTimeField(blank=True, null=True) tags = models.CharField(max_length=40) @@ -131,22 +132,23 @@ class Campaign(models.Model): # def __unicode__(self): # return u'%s' % self.location -#class RunningExperiment(models.Model): -# radar = models.OneToOneField('Location', on_delete=models.CASCADE) -# running_experiment = models.OneToOneField('Experiment', on_delete=models.CASCADE) -# status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES) +class RunningExperiment(models.Model): + radar = models.OneToOneField('Location', on_delete=models.CASCADE) + running_experiment = models.ManyToManyField('Experiment') + status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES) class Experiment(models.Model): template = models.BooleanField(default=False) - campaign = models.ForeignKey('Campaign', null=True, blank=True, on_delete=models.CASCADE) + #campaign = models.ForeignKey('Campaign', null=True, blank=True, on_delete=models.CASCADE) location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) name = models.CharField(max_length=40, default='') start_time = models.TimeField(default='00:00:00') end_time = models.TimeField(default='23:59:59') + status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES) class Meta: db_table = 'db_experiments' @@ -154,6 +156,48 @@ class Experiment(models.Model): def __unicode__(self): return u'%s' % (self.name) + + def get_status(self): + configurations = Configuration.objects.filter(experiment=self) + exp_status=[] + for conf in configurations: + print conf.status_device() + exp_status.append(conf.status_device()) + + if not exp_status: #No Configuration + self.status = 4 + self.save() + return + + total = 1 + for e_s in exp_status: + total = total*e_s + + if total == 0: #Error + status = 0 + elif total == (3**len(exp_status)): #Running + status = 2 + else: + status = 1 #Configurated + + self.status = status + self.save() + + def status_color(self): + color = 'danger' + if self.status == 0: + color = "danger" + elif self.status == 1: + color = "info" + elif self.status == 2: + color = "succes" + elif self.status == 3: + color = "warning" + else: + color = "muted" + + return color + class Configuration(PolymorphicModel): template = models.BooleanField(default=False) diff --git a/apps/main/urls.py b/apps/main/urls.py index 0b7db55..3ddac64 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -41,8 +41,10 @@ urlpatterns = ( url(r'^dev_conf/(?P-?\d+)/status/$', 'apps.main.views.dev_conf_status', name='url_status_dev_conf'), url(r'^operation/$', 'apps.main.views.operation', name='url_operation'), + url(r'^operation/(?P-?\d+)/$', 'apps.main.views.operation', name='url_operation'), url(r'^operation/search/$', 'apps.main.views.operation_search', name='url_operation_search'), url(r'^operation/search/(?P-?\d+)/$', 'apps.main.views.operation_search', name='url_operation_search'), - url(r'^operation/(?P-?\d+)/$', 'apps.main.views.operation', name='url_operation'), + url(r'^operation/(?P-?\d+)/radar/(?P-?\d+)/play/$', 'apps.main.views.radar_play', name='url_radar_play'), + url(r'^operation/(?P-?\d+)/radar/(?P-?\d+)/stop/$', 'apps.main.views.radar_stop', name='url_radar_stop'), ) diff --git a/apps/main/views.py b/apps/main/views.py index 8afc36f..2ce4995 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,4 +1,6 @@ from django.shortcuts import render, redirect, get_object_or_404, HttpResponse +from django.http import HttpResponseRedirect +from django.core.urlresolvers import reverse from django.contrib import messages from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm @@ -10,7 +12,7 @@ from apps.abs.forms import ABSConfigurationForm from apps.rc.forms import RCConfigurationForm from apps.dds.forms import DDSConfigurationForm -from .models import Campaign, Experiment, Device, Configuration, Location#, RunningExperiment +from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment from apps.cgs.models import CGSConfiguration from apps.jars.models import JARSConfiguration from apps.usrp.models import USRPConfiguration @@ -401,7 +403,6 @@ def experiment_new(request, id_camp=None): if form.is_valid(): experiment = form.save() - ##AGREGAR! return redirect('url_experiment', id_exp=experiment.id) kwargs = {} @@ -813,6 +814,8 @@ def operation(request, id_camp=None): return redirect('url_operation', id_camp=campaign.id) #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct() experiments = Experiment.objects.filter(campaign__pk=campaign.id) + for exs in experiments: + exs.get_status() locations= Location.objects.filter(experiment=experiments).distinct() #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations] kwargs = {} @@ -835,58 +838,69 @@ def operation(request, id_camp=None): return render(request, 'operation.html', kwargs) -def operation_search(request, id_camp=None, location_play = None): +def operation_search(request, id_camp=None): if not id_camp: campaigns = Campaign.objects.all().order_by('-start_date') - form = OperationSearchForm() if not campaigns: return render(request, 'operation.html', {}) id_camp = campaigns[0].id - campaign = get_object_or_404(Campaign, pk = id_camp) - - kwargs = {} - kwargs['title'] = 'All Campaigns' - kwargs['form'] = form - kwargs['details'] = True - return render(request, 'operation.html', kwargs) + campaign = get_object_or_404(Campaign, pk = id_camp) - else: - campaign = get_object_or_404(Campaign, pk = id_camp) - #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct() - #experiments = Experiment.objects.filter(campaign__pk=campaign.id) - experiments = Experiment.objects.filter(campaign__pk=campaign.id) - locations= Location.objects.filter(experiment=experiments).distinct() - #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations] + if request.method=='GET': form = OperationSearchForm(initial={'campaign': campaign.id}) - kwargs = {} - #---Campaign - kwargs['campaign'] = campaign - kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description'] - #---Experiment - keys = ['id', 'name', 'start_time', 'end_time'] - kwargs['experiment_keys'] = keys[1:] - kwargs['experiments'] = experiments - #---Radar - kwargs['locations'] = locations - #---Else - kwargs['title'] = 'Campaign' - kwargs['suptitle'] = campaign.name - kwargs['form'] = form - kwargs['button'] = 'Select' - kwargs['details'] = True - kwargs['search_button'] = False - - if request.method=='POST': form = OperationSearchForm(request.POST, initial={'campaign':campaign.id}) if form.is_valid(): - return redirect('operation.html', id_camp=campaign.id) + return redirect('url_operation', id_camp=campaign.id) + #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct() + experiments = Experiment.objects.filter(campaign__pk=campaign.id) + for exs in experiments: + exs.get_status() + locations= Location.objects.filter(experiment=experiments).distinct() + form = OperationSearchForm(initial={'campaign': campaign.id}) + + kwargs = {} + #---Campaign + kwargs['campaign'] = campaign + kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description'] + #---Experiment + keys = ['id', 'name', 'start_time', 'end_time', 'status'] + kwargs['experiment_keys'] = keys[1:] + kwargs['experiments'] = experiments + #---Radar + kwargs['locations'] = locations + #---Else + kwargs['title'] = 'Campaign' + kwargs['suptitle'] = campaign.name + kwargs['form'] = form + kwargs['button'] = 'Select' + kwargs['details'] = True + kwargs['search_button'] = False + + return render(request, 'operation.html', kwargs) + + +def radar_play(request, id_camp, id_radar): - return render(request, 'operation.html', kwargs) \ No newline at end of file + route = request.META['HTTP_REFERER'] + route = str(route) + if 'search' in route: + return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp])) + else: + return HttpResponseRedirect(reverse('url_operation', args=[id_camp])) + +def radar_stop(request, id_camp, id_radar): + + route = request.META['HTTP_REFERER'] + route = str(route) + if 'search' in route: + return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp])) + else: + return HttpResponseRedirect(reverse('url_operation', args=[id_camp])) \ No newline at end of file