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