diff --git a/apps/main/forms.py b/apps/main/forms.py
index d3afdfa..b1346a8 100644
--- a/apps/main/forms.py
+++ b/apps/main/forms.py
@@ -188,8 +188,8 @@ class FilterForm(forms.Form):
if 'initial' in kwargs:
self.fields[field].widget.attrs = {'start_date':kwargs['initial'].get('start_date', ''),
'end_date':kwargs['initial'].get('end_date', '')}
- elif 'template' in field:
- self.fields['template'] = forms.BooleanField(required=False)
+ elif field in ('template', 'historical'):
+ self.fields[field] = forms.BooleanField(required=False)
else:
self.fields[field] = forms.CharField(required=False)
diff --git a/apps/main/models.py b/apps/main/models.py
index 9067452..0c52593 100644
--- a/apps/main/models.py
+++ b/apps/main/models.py
@@ -361,7 +361,7 @@ class Experiment(models.Model):
data['end_time'] = data['end_time'].strftime('%H:%M:%S')
data['location'] = self.location.name
data['configurations'] = ['{}'.format(conf.pk) for
- conf in Configuration.objects.filter(experiment=self)]
+ conf in Configuration.objects.filter(experiment=self, type=0)]
return data
@@ -392,23 +392,17 @@ class Experiment(models.Model):
result = 2
- confs = Configuration.objects.filter(experiment=self).filter(type = 0).order_by('-device__device_type__sequence')
+ confs = Configuration.objects.filter(experiment=self, type = 0).order_by('-device__device_type__sequence')
#Only Configured Devices.
for conf in confs:
- dev_status = conf.device.status
- if dev_status in [0,4]:
+ if conf.device.status in (0, 4):
result = 0
return result
- else:
- if conf.device.device_type.name != 'jars':
- conf.write_device()
- time.sleep(1)
- print conf.device.name+' has started...'
- else:
- conf.stop_device()
- conf.write_device()
- conf.start_device()
- print conf.device.name+' has started...'
+ for conf in confs:
+ conf.stop_device()
+ #conf.write_device()
+ conf.start_device()
+ print conf.device.name+' has started...'
return result
@@ -421,21 +415,13 @@ class Experiment(models.Model):
result = 1
- confs = Configuration.objects.filter(experiment=self).filter(type = 0).order_by('device__device_type__sequence')
-
- for conf in confs:
- dev_status = conf.device.status
- if dev_status in [0,4]:
- result = 0
- return result
-
- #Stop Device
+ confs = Configuration.objects.filter(experiment=self, type = 0).order_by('device__device_type__sequence')
confs=confs.exclude(device__device_type__name='cgs')
for conf in confs:
- if conf.device.device_type.name != 'rc':
- conf.stop_device()
- else:
- conf.reset_device()
+ if conf.device.status in (0, 4):
+ result = 0
+ continue
+ conf.stop_device()
print conf.device.name+' has stopped...'
return result
@@ -443,7 +429,10 @@ class Experiment(models.Model):
def get_status(self):
- confs = Configuration.objects.filter(experiment=self)
+ if self.status == 3:
+ return
+
+ confs = Configuration.objects.filter(experiment=self, type=0)
for conf in confs:
conf.status_device()
@@ -457,9 +446,8 @@ class Experiment(models.Model):
else:
status = 0
- if self.status<>3:
- self.status = status
- self.save()
+ self.status = status
+ self.save()
def status_color(self):
color = 'muted'
diff --git a/apps/main/tasks.py b/apps/main/tasks.py
index 1d0a56d..f2b470f 100644
--- a/apps/main/tasks.py
+++ b/apps/main/tasks.py
@@ -19,6 +19,13 @@ def task_stop(id_exp):
return exp.stop()
+def kill_tasks():
+
+ i = task.control.inspect()
+ tasks = i.scheduled()
+ print tasks
+ #if tasks:
+ # print dir(tasks[0])
#Task to get status
@task
diff --git a/apps/main/templates/operation.html b/apps/main/templates/operation.html
index 2a2d28c..e090a0b 100644
--- a/apps/main/templates/operation.html
+++ b/apps/main/templates/operation.html
@@ -12,12 +12,42 @@
{% block content %}
-{% bootstrap_form form layout='horizontal' size='medium' %}
-
+
+
+{% if campaigns %}
+
+Current Campaigns
+
+
+
+
+
+
+{% endif %}
+
{% if campaign %}
-
Systems
diff --git a/apps/main/views.py b/apps/main/views.py
index f861c30..f792dcc 100644
--- a/apps/main/views.py
+++ b/apps/main/views.py
@@ -1,6 +1,6 @@
import ast
import json
-from datetime import datetime
+from datetime import datetime, timedelta
from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
from django.utils.safestring import mark_safe
@@ -19,7 +19,7 @@ except ImportError:
from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
from .forms import OperationSearchForm, FilterForm, ChangeIpForm
-from .tasks import task_start, task_stop, task_status
+from .tasks import task_start, task_stop, task_status, kill_tasks
from apps.rc.forms import RCConfigurationForm, RCLineCode, RCMixConfigurationForm
from apps.dds.forms import DDSConfigurationForm
@@ -363,7 +363,7 @@ def campaign_new(request):
kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
camp = Campaign.objects.get(pk=request.GET['template'])
form = CampaignForm(instance=camp,
- initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
+ initial={'name':'{}_{:%Y%m%d}'.format(camp.name, datetime.now()),
'template':False})
elif 'blank' in request.GET:
kwargs['button'] = 'Create'
@@ -1198,7 +1198,7 @@ def dev_confs(request):
kwargs = get_paginator(Configuration, page, order, filters)
- form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
+ form = FilterForm(initial=request.GET, extra_fields=['tags', 'template', 'historical'])
kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date']
kwargs['title'] = 'Configuration'
kwargs['suptitle'] = 'List'
@@ -1392,7 +1392,7 @@ def dev_conf_write(request, id_conf):
else:
messages.error(request, conf.message)
- return redirect(conf.get_absolute_url())
+ return redirect(get_object_or_404(Configuration, pk=id_conf).get_absolute_url())
@user_passes_test(lambda u:u.is_staff)
@@ -1577,16 +1577,21 @@ def get_paginator(model, page, order, filters={}, n=10):
[filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')]
filters.pop('page', None)
+ fields = [f.name for f in model._meta.get_fields()]
+
if 'template' in filters:
filters['template'] = True
+ if 'historical' in filters:
+ filters.pop('historical')
+ filters['type'] = 1
+ elif 'type' in fields:
+ filters['type'] = 0
if 'start_date' in filters:
filters['start_date__gte'] = filters.pop('start_date')
if 'end_date' in filters:
filters['start_date__lte'] = filters.pop('end_date')
if 'tags' in filters:
tags = filters.pop('tags')
- fields = [f.name for f in model._meta.get_fields()]
-
if 'tags' in fields:
query = query | Q(tags__icontains=tags)
if 'name' in fields:
@@ -1625,8 +1630,8 @@ def operation(request, id_camp=None):
form = OperationForm(initial={'campaign': campaign.id}, campaigns=campaigns)
kwargs['campaign'] = campaign
else:
- form = OperationForm(campaigns=campaigns)
- kwargs['form'] = form
+ # form = OperationForm(campaigns=campaigns)
+ kwargs['campaigns'] = campaigns
return render(request, 'operation.html', kwargs)
#---Experiment
@@ -1645,11 +1650,13 @@ def radar_start(request, id_camp, id_radar):
campaign = get_object_or_404(Campaign, pk = id_camp)
experiments = campaign.get_experiments_by_radar(id_radar)[0]['experiments']
- now = datetime.utcnow()
-
+ now = datetime.now()
for exp in experiments:
- date = datetime.combine(datetime.now().date(), exp.start_time)
-
+ start = datetime.combine(datetime.now().date(), exp.start_time)
+ end = datetime.combine(datetime.now().date(), exp.start_time)
+ if end < start:
+ end += timedelta(1)
+
if exp.status == 2:
messages.warning(request, 'Experiment {} already running'.format(exp))
continue
@@ -1658,21 +1665,23 @@ def radar_start(request, id_camp, id_radar):
messages.warning(request, 'Experiment {} already programmed'.format(exp))
continue
- if date>campaign.end_date or date campaign.end_date or start < campaign.start_date:
messages.warning(request, 'Experiment {} out of date'.format(exp))
continue
- if now>=date:
+ if now > start and now <= end:
task = task_start.delay(exp.pk)
exp.status = task.wait()
if exp.status==0:
messages.error(request, 'Experiment {} not start'.format(exp))
if exp.status==2:
+ task = task_stop.apply_async((exp.pk,), eta=end+timedelta(hours=5))
messages.success(request, 'Experiment {} started'.format(exp))
else:
- task = task_start.apply_async((exp.pk,), eta=date)
+ task = task_start.apply_async((exp.pk,), eta=start+timedelta(hours=5))
+ task = task_stop.apply_async((exp.pk,), eta=end+timedelta(hours=5))
exp.status = 3
- messages.success(request, 'Experiment {} programmed to start at {}'.format(exp, date))
+ messages.success(request, 'Experiment {} programmed to start at {}'.format(exp, start))
exp.save()
@@ -1694,6 +1703,7 @@ def radar_stop(request, id_camp, id_radar):
exp.save()
else:
messages.error(request, 'Experiment {} not running'.format(exp))
+ kill_tasks()
return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))