##// END OF EJS Templates
Task # 487: Operation View: radar_play...
Fiorella Quino -
r92:1505d6a731c0
parent child
Show More
@@ -1,10 +1,10
1 1 from django.contrib import admin
2 from .models import Device, DeviceType, Experiment, Campaign, Location#, RunningExperiment
2 from .models import Device, DeviceType, Experiment, Campaign, Location, RunningExperiment
3 3
4 4 # Register your models here.
5 5 admin.site.register(Campaign)
6 6 admin.site.register(Experiment)
7 7 admin.site.register(Device)
8 8 admin.site.register(DeviceType)
9 9 admin.site.register(Location)
10 #admin.site.register(RunningExperiment) No newline at end of file
10 admin.site.register(RunningExperiment) No newline at end of file
@@ -1,390 +1,390
1 1
2 2 from datetime import datetime
3 3
4 4 from django.db import models
5 5 from polymorphic import PolymorphicModel
6 6
7 7 from django.core.urlresolvers import reverse
8 8
9 9 CONF_STATES = (
10 10 (0, 'Disconnected'),
11 11 (1, 'Connected'),
12 12 (2, 'Running'),
13 13 )
14 14
15 15 EXP_STATES = (
16 16 (0,'Error'), #RED
17 17 (1,'Configurated'), #BLUE
18 18 (2,'Running'), #GREEN
19 19 (3,'Waiting'), #YELLOW
20 20 (4,'Not Configured'), #WHITE
21 21 )
22 22
23 23 CONF_TYPES = (
24 24 (0, 'Active'),
25 25 (1, 'Historical'),
26 26 )
27 27
28 28 DEV_STATES = (
29 29 (0, 'No connected'),
30 30 (1, 'Connected'),
31 31 (2, 'Configured'),
32 32 (3, 'Running'),
33 33 )
34 34
35 35 DEV_TYPES = (
36 36 ('', 'Select a device type'),
37 37 ('rc', 'Radar Controller'),
38 38 ('dds', 'Direct Digital Synthesizer'),
39 39 ('jars', 'Jicamarca Radar Acquisition System'),
40 40 ('usrp', 'Universal Software Radio Peripheral'),
41 41 ('cgs', 'Clock Generator System'),
42 42 ('abs', 'Automatic Beam Switching'),
43 43 )
44 44
45 45 DEV_PORTS = {
46 46 'rc' : 2000,
47 47 'dds' : 2000,
48 48 'jars' : 2000,
49 49 'usrp' : 2000,
50 50 'cgs' : 8080,
51 51 'abs' : 8080
52 52 }
53 53
54 54 RADAR_STATES = (
55 55 (0, 'No connected'),
56 56 (1, 'Connected'),
57 57 (2, 'Configured'),
58 58 (3, 'Running'),
59 59 (4, 'Scheduled'),
60 60 )
61 61 # Create your models here.
62 62
63 63 class Location(models.Model):
64 64
65 65 name = models.CharField(max_length = 30)
66 66 description = models.TextField(blank=True, null=True)
67 67
68 68 class Meta:
69 69 db_table = 'db_location'
70 70
71 71 def __unicode__(self):
72 72 return u'%s' % self.name
73 73
74 74 def get_absolute_url(self):
75 75 return reverse('url_device', args=[str(self.id)])
76 76
77 77
78 78 class DeviceType(models.Model):
79 79
80 80 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
81 81 description = models.TextField(blank=True, null=True)
82 82
83 83 class Meta:
84 84 db_table = 'db_device_types'
85 85
86 86 def __unicode__(self):
87 87 return u'%s' % self.get_name_display()
88 88
89 89 class Device(models.Model):
90 90
91 91 device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE)
92 92 location = models.ForeignKey(Location, on_delete=models.CASCADE)
93 93
94 94 name = models.CharField(max_length=40, default='')
95 95 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
96 96 port_address = models.PositiveSmallIntegerField(default=2000)
97 97 description = models.TextField(blank=True, null=True)
98 98 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
99 99
100 100 class Meta:
101 101 db_table = 'db_devices'
102 102
103 103 def __unicode__(self):
104 104 return u'%s | %s' % (self.name, self.ip_address)
105 105
106 106 def get_status(self):
107 107 return self.status
108 108
109 109 def get_absolute_url(self):
110 110 return reverse('url_device', args=[str(self.id)])
111 111
112 112
113 113 class Campaign(models.Model):
114 114
115 115 template = models.BooleanField(default=False)
116 116 name = models.CharField(max_length=60, unique=True)
117 117 start_date = models.DateTimeField(blank=True, null=True)
118 118 end_date = models.DateTimeField(blank=True, null=True)
119 119 tags = models.CharField(max_length=40)
120 120 description = models.TextField(blank=True, null=True)
121 121 experiments = models.ManyToManyField('Experiment', blank=True)
122 122
123 123 class Meta:
124 124 db_table = 'db_campaigns'
125 125 ordering = ('name',)
126 126
127 127 def __unicode__(self):
128 128 return u'%s' % (self.name)
129 129
130 130 def get_absolute_url(self):
131 131 return reverse('url_campaign', args=[str(self.id)])
132 132
133 133
134 134 class RunningExperiment(models.Model):
135 135 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
136 running_experiment = models.ManyToManyField('Experiment')
136 running_experiment = models.ManyToManyField('Experiment', blank = True)
137 137 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
138 138
139 139
140 140 class Experiment(models.Model):
141 141
142 142 template = models.BooleanField(default=False)
143 143 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
144 144 name = models.CharField(max_length=40, default='', unique=True)
145 145 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
146 146 start_time = models.TimeField(default='00:00:00')
147 147 end_time = models.TimeField(default='23:59:59')
148 148 status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES)
149 149
150 150 class Meta:
151 151 db_table = 'db_experiments'
152 152 ordering = ('template', 'name')
153 153
154 154 def __unicode__(self):
155 155 if self.template:
156 156 return u'%s (template)' % (self.name)
157 157 else:
158 158 return u'%s' % (self.name)
159 159
160 160 @property
161 161 def radar(self):
162 162 return self.location
163 163
164 164 def clone(self, **kwargs):
165 165
166 166 confs = Configuration.objects.filter(experiment=self, type=0)
167 167 self.pk = None
168 168 self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now())
169 169 for attr, value in kwargs.items():
170 170 setattr(self, attr, value)
171 171
172 172 self.save()
173 173
174 174 for conf in confs:
175 175 conf.clone(experiment=self, template=False)
176 176
177 177 return self
178 178
179 179 def get_status(self):
180 180 configurations = Configuration.objects.filter(experiment=self)
181 181 exp_status=[]
182 182 for conf in configurations:
183 183 print conf.status_device()
184 184 exp_status.append(conf.status_device())
185 185
186 186 if not exp_status: #No Configuration
187 187 self.status = 4
188 188 self.save()
189 189 return
190 190
191 191 total = 1
192 192 for e_s in exp_status:
193 193 total = total*e_s
194 194
195 195 if total == 0: #Error
196 196 status = 0
197 197 elif total == (3**len(exp_status)): #Running
198 198 status = 2
199 199 else:
200 200 status = 1 #Configurated
201 201
202 202 self.status = status
203 203 self.save()
204 204
205 205 def status_color(self):
206 206 color = 'danger'
207 207 if self.status == 0:
208 208 color = "danger"
209 209 elif self.status == 1:
210 210 color = "info"
211 211 elif self.status == 2:
212 212 color = "success"
213 213 elif self.status == 3:
214 214 color = "warning"
215 215 else:
216 216 color = "muted"
217 217
218 218 return color
219 219
220 220 def get_absolute_url(self):
221 221 return reverse('url_experiment', args=[str(self.id)])
222 222
223 223
224 224 class Configuration(PolymorphicModel):
225 225
226 226 template = models.BooleanField(default=False)
227 227
228 228 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
229 229
230 230 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
231 231 device = models.ForeignKey(Device, on_delete=models.CASCADE)
232 232
233 233 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
234 234
235 235 created_date = models.DateTimeField(auto_now_add=True)
236 236 programmed_date = models.DateTimeField(auto_now=True)
237 237
238 238 parameters = models.TextField(default='{}')
239 239
240 240 message = ""
241 241
242 242 class Meta:
243 243 db_table = 'db_configurations'
244 244
245 245 def __unicode__(self):
246 246
247 247 if self.experiment:
248 248 return u'[%s, %s]: %s' % (self.experiment.name,
249 249 self.device.name,
250 250 self.name)
251 251 else:
252 252 return u'%s' % self.device.name
253 253
254 254 def clone(self, **kwargs):
255 255
256 256 self.pk = None
257 257 self.id = None
258 258 for attr, value in kwargs.items():
259 259 setattr(self, attr, value)
260 260
261 261 self.save()
262 262
263 263 return self
264 264
265 265 def parms_to_dict(self):
266 266
267 267 parameters = {}
268 268
269 269 for key in self.__dict__.keys():
270 270 parameters[key] = getattr(self, key)
271 271
272 272 return parameters
273 273
274 274 def parms_to_text(self):
275 275
276 276 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
277 277
278 278 return ''
279 279
280 280 def parms_to_binary(self):
281 281
282 282 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
283 283
284 284 return ''
285 285
286 286 def dict_to_parms(self, parameters):
287 287
288 288 if type(parameters) != type({}):
289 289 return
290 290
291 291 for key in parameters.keys():
292 292 setattr(self, key, parameters[key])
293 293
294 294 def export_to_file(self, format="json"):
295 295
296 296 import json
297 297
298 298 content_type = ''
299 299
300 300 if format == 'text':
301 301 content_type = 'text/plain'
302 302 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
303 303 content = self.parms_to_text()
304 304
305 305 if format == 'binary':
306 306 content_type = 'application/octet-stream'
307 307 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
308 308 content = self.parms_to_binary()
309 309
310 310 if not content_type:
311 311 content_type = 'application/json'
312 312 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
313 313 content = json.dumps(self.parms_to_dict(), indent=2)
314 314
315 315 fields = {'content_type':content_type,
316 316 'filename':filename,
317 317 'content':content
318 318 }
319 319
320 320 return fields
321 321
322 322 def import_from_file(self, fp):
323 323
324 324 import os, json
325 325
326 326 parms = {}
327 327
328 328 path, ext = os.path.splitext(fp.name)
329 329
330 330 if ext == '.json':
331 331 parms = json.load(fp)
332 332
333 333 return parms
334 334
335 335 def status_device(self):
336 336
337 337 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
338 338
339 339 return None
340 340
341 341 def stop_device(self):
342 342
343 343 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
344 344
345 345 return None
346 346
347 347 def start_device(self):
348 348
349 349 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
350 350
351 351 return None
352 352
353 353 def write_device(self, parms):
354 354
355 355 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
356 356
357 357 return None
358 358
359 359 def read_device(self):
360 360
361 361 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
362 362
363 363 return None
364 364
365 365 def get_absolute_url(self):
366 366 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
367 367
368 368 def get_absolute_url_edit(self):
369 369 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
370 370
371 371 def get_absolute_url_import(self):
372 372 return reverse('url_import_dev_conf', args=[str(self.id)])
373 373
374 374 def get_absolute_url_export(self):
375 375 return reverse('url_export_dev_conf', args=[str(self.id)])
376 376
377 377 def get_absolute_url_write(self):
378 378 return reverse('url_write_dev_conf', args=[str(self.id)])
379 379
380 380 def get_absolute_url_read(self):
381 381 return reverse('url_read_dev_conf', args=[str(self.id)])
382 382
383 383 def get_absolute_url_start(self):
384 384 return reverse('url_start_dev_conf', args=[str(self.id)])
385 385
386 386 def get_absolute_url_stop(self):
387 387 return reverse('url_stop_dev_conf', args=[str(self.id)])
388 388
389 389 def get_absolute_url_status(self):
390 390 return reverse('url_status_dev_conf', args=[str(self.id)]) No newline at end of file
@@ -1,1065 +1,1066
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 2 from django.http import HttpResponseRedirect
3 3 from django.core.urlresolvers import reverse
4 4 from django.contrib import messages
5 5 from datetime import datetime
6 6
7 7 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
8 8 from .forms import OperationSearchForm
9 9 from apps.cgs.forms import CGSConfigurationForm
10 10 from apps.jars.forms import JARSConfigurationForm
11 11 from apps.usrp.forms import USRPConfigurationForm
12 12 from apps.abs.forms import ABSConfigurationForm
13 13 from apps.rc.forms import RCConfigurationForm
14 14 from apps.dds.forms import DDSConfigurationForm
15 15
16 16 from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
17 17 from apps.cgs.models import CGSConfiguration
18 18 from apps.jars.models import JARSConfiguration
19 19 from apps.usrp.models import USRPConfiguration
20 20 from apps.abs.models import ABSConfiguration
21 21 from apps.rc.models import RCConfiguration
22 22 from apps.dds.models import DDSConfiguration
23 23
24 24 # Create your views here.
25 25
26 26 CONF_FORMS = {
27 27 'rc': RCConfigurationForm,
28 28 'dds': DDSConfigurationForm,
29 29 'jars': JARSConfigurationForm,
30 30 'cgs': CGSConfigurationForm,
31 31 'abs': ABSConfigurationForm,
32 32 'usrp': USRPConfigurationForm,
33 33 }
34 34
35 35 CONF_MODELS = {
36 36 'rc': RCConfiguration,
37 37 'dds': DDSConfiguration,
38 38 'jars': JARSConfiguration,
39 39 'cgs': CGSConfiguration,
40 40 'abs': ABSConfiguration,
41 41 'usrp': USRPConfiguration,
42 42 }
43 43
44 44
45 45 def index(request):
46 46 kwargs = {}
47 47
48 48 return render(request, 'index.html', kwargs)
49 49
50 50
51 51 def locations(request):
52 52
53 53 locations = Location.objects.all().order_by('name')
54 54
55 55 keys = ['id', 'name', 'description']
56 56
57 57 kwargs = {}
58 58 kwargs['location_keys'] = keys[1:]
59 59 kwargs['locations'] = locations
60 60 kwargs['title'] = 'Location'
61 61 kwargs['suptitle'] = 'List'
62 62 kwargs['button'] = 'New Location'
63 63
64 64 return render(request, 'locations.html', kwargs)
65 65
66 66
67 67 def location(request, id_loc):
68 68
69 69 location = get_object_or_404(Location, pk=id_loc)
70 70
71 71 kwargs = {}
72 72 kwargs['location'] = location
73 73 kwargs['location_keys'] = ['name', 'description']
74 74
75 75 kwargs['title'] = 'Location'
76 76 kwargs['suptitle'] = 'Details'
77 77
78 78 return render(request, 'location.html', kwargs)
79 79
80 80
81 81 def location_new(request):
82 82
83 83 if request.method == 'GET':
84 84 form = LocationForm()
85 85
86 86 if request.method == 'POST':
87 87 form = LocationForm(request.POST)
88 88
89 89 if form.is_valid():
90 90 form.save()
91 91 return redirect('url_locations')
92 92
93 93 kwargs = {}
94 94 kwargs['form'] = form
95 95 kwargs['title'] = 'Location'
96 96 kwargs['suptitle'] = 'New'
97 97 kwargs['button'] = 'Create'
98 98
99 99 return render(request, 'location_edit.html', kwargs)
100 100
101 101
102 102 def location_edit(request, id_loc):
103 103
104 104 location = get_object_or_404(Location, pk=id_loc)
105 105
106 106 if request.method=='GET':
107 107 form = LocationForm(instance=location)
108 108
109 109 if request.method=='POST':
110 110 form = LocationForm(request.POST, instance=location)
111 111
112 112 if form.is_valid():
113 113 form.save()
114 114 return redirect('url_locations')
115 115
116 116 kwargs = {}
117 117 kwargs['form'] = form
118 118 kwargs['title'] = 'Location'
119 119 kwargs['suptitle'] = 'Edit'
120 120 kwargs['button'] = 'Update'
121 121
122 122 return render(request, 'location_edit.html', kwargs)
123 123
124 124
125 125 def location_delete(request, id_loc):
126 126
127 127 location = get_object_or_404(Location, pk=id_loc)
128 128
129 129 if request.method=='POST':
130 130
131 131 if request.user.is_staff:
132 132 location.delete()
133 133 return redirect('url_locations')
134 134
135 135 messages.error(request, 'Not enough permission to delete this object')
136 136 return redirect(location.get_absolute_url())
137 137
138 138 kwargs = {
139 139 'title': 'Delete',
140 140 'suptitle': 'Location',
141 141 'object': location,
142 142 'previous': location.get_absolute_url(),
143 143 'delete': True
144 144 }
145 145
146 146 return render(request, 'confirm.html', kwargs)
147 147
148 148
149 149 def devices(request):
150 150
151 151 devices = Device.objects.all().order_by('device_type__name')
152 152
153 153 # keys = ['id', 'device_type__name', 'name', 'ip_address']
154 154 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
155 155
156 156 kwargs = {}
157 157 kwargs['device_keys'] = keys[1:]
158 158 kwargs['devices'] = devices#.values(*keys)
159 159 kwargs['title'] = 'Device'
160 160 kwargs['suptitle'] = 'List'
161 161 kwargs['button'] = 'New Device'
162 162
163 163 return render(request, 'devices.html', kwargs)
164 164
165 165
166 166 def device(request, id_dev):
167 167
168 168 device = get_object_or_404(Device, pk=id_dev)
169 169
170 170 kwargs = {}
171 171 kwargs['device'] = device
172 172 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
173 173
174 174 kwargs['title'] = 'Device'
175 175 kwargs['suptitle'] = 'Details'
176 176
177 177 return render(request, 'device.html', kwargs)
178 178
179 179
180 180 def device_new(request):
181 181
182 182 if request.method == 'GET':
183 183 form = DeviceForm()
184 184
185 185 if request.method == 'POST':
186 186 form = DeviceForm(request.POST)
187 187
188 188 if form.is_valid():
189 189 form.save()
190 190 return redirect('url_devices')
191 191
192 192 kwargs = {}
193 193 kwargs['form'] = form
194 194 kwargs['title'] = 'Device'
195 195 kwargs['suptitle'] = 'New'
196 196 kwargs['button'] = 'Create'
197 197
198 198 return render(request, 'device_edit.html', kwargs)
199 199
200 200
201 201 def device_edit(request, id_dev):
202 202
203 203 device = get_object_or_404(Device, pk=id_dev)
204 204
205 205 if request.method=='GET':
206 206 form = DeviceForm(instance=device)
207 207
208 208 if request.method=='POST':
209 209 form = DeviceForm(request.POST, instance=device)
210 210
211 211 if form.is_valid():
212 212 form.save()
213 213 return redirect(device.get_absolute_url())
214 214
215 215 kwargs = {}
216 216 kwargs['form'] = form
217 217 kwargs['title'] = 'Device'
218 218 kwargs['suptitle'] = 'Edit'
219 219 kwargs['button'] = 'Update'
220 220
221 221 return render(request, 'device_edit.html', kwargs)
222 222
223 223
224 224 def device_delete(request, id_dev):
225 225
226 226 device = get_object_or_404(Device, pk=id_dev)
227 227
228 228 if request.method=='POST':
229 229
230 230 if request.user.is_staff:
231 231 device.delete()
232 232 return redirect('url_devices')
233 233
234 234 messages.error(request, 'Not enough permission to delete this object')
235 235 return redirect(device.get_absolute_url())
236 236
237 237 kwargs = {
238 238 'title': 'Delete',
239 239 'suptitle': 'Device',
240 240 'object': device,
241 241 'previous': device.get_absolute_url(),
242 242 'delete': True
243 243 }
244 244
245 245 return render(request, 'confirm.html', kwargs)
246 246
247 247
248 248 def campaigns(request):
249 249
250 250 campaigns = Campaign.objects.all().order_by('start_date')
251 251
252 252 keys = ['id', 'name', 'start_date', 'end_date']
253 253
254 254 kwargs = {}
255 255 kwargs['campaign_keys'] = keys[1:]
256 256 kwargs['campaigns'] = campaigns#.values(*keys)
257 257 kwargs['title'] = 'Campaign'
258 258 kwargs['suptitle'] = 'List'
259 259 kwargs['button'] = 'New Campaign'
260 260
261 261 return render(request, 'campaigns.html', kwargs)
262 262
263 263
264 264 def campaign(request, id_camp):
265 265
266 266 campaign = get_object_or_404(Campaign, pk=id_camp)
267 267 experiments = Experiment.objects.filter(campaign=campaign)
268 268
269 269 form = CampaignForm(instance=campaign)
270 270
271 271 kwargs = {}
272 272 kwargs['campaign'] = campaign
273 273 kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
274 274
275 275 kwargs['experiments'] = experiments
276 276 kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time']
277 277
278 278 kwargs['title'] = 'Campaign'
279 279 kwargs['suptitle'] = 'Details'
280 280
281 281 kwargs['form'] = form
282 282 kwargs['button'] = 'Add Experiment'
283 283
284 284 return render(request, 'campaign.html', kwargs)
285 285
286 286
287 287 def campaign_new(request):
288 288
289 289 kwargs = {}
290 290
291 291 if request.method == 'GET':
292 292
293 293 if 'template' in request.GET:
294 294 if request.GET['template']=='0':
295 295 form = NewForm(initial={'create_from':2},
296 296 template_choices=Campaign.objects.filter(template=True).values_list('id', 'name'))
297 297 else:
298 298 kwargs['button'] = 'Create'
299 299 kwargs['experiments'] = Configuration.objects.filter(experiment=request.GET['template'])
300 300 kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
301 301 camp = Campaign.objects.get(pk=request.GET['template'])
302 302 form = CampaignForm(instance=camp,
303 303 initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
304 304 'template':False})
305 305 elif 'blank' in request.GET:
306 306 kwargs['button'] = 'Create'
307 307 form = CampaignForm()
308 308 else:
309 309 form = NewForm()
310 310
311 311 if request.method == 'POST':
312 312 kwargs['button'] = 'Create'
313 313 post = request.POST.copy()
314 314 experiments = []
315 315
316 316 for id_exp in post.getlist('experiments'):
317 317 exp = Experiment.objects.get(pk=id_exp)
318 318 new_exp = exp.clone(template=False)
319 319 experiments.append(new_exp)
320 320
321 321 post.setlist('experiments', [])
322 322
323 323 form = CampaignForm(post)
324 324
325 325 if form.is_valid():
326 326 campaign = form.save()
327 327 for exp in experiments:
328 328 campaign.experiments.add(exp)
329 329 campaign.save()
330 330 return redirect('url_campaign', id_camp=campaign.id)
331 331
332 332 kwargs['form'] = form
333 333 kwargs['title'] = 'Campaign'
334 334 kwargs['suptitle'] = 'New'
335 335
336 336 return render(request, 'campaign_edit.html', kwargs)
337 337
338 338
339 339 def campaign_edit(request, id_camp):
340 340
341 341 campaign = get_object_or_404(Campaign, pk=id_camp)
342 342
343 343 if request.method=='GET':
344 344 form = CampaignForm(instance=campaign)
345 345
346 346 if request.method=='POST':
347 347 exps = campaign.experiments.all().values_list('pk', flat=True)
348 348 post = request.POST.copy()
349 349 new_exps = post.getlist('experiments')
350 350 post.setlist('experiments', [])
351 351 form = CampaignForm(post, instance=campaign)
352 352
353 353 if form.is_valid():
354 354 camp = form.save()
355 355 for id_exp in new_exps:
356 356 if int(id_exp) in exps:
357 357 exps.pop(id_exp)
358 358 else:
359 359 exp = Experiment.objects.get(pk=id_exp)
360 360 if exp.template:
361 361 camp.experiments.add(exp.clone(template=False))
362 362 else:
363 363 camp.experiments.add(exp)
364 364
365 365 for id_exp in exps:
366 366 camp.experiments.remove(Experiment.objects.get(pk=id_exp))
367 367
368 368 return redirect('url_campaign', id_camp=id_camp)
369 369
370 370 kwargs = {}
371 371 kwargs['form'] = form
372 372 kwargs['title'] = 'Campaign'
373 373 kwargs['suptitle'] = 'Edit'
374 374 kwargs['button'] = 'Update'
375 375
376 376 return render(request, 'campaign_edit.html', kwargs)
377 377
378 378
379 379 def campaign_delete(request, id_camp):
380 380
381 381 campaign = get_object_or_404(Campaign, pk=id_camp)
382 382
383 383 if request.method=='POST':
384 384 if request.user.is_staff:
385 385
386 386 for exp in campaign.experiments.all():
387 387 for conf in Configuration.objects.filter(experiment=exp):
388 388 conf.delete()
389 389 exp.delete()
390 390 campaign.delete()
391 391
392 392 return redirect('url_campaigns')
393 393
394 394 messages.error(request, 'Not enough permission to delete this object')
395 395 return redirect(campaign.get_absolute_url())
396 396
397 397 kwargs = {
398 398 'title': 'Delete',
399 399 'suptitle': 'Campaign',
400 400 'object': campaign,
401 401 'previous': campaign.get_absolute_url(),
402 402 'delete': True
403 403 }
404 404
405 405 return render(request, 'confirm.html', kwargs)
406 406
407 407
408 408 def experiments(request):
409 409
410 410 experiment_list = Experiment.objects.all()
411 411
412 412 keys = ['id', 'name', 'start_time', 'end_time']
413 413
414 414 kwargs = {}
415 415
416 416 kwargs['experiment_keys'] = keys[1:]
417 417 kwargs['experiments'] = experiment_list
418 418
419 419 kwargs['title'] = 'Experiment'
420 420 kwargs['suptitle'] = 'List'
421 421 kwargs['button'] = 'New Experiment'
422 422
423 423 return render(request, 'experiments.html', kwargs)
424 424
425 425
426 426 def experiment(request, id_exp):
427 427
428 428 experiment = get_object_or_404(Experiment, pk=id_exp)
429 429
430 430 configurations = Configuration.objects.filter(experiment=experiment, type=0)
431 431
432 432 kwargs = {}
433 433
434 434 kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time']
435 435 kwargs['experiment'] = experiment
436 436
437 437 kwargs['configuration_keys'] = ['device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
438 438 kwargs['configurations'] = configurations
439 439
440 440 kwargs['title'] = 'Experiment'
441 441 kwargs['suptitle'] = 'Details'
442 442
443 443 kwargs['button'] = 'Add Configuration'
444 444
445 445 ###### SIDEBAR ######
446 446 kwargs.update(sidebar(experiment=experiment))
447 447
448 448 return render(request, 'experiment.html', kwargs)
449 449
450 450
451 451 def experiment_new(request, id_camp=None):
452 452
453 453 kwargs = {}
454 454
455 455 if request.method == 'GET':
456 456 if 'template' in request.GET:
457 457 if request.GET['template']=='0':
458 458 form = NewForm(initial={'create_from':2},
459 459 template_choices=Experiment.objects.filter(template=True).values_list('id', 'name'))
460 460 else:
461 461 kwargs['button'] = 'Create'
462 462 kwargs['configurations'] = Configuration.objects.filter(experiment=request.GET['template'])
463 463 kwargs['configuration_keys'] = ['name', 'device__name', 'device__ip_address', 'device__port_address']
464 464 exp=Experiment.objects.get(pk=request.GET['template'])
465 465 form = ExperimentForm(instance=exp,
466 466 initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()),
467 467 'template': False})
468 468 elif 'blank' in request.GET:
469 469 kwargs['button'] = 'Create'
470 470 form = ExperimentForm()
471 471 else:
472 472 form = NewForm()
473 473
474 474 if request.method == 'POST':
475 475 form = ExperimentForm(request.POST)
476 476 if form.is_valid():
477 477 experiment = form.save()
478 478
479 479 if 'template' in request.GET:
480 480 configurations = Configuration.objects.filter(experiment=request.GET['template'], type=0)
481 481 for conf in configurations:
482 482 conf.clone(experiment=experiment, template=False)
483 483
484 484 return redirect('url_experiment', id_exp=experiment.id)
485 485
486 486 kwargs['form'] = form
487 487 kwargs['title'] = 'Experiment'
488 488 kwargs['suptitle'] = 'New'
489 489
490 490 return render(request, 'experiment_edit.html', kwargs)
491 491
492 492
493 493 def experiment_edit(request, id_exp):
494 494
495 495 experiment = get_object_or_404(Experiment, pk=id_exp)
496 496
497 497 if request.method == 'GET':
498 498 form = ExperimentForm(instance=experiment)
499 499
500 500 if request.method=='POST':
501 501 form = ExperimentForm(request.POST, instance=experiment)
502 502
503 503 if form.is_valid():
504 504 experiment = form.save()
505 505 return redirect('url_experiment', id_exp=experiment.id)
506 506
507 507 kwargs = {}
508 508 kwargs['form'] = form
509 509 kwargs['title'] = 'Experiment'
510 510 kwargs['suptitle'] = 'Edit'
511 511 kwargs['button'] = 'Update'
512 512
513 513 return render(request, 'experiment_edit.html', kwargs)
514 514
515 515
516 516 def experiment_delete(request, id_exp):
517 517
518 518 experiment = get_object_or_404(Experiment, pk=id_exp)
519 519
520 520 if request.method=='POST':
521 521 if request.user.is_staff:
522 522 for conf in Configuration.objects.filter(experiment=experiment):
523 523 conf.delete()
524 524 experiment.delete()
525 525 return redirect('url_experiments')
526 526
527 527 messages.error(request, 'Not enough permission to delete this object')
528 528 return redirect(experiment.get_absolute_url())
529 529
530 530 kwargs = {
531 531 'title': 'Delete',
532 532 'suptitle': 'Experiment',
533 533 'object': experiment,
534 534 'previous': experiment.get_absolute_url(),
535 535 'delete': True
536 536 }
537 537
538 538 return render(request, 'confirm.html', kwargs)
539 539
540 540
541 541 def dev_confs(request):
542 542
543 543 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
544 544
545 545 kwargs = {}
546 546
547 547 kwargs['configuration_keys'] = ['device', 'experiment', 'type', 'programmed_date']
548 548 kwargs['configurations'] = configurations
549 549
550 550 kwargs['title'] = 'Configuration'
551 551 kwargs['suptitle'] = 'List'
552 552
553 553 return render(request, 'dev_confs.html', kwargs)
554 554
555 555
556 556 def dev_conf(request, id_conf):
557 557
558 558 conf = get_object_or_404(Configuration, pk=id_conf)
559 559
560 560 return redirect(conf.get_absolute_url())
561 561
562 562
563 563 def dev_conf_new(request, id_exp=0, id_dev=0):
564 564
565 565 initial = {}
566 566
567 567 if id_exp<>0:
568 568 initial['experiment'] = id_exp
569 569
570 570 if id_dev<>0:
571 571 initial['device'] = id_dev
572 572
573 573 if request.method == 'GET':
574 574 if id_dev==0:
575 575 form = ConfigurationForm(initial=initial)
576 576 else:
577 577 device = Device.objects.get(pk=id_dev)
578 578 DevConfForm = CONF_FORMS[device.device_type.name]
579 579
580 580 form = DevConfForm(initial=initial)
581 581
582 582 if request.method == 'POST':
583 583
584 584 device = Device.objects.get(pk=request.POST['device'])
585 585 DevConfForm = CONF_FORMS[device.device_type.name]
586 586
587 587 form = DevConfForm(request.POST)
588 588
589 589 if form.is_valid():
590 590 dev_conf = form.save()
591 591
592 592 return redirect('url_dev_confs')
593 593
594 594 kwargs = {}
595 595 kwargs['id_exp'] = id_exp
596 596 kwargs['form'] = form
597 597 kwargs['title'] = 'Configuration'
598 598 kwargs['suptitle'] = 'New'
599 599 kwargs['button'] = 'Create'
600 600
601 601 return render(request, 'dev_conf_edit.html', kwargs)
602 602
603 603
604 604 def dev_conf_edit(request, id_conf):
605 605
606 606 conf = get_object_or_404(Configuration, pk=id_conf)
607 607
608 608 DevConfModel = CONF_MODELS[conf.device.device_type.name]
609 609 DevConfForm = CONF_FORMS[conf.device.device_type.name]
610 610
611 611 dev_conf = DevConfModel.objects.get(pk=id_conf)
612 612
613 613 if request.method=='GET':
614 614 form = DevConfForm(instance=dev_conf)
615 615
616 616 if request.method=='POST':
617 617 form = DevConfForm(request.POST, instance=dev_conf)
618 618
619 619 if form.is_valid():
620 620 form.save()
621 621 return redirect('url_dev_conf', id_conf=id_conf)
622 622
623 623 kwargs = {}
624 624 kwargs['form'] = form
625 625 kwargs['title'] = 'Device Configuration'
626 626 kwargs['suptitle'] = 'Edit'
627 627 kwargs['button'] = 'Update'
628 628
629 629 ###### SIDEBAR ######
630 630 kwargs.update(sidebar(conf=conf))
631 631
632 632 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
633 633
634 634
635 635 def dev_conf_start(request, id_conf):
636 636
637 637 conf = get_object_or_404(Configuration, pk=id_conf)
638 638
639 639 DevConfModel = CONF_MODELS[conf.device.device_type.name]
640 640
641 641 conf = DevConfModel.objects.get(pk=id_conf)
642 642
643 643 if conf.start_device():
644 644 messages.success(request, conf.message)
645 645 else:
646 646 messages.error(request, conf.message)
647 647
648 648 conf.status_device()
649 649
650 650 return redirect(conf.get_absolute_url())
651 651
652 652
653 653 def dev_conf_stop(request, id_conf):
654 654
655 655 conf = get_object_or_404(Configuration, pk=id_conf)
656 656
657 657 DevConfModel = CONF_MODELS[conf.device.device_type.name]
658 658
659 659 conf = DevConfModel.objects.get(pk=id_conf)
660 660
661 661 if conf.stop_device():
662 662 messages.success(request, conf.message)
663 663 else:
664 664 messages.error(request, conf.message)
665 665
666 666 conf.status_device()
667 667
668 668 return redirect(conf.get_absolute_url())
669 669
670 670
671 671 def dev_conf_status(request, id_conf):
672 672
673 673 conf = get_object_or_404(Configuration, pk=id_conf)
674 674
675 675 DevConfModel = CONF_MODELS[conf.device.device_type.name]
676 676
677 677 conf = DevConfModel.objects.get(pk=id_conf)
678 678
679 679 if conf.status_device():
680 680 messages.success(request, conf.message)
681 681 else:
682 682 messages.error(request, conf.message)
683 683
684 684 return redirect(conf.get_absolute_url())
685 685
686 686
687 687 def dev_conf_write(request, id_conf):
688 688
689 689 conf = get_object_or_404(Configuration, pk=id_conf)
690 690
691 691 DevConfModel = CONF_MODELS[conf.device.device_type.name]
692 692
693 693 conf = DevConfModel.objects.get(pk=id_conf)
694 694
695 695 answer = conf.write_device()
696 696 conf.status_device()
697 697
698 698 if answer:
699 699 messages.success(request, conf.message)
700 700
701 701 #Creating a historical configuration
702 702 conf.clone(type=0, template=False)
703 703
704 704 #Original configuration
705 705 conf = DevConfModel.objects.get(pk=id_conf)
706 706 else:
707 707 messages.error(request, conf.message)
708 708
709 709 return redirect(conf.get_absolute_url())
710 710
711 711
712 712 def dev_conf_read(request, id_conf):
713 713
714 714 conf = get_object_or_404(Configuration, pk=id_conf)
715 715
716 716 DevConfModel = CONF_MODELS[conf.device.device_type.name]
717 717 DevConfForm = CONF_FORMS[conf.device.device_type.name]
718 718
719 719 conf = DevConfModel.objects.get(pk=id_conf)
720 720
721 721 if request.method=='GET':
722 722
723 723 parms = conf.read_device()
724 724 conf.status_device()
725 725
726 726 if not parms:
727 727 messages.error(request, conf.message)
728 728 return redirect(conf.get_absolute_url())
729 729
730 730 form = DevConfForm(initial=parms, instance=conf)
731 731
732 732 if request.method=='POST':
733 733 form = DevConfForm(request.POST, instance=conf)
734 734
735 735 if form.is_valid():
736 736 form.save()
737 737 return redirect(conf.get_absolute_url())
738 738
739 739 messages.error(request, "Parameters could not be saved")
740 740
741 741 kwargs = {}
742 742 kwargs['id_dev'] = conf.id
743 743 kwargs['form'] = form
744 744 kwargs['title'] = 'Device Configuration'
745 745 kwargs['suptitle'] = 'Parameters read from device'
746 746 kwargs['button'] = 'Save'
747 747
748 748 ###### SIDEBAR ######
749 749 kwargs.update(sidebar(conf=conf))
750 750
751 751 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
752 752
753 753
754 754 def dev_conf_import(request, id_conf):
755 755
756 756 conf = get_object_or_404(Configuration, pk=id_conf)
757 757
758 758 DevConfModel = CONF_MODELS[conf.device.device_type.name]
759 759 DevConfForm = CONF_FORMS[conf.device.device_type.name]
760 760 conf = DevConfModel.objects.get(pk=id_conf)
761 761
762 762 if request.method == 'GET':
763 763 file_form = UploadFileForm()
764 764
765 765 if request.method == 'POST':
766 766 file_form = UploadFileForm(request.POST, request.FILES)
767 767
768 768 if file_form.is_valid():
769 769
770 770 parms = conf.import_from_file(request.FILES['file'])
771 771
772 772 if parms:
773 773 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
774 774 form = DevConfForm(initial=parms, instance=conf)
775 775
776 776 kwargs = {}
777 777 kwargs['id_dev'] = conf.id
778 778 kwargs['form'] = form
779 779 kwargs['title'] = 'Device Configuration'
780 780 kwargs['suptitle'] = 'Parameters imported'
781 781 kwargs['button'] = 'Save'
782 782 kwargs['action'] = conf.get_absolute_url_edit()
783 783 kwargs['previous'] = conf.get_absolute_url()
784 784
785 785 ###### SIDEBAR ######
786 786 kwargs.update(sidebar(conf=conf))
787 787
788 788 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
789 789
790 790 messages.error(request, "Could not import parameters from file")
791 791
792 792 kwargs = {}
793 793 kwargs['id_dev'] = conf.id
794 794 kwargs['title'] = 'Device Configuration'
795 795 kwargs['form'] = file_form
796 796 kwargs['suptitle'] = 'Importing file'
797 797 kwargs['button'] = 'Import'
798 798
799 799 kwargs.update(sidebar(conf=conf))
800 800
801 801 return render(request, 'dev_conf_import.html', kwargs)
802 802
803 803
804 804 def dev_conf_export(request, id_conf):
805 805
806 806 conf = get_object_or_404(Configuration, pk=id_conf)
807 807
808 808 DevConfModel = CONF_MODELS[conf.device.device_type.name]
809 809
810 810 conf = DevConfModel.objects.get(pk=id_conf)
811 811
812 812 if request.method == 'GET':
813 813 file_form = DownloadFileForm(conf.device.device_type.name)
814 814
815 815 if request.method == 'POST':
816 816 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
817 817
818 818 if file_form.is_valid():
819 819 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
820 820
821 821 response = HttpResponse(content_type=fields['content_type'])
822 822 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
823 823 response.write(fields['content'])
824 824
825 825 return response
826 826
827 827 messages.error(request, "Could not export parameters")
828 828
829 829 kwargs = {}
830 830 kwargs['id_dev'] = conf.id
831 831 kwargs['title'] = 'Device Configuration'
832 832 kwargs['form'] = file_form
833 833 kwargs['suptitle'] = 'Exporting file'
834 834 kwargs['button'] = 'Export'
835 835
836 836 return render(request, 'dev_conf_export.html', kwargs)
837 837
838 838
839 839 def dev_conf_delete(request, id_conf):
840 840
841 841 conf = get_object_or_404(Configuration, pk=id_conf)
842 842
843 843 if request.method=='POST':
844 844 if request.user.is_staff:
845 845 conf.delete()
846 846 return redirect('url_dev_confs')
847 847
848 848 messages.error(request, 'Not enough permission to delete this object')
849 849 return redirect(conf.get_absolute_url())
850 850
851 851 kwargs = {
852 852 'title': 'Delete',
853 853 'suptitle': 'Experiment',
854 854 'object': conf,
855 855 'previous': conf.get_absolute_url(),
856 856 'delete': True
857 857 }
858 858
859 859 return render(request, 'confirm.html', kwargs)
860 860
861 861
862 862 def sidebar(**kwargs):
863 863
864 864 side_data = {}
865 865
866 866 conf = kwargs.get('conf', None)
867 867 experiment = kwargs.get('experiment', None)
868 868
869 869 if not experiment:
870 870 experiment = conf.experiment
871 871
872 872 if experiment:
873 873 side_data['experiment'] = experiment
874 874 campaign = experiment.campaign_set.all()
875 875 if campaign:
876 876 side_data['campaign'] = campaign[0]
877 877 experiments = campaign[0].experiments.all()
878 878 else:
879 879 experiments = [experiment]
880 880 configurations = experiment.configuration_set.filter(type=0)
881 881 side_data['side_experiments'] = experiments
882 882 side_data['side_configurations'] = configurations
883 883
884 884 return side_data
885 885
886 886
887 887 def operation(request, id_camp=None):
888 888
889 889 if not id_camp:
890 890 campaigns = Campaign.objects.all().order_by('-start_date')
891 891
892 892 if not campaigns:
893 893 kwargs = {}
894 894 kwargs['title'] = 'No Campaigns'
895 895 kwargs['suptitle'] = 'Empty'
896 896 return render(request, 'operation.html', kwargs)
897 897
898 898 id_camp = campaigns[0].id
899 899
900 900 campaign = get_object_or_404(Campaign, pk = id_camp)
901 901
902 902 if request.method=='GET':
903 903 form = OperationForm(initial={'campaign': campaign.id}, length = 5)
904 904
905 905 if request.method=='POST':
906 906 form = OperationForm(request.POST, initial={'campaign':campaign.id}, length = 5)
907 907
908 908 if form.is_valid():
909 909 return redirect('url_operation', id_camp=campaign.id)
910 910 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
911 911 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
912 912 #for exs in experiments:
913 913 # exs.get_status()
914 914 locations= Location.objects.filter(experiment=experiments).distinct()
915 915 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
916 916 kwargs = {}
917 917 #---Campaign
918 918 kwargs['campaign'] = campaign
919 919 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
920 920 #---Experiment
921 921 keys = ['id', 'name', 'start_time', 'end_time', 'status']
922 922 kwargs['experiment_keys'] = keys[1:]
923 923 kwargs['experiments'] = experiments
924 924 #---Radar
925 925 kwargs['locations'] = locations
926 926 #---Else
927 927 kwargs['title'] = 'Campaign'
928 928 kwargs['suptitle'] = campaign.name
929 929 kwargs['form'] = form
930 930 kwargs['button'] = 'Search'
931 931 kwargs['details'] = True
932 932 kwargs['search_button'] = True
933 933
934 934 return render(request, 'operation.html', kwargs)
935 935
936 936
937 937 def operation_search(request, id_camp=None):
938 938
939 939
940 940 if not id_camp:
941 941 campaigns = Campaign.objects.all().order_by('-start_date')
942 942
943 943 if not campaigns:
944 944 return render(request, 'operation.html', {})
945 945
946 946 id_camp = campaigns[0].id
947 947 campaign = get_object_or_404(Campaign, pk = id_camp)
948 948
949 949 if request.method=='GET':
950 950 form = OperationSearchForm(initial={'campaign': campaign.id})
951 951
952 952 if request.method=='POST':
953 953 form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
954 954
955 955 if form.is_valid():
956 956 return redirect('url_operation', id_camp=campaign.id)
957 957
958 958 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
959 959 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
960 960 #for exs in experiments:
961 961 # exs.get_status()
962 962 locations= Location.objects.filter(experiment=experiments).distinct()
963 963 form = OperationSearchForm(initial={'campaign': campaign.id})
964 964
965 965 kwargs = {}
966 966 #---Campaign
967 967 kwargs['campaign'] = campaign
968 968 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
969 969 #---Experiment
970 970 keys = ['id', 'name', 'start_time', 'end_time', 'status']
971 971 kwargs['experiment_keys'] = keys[1:]
972 972 kwargs['experiments'] = experiments
973 973 #---Radar
974 974 kwargs['locations'] = locations
975 975 #---Else
976 976 kwargs['title'] = 'Campaign'
977 977 kwargs['suptitle'] = campaign.name
978 978 kwargs['form'] = form
979 979 kwargs['button'] = 'Select'
980 980 kwargs['details'] = True
981 981 kwargs['search_button'] = False
982 982
983 983 return render(request, 'operation.html', kwargs)
984 984
985 985
986 986 def radar_play(request, id_camp, id_radar):
987 987 campaign = get_object_or_404(Campaign, pk = id_camp)
988 988 radar = get_object_or_404(Location, pk = id_radar)
989 989 today = datetime.today()
990 990 now = today.time()
991 991
992 992 #--If campaign datetime is ok:
993 993 if today >= campaign.start_date and today <= campaign.end_date:
994 994 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
995 995 for exp in experiments:
996 996 #--If experiment time is ok:
997 997 if now >= exp.start_time and now <= exp.end_time:
998 998 configurations = Configuration.objects.filter(experiment = exp)
999 999 for conf in configurations:
1000 1000 if 'cgs' in conf.device.device_type.name:
1001 1001 conf.status_device()
1002 1002 else:
1003 1003 answer = conf.start_device()
1004 1004 conf.status_device()
1005 1005 #--Running Experiment
1006 1006 r_e = RunningExperiment.objects.filter(radar=radar)
1007 1007 #--If RunningExperiment element exists
1008 1008 if r_e:
1009 1009 r_e = r_e[0]
1010 1010 r_e.running_experiment = exp
1011 1011 r_e.status = 3
1012 1012 r_e.save()
1013 1013 else:
1014 1014 running_experiment = RunningExperiment(
1015 1015 radar = radar,
1016 running_experiment = exp,
1017 1016 status = 3,
1018 1017 )
1019 1018 running_experiment.save()
1019 running_experiment.running_experiment.add(exp)
1020 running_experiment.save()
1020 1021
1021 1022 if answer:
1022 1023 messages.success(request, conf.message)
1023 1024 exp.status=2
1024 1025 exp.save()
1025 1026 else:
1026 1027 messages.error(request, conf.message)
1027 1028 else:
1028 1029 if exp.status == 1 or exp.status == 3:
1029 1030 exp.status=3
1030 1031 exp.save()
1031 1032
1032 1033
1033 1034 route = request.META['HTTP_REFERER']
1034 1035 route = str(route)
1035 1036 if 'search' in route:
1036 1037 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1037 1038 else:
1038 1039 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1039 1040
1040 1041
1041 1042 def radar_stop(request, id_camp, id_radar):
1042 1043
1043 1044 route = request.META['HTTP_REFERER']
1044 1045 route = str(route)
1045 1046 if 'search' in route:
1046 1047 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1047 1048 else:
1048 1049 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1049 1050
1050 1051
1051 1052 def radar_refresh(request, id_camp, id_radar):
1052 1053
1053 1054 campaign = get_object_or_404(Campaign, pk = id_camp)
1054 1055 radar = get_object_or_404(Location, pk = id_radar)
1055 1056 experiments = Experiment.objects.filter(campaign=campaign).filter(location=radar)
1056 1057 for exs in experiments:
1057 1058 exs.get_status()
1058 1059
1059 1060 route = request.META['HTTP_REFERER']
1060 1061 route = str(route)
1061 1062 if 'search' in route:
1062 1063 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
1063 1064 else:
1064 1065 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
1065 1066
General Comments 0
You need to be logged in to leave comments. Login now