##// END OF EJS Templates
Add start, stop methods to experiment, fix RC dat export file...
Juan C. Espinoza -
r240:7e783bc1dbef
parent child
Show More
@@ -431,7 +431,10 class Experiment(models.Model):
431 def get_status(self):
431 def get_status(self):
432
432
433 confs = Configuration.objects.filter(experiment=self)
433 confs = Configuration.objects.filter(experiment=self)
434
434
435 for conf in confs:
436 conf.status_device()
437
435 total = confs.aggregate(models.Sum('device__status'))['device__status__sum']
438 total = confs.aggregate(models.Sum('device__status'))['device__status__sum']
436
439
437 if total==2*confs.count():
440 if total==2*confs.count():
@@ -579,6 +582,12 class Experiment(models.Model):
579 def get_absolute_url_export(self):
582 def get_absolute_url_export(self):
580 return reverse('url_export_experiment', args=[str(self.id)])
583 return reverse('url_export_experiment', args=[str(self.id)])
581
584
585 def get_absolute_url_start(self):
586 return reverse('url_start_experiment', args=[str(self.id)])
587
588 def get_absolute_url_stop(self):
589 return reverse('url_stop_experiment', args=[str(self.id)])
590
582
591
583 class Configuration(PolymorphicModel):
592 class Configuration(PolymorphicModel):
584
593
@@ -665,7 +674,7 class Configuration(PolymorphicModel):
665
674
666 if format == 'binary':
675 if format == 'binary':
667 content_type = 'application/octet-stream'
676 content_type = 'application/octet-stream'
668 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
677 filename = '%s_%s.dat' %(self.device.device_type.name, self.name)
669 content = self.parms_to_binary()
678 content = self.parms_to_binary()
670
679
671 if not content_type:
680 if not content_type:
@@ -20,10 +20,10
20 <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li>
20 <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li>
21 <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li>
21 <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li>
22 <li><a href="{{ experiment.get_absolute_url_import }}"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import </a></li>
22 <li><a href="{{ experiment.get_absolute_url_import }}"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import </a></li>
23 <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li>
23 <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li>
24 {% block extra-menu-actions %}
25 {% endblock %}
26 <li><a>----------------</a></li>
24 <li><a>----------------</a></li>
25 <li><a href="{{ experiment.get_absolute_url_start}}"><span class="glyphicon glyphicon-play" aria-hidden="true"></span> Start</a></li>
26 <li><a href="{{ experiment.get_absolute_url_stop }}"><span class="glyphicon glyphicon-stop" aria-hidden="true"></span> Stop</a></li>
27 <li><a href="{% url 'url_mix_experiment' experiment.id %}"><span class="glyphicon glyphicon-random" aria-hidden="true"></span> Mix RC Configurations </a></li>
27 <li><a href="{% url 'url_mix_experiment' experiment.id %}"><span class="glyphicon glyphicon-random" aria-hidden="true"></span> Mix RC Configurations </a></li>
28 <li><a href="{% url 'url_add_dev_conf' experiment.id %}"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> Add Configuration</a></li>
28 <li><a href="{% url 'url_add_dev_conf' experiment.id %}"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> Add Configuration</a></li>
29 <li><a href="{% url 'url_sum_experiment' experiment.id %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> Summary</a></li>
29 <li><a href="{% url 'url_sum_experiment' experiment.id %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> Summary</a></li>
@@ -32,6 +32,8 urlpatterns = (
32 url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', views.experiment_delete, name='url_delete_experiment'),
32 url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', views.experiment_delete, name='url_delete_experiment'),
33 url(r'^experiment/(?P<id_exp>-?\d+)/export/$', views.experiment_export, name='url_export_experiment'),
33 url(r'^experiment/(?P<id_exp>-?\d+)/export/$', views.experiment_export, name='url_export_experiment'),
34 url(r'^experiment/(?P<id_exp>-?\d+)/import/$', views.experiment_import, name='url_import_experiment'),
34 url(r'^experiment/(?P<id_exp>-?\d+)/import/$', views.experiment_import, name='url_import_experiment'),
35 url(r'^experiment/(?P<id_exp>-?\d+)/start/$', views.experiment_start, name='url_start_experiment'),
36 url(r'^experiment/(?P<id_exp>-?\d+)/stop/$', views.experiment_stop, name='url_stop_experiment'),
35 url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', views.experiment_mix, name='url_mix_experiment'),
37 url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', views.experiment_mix, name='url_mix_experiment'),
36 url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', views.experiment_mix_delete, name='url_delete_mix_experiment'),
38 url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', views.experiment_mix_delete, name='url_delete_mix_experiment'),
37 url(r'^experiment/(?P<id_exp>-?\d+)/summary/$', views.experiment_summary, name='url_sum_experiment'),
39 url(r'^experiment/(?P<id_exp>-?\d+)/summary/$', views.experiment_summary, name='url_sum_experiment'),
@@ -543,12 +543,12 def experiments(request):
543 def experiment(request, id_exp):
543 def experiment(request, id_exp):
544
544
545 experiment = get_object_or_404(Experiment, pk=id_exp)
545 experiment = get_object_or_404(Experiment, pk=id_exp)
546
546 experiment.get_status()
547 configurations = Configuration.objects.filter(experiment=experiment, type=0)
547 configurations = Configuration.objects.filter(experiment=experiment, type=0)
548
548
549 kwargs = {}
549 kwargs = {}
550
550
551 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
551 kwargs['experiment_keys'] = ['radar_system', 'name', 'start_time', 'end_time']
552 kwargs['experiment'] = experiment
552 kwargs['experiment'] = experiment
553
553
554 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
554 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
@@ -711,6 +711,46 def experiment_import(request, id_exp):
711
711
712
712
713 @user_passes_test(lambda u:u.is_staff)
713 @user_passes_test(lambda u:u.is_staff)
714 def experiment_start(request, id_exp):
715
716 exp = get_object_or_404(Experiment, pk=id_exp)
717
718 if exp.status == 2:
719 messages.warning(request, 'Experiment {} already running'.format(exp))
720
721 elif exp.status == 3:
722 messages.warning(request, 'Experiment {} already programmed'.format(exp))
723
724 else:
725 task = task_start.delay(exp.pk)
726 exp.status = task.wait()
727 if exp.status==0:
728 messages.error(request, 'Experiment {} not start'.format(exp))
729 if exp.status==2:
730 messages.success(request, 'Experiment {} started'.format(exp))
731
732 exp.save()
733
734 return redirect(exp.get_absolute_url())
735
736
737 @user_passes_test(lambda u:u.is_staff)
738 def experiment_stop(request, id_exp):
739
740 exp = get_object_or_404(Experiment, pk=id_exp)
741
742 if exp.status == 2:
743 task = task_stop.delay(exp.pk)
744 exp.status = task.wait()
745 messages.warning(request, 'Experiment {} stopped'.format(exp))
746 exp.save()
747 else:
748 messages.error(request, 'Experiment {} not running'.format(exp))
749
750 return redirect(exp.get_absolute_url())
751
752
753 @user_passes_test(lambda u:u.is_staff)
714 def experiment_mix(request, id_exp):
754 def experiment_mix(request, id_exp):
715
755
716 experiment = get_object_or_404(Experiment, pk=id_exp)
756 experiment = get_object_or_404(Experiment, pk=id_exp)
@@ -13,6 +13,7 from django.core.validators import MinValueValidator, MaxValueValidator
13 from apps.main.models import Configuration
13 from apps.main.models import Configuration
14 from devices.rc import api
14 from devices.rc import api
15 from .utils import RCFile
15 from .utils import RCFile
16 from django.template.defaultfilters import last
16
17
17 # Create your models here.
18 # Create your models here.
18
19
@@ -318,12 +319,13 class RCConfiguration(Configuration):
318 # write flips
319 # write flips
319 data.extend(self.add_cmd('FLIP_START'))
320 data.extend(self.add_cmd('FLIP_START'))
320
321
321 states = self.get_pulses(binary=False)
322 states = self.get_pulses(binary=True)
322
323
323 for flips, delay in zip(states, delays):
324
324 flips.reverse()
325 last = 0
325 flip = int(''.join([str(x) for x in flips]), 2)
326 for flip, delay in zip(states, delays):
326 data.extend(self.add_data(flip+1))
327 data.extend(self.add_data((flip^last)+1))
328 last = flip
327 while delay>252:
329 while delay>252:
328 data.extend(self.add_data(1))
330 data.extend(self.add_data(1))
329 delay -= 253
331 delay -= 253
General Comments 0
You need to be logged in to leave comments. Login now