@@ -2,6 +2,7 from django import forms | |||||
2 | from django.utils.safestring import mark_safe |
|
2 | from django.utils.safestring import mark_safe | |
3 | from .models import Device, Experiment, Campaign, Location |
|
3 | from .models import Device, Experiment, Campaign, Location | |
4 | from apps.main.models import Configuration |
|
4 | from apps.main.models import Configuration | |
|
5 | from django.template.defaultfilters import default | |||
5 |
|
6 | |||
6 | FILE_FORMAT = ( |
|
7 | FILE_FORMAT = ( | |
7 | ('json', 'json'), |
|
8 | ('json', 'json'), | |
@@ -181,3 +182,11 class FilterForm(forms.Form): | |||||
181 | self.fields['template'] = forms.BooleanField(required=False) |
|
182 | self.fields['template'] = forms.BooleanField(required=False) | |
182 | else: |
|
183 | else: | |
183 | self.fields[field] = forms.CharField(required=False) |
|
184 | self.fields[field] = forms.CharField(required=False) | |
|
185 | ||||
|
186 | class ChangeIpForm(forms.Form): | |||
|
187 | ||||
|
188 | ip_address = forms.GenericIPAddressField() | |||
|
189 | mask = forms.GenericIPAddressField(initial='255.255.255.0') | |||
|
190 | gateway = forms.GenericIPAddressField(initial='0.0.0.0') | |||
|
191 | ||||
|
192 |
@@ -1,5 +1,6 | |||||
1 |
|
1 | |||
2 | from datetime import datetime |
|
2 | from datetime import datetime | |
|
3 | from django.template.base import kwarg_re | |||
3 |
|
4 | |||
4 | try: |
|
5 | try: | |
5 | from polymorphic.models import PolymorphicModel |
|
6 | from polymorphic.models import PolymorphicModel | |
@@ -10,6 +11,7 from django.db import models | |||||
10 | from django.core.urlresolvers import reverse |
|
11 | from django.core.urlresolvers import reverse | |
11 | from django.shortcuts import get_object_or_404 |
|
12 | from django.shortcuts import get_object_or_404 | |
12 |
|
13 | |||
|
14 | from devices.dds import api as dds_api | |||
13 |
|
15 | |||
14 | EXP_STATES = ( |
|
16 | EXP_STATES = ( | |
15 | (0,'Error'), #RED |
|
17 | (0,'Error'), #RED | |
@@ -133,6 +135,32 class Device(models.Model): | |||||
133 |
|
135 | |||
134 | return reverse('url_device', args=[str(self.id)]) |
|
136 | return reverse('url_device', args=[str(self.id)]) | |
135 |
|
137 | |||
|
138 | def change_ip(self, ip_address, mask, gateway, **kwargs): | |||
|
139 | ||||
|
140 | if self.device_type.name=='dds': | |||
|
141 | try: | |||
|
142 | #if True: | |||
|
143 | answer = dds_api.change_ip(ip = self.ip_address, | |||
|
144 | port = self.port_address, | |||
|
145 | new_ip = ip_address, | |||
|
146 | mask = mask, | |||
|
147 | gateway = gateway) | |||
|
148 | if answer[0]=='1': | |||
|
149 | self.message = 'DDS - {}'.format(answer) | |||
|
150 | self.ip_address = ip_address | |||
|
151 | self.save() | |||
|
152 | else: | |||
|
153 | self.message = 'DDS - {}'.format(answer) | |||
|
154 | return False | |||
|
155 | except Exception as e: | |||
|
156 | self.message = str(e) | |||
|
157 | return False | |||
|
158 | else: | |||
|
159 | self.message = 'Not implemented' | |||
|
160 | return False | |||
|
161 | ||||
|
162 | return True | |||
|
163 | ||||
136 |
|
164 | |||
137 | class Campaign(models.Model): |
|
165 | class Campaign(models.Model): | |
138 |
|
166 |
@@ -1,4 +1,5 | |||||
1 | {% extends 'base.html' %} |
|
1 | {% extends 'base.html' %} | |
|
2 | {% load bootstrap3 %} | |||
2 |
|
3 | |||
3 | {% block content-title %}{{title}}{% endblock %} |
|
4 | {% block content-title %}{{title}}{% endblock %} | |
4 | {% block content-suptitle %}{{suptitle}}{% endblock %} |
|
5 | {% block content-suptitle %}{{suptitle}}{% endblock %} | |
@@ -6,12 +7,19 | |||||
6 | {% block content %} |
|
7 | {% block content %} | |
7 |
|
8 | |||
8 | <form action="" method="post" class="form">{% csrf_token %} |
|
9 | <form action="" method="post" class="form">{% csrf_token %} | |
|
10 | {% if form %} | |||
|
11 | {% bootstrap_form form layout='horizontal' size='medium' %} | |||
|
12 | <div style="clear: both;"></div> | |||
|
13 | {% endif %} | |||
9 | {% if delete %} |
|
14 | {% if delete %} | |
10 | <h3>Are you sure you wish to delete: {{ object }}?</h3> |
|
15 | <h3>Are you sure you wish to delete: {{ object }}?</h3> | |
11 | {% else %} |
|
16 | {% else %} | |
12 | <h4>Are you sure you wish to proceed?</h4> |
|
17 | {% if message %} | |
13 | {% endif %} |
|
18 | <p>{{ message }}</p> | |
14 | {% if message %}<p>{{ message }}</p>{% endif %} |
|
19 | {% else %} | |
|
20 | <h4>Are you sure you wish to proceed?</h4> | |||
|
21 | {% endif %} | |||
|
22 | {% endif %} | |||
15 | <br> |
|
23 | <br> | |
16 | <div class="pull-right"> |
|
24 | <div class="pull-right"> | |
17 | <button class="btn btn-primary" type="submit"> |
|
25 | <button class="btn btn-primary" type="submit"> |
@@ -14,7 +14,10 | |||||
14 | <tr><th>{{key|title}}</th><td>{{device|attr:key}}</td></tr> |
|
14 | <tr><th>{{key|title}}</th><td>{{device|attr:key}}</td></tr> | |
15 | {% endfor %} |
|
15 | {% endfor %} | |
16 | </table> |
|
16 | </table> | |
17 | <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit_device">Edit</button> |
|
17 | <div class="btn-group pull-right" role="group"> | |
|
18 | <button type="button" class="btn btn-primary" id="bt_edit_device">Edit</button> | |||
|
19 | <button type="button" class="btn btn-primary" id="bt_change_ip_device">Change IP</button> | |||
|
20 | </div> | |||
18 | <br></br> |
|
21 | <br></br> | |
19 | <br></br> |
|
22 | <br></br> | |
20 | {% endblock %} |
|
23 | {% endblock %} | |
@@ -30,5 +33,9 | |||||
30 | document.location = "{% url 'url_edit_device' device.id%}"; |
|
33 | document.location = "{% url 'url_edit_device' device.id%}"; | |
31 | }); |
|
34 | }); | |
32 |
|
35 | |||
|
36 | $("#bt_change_ip_device").click(function() { | |||
|
37 | document.location = "{% url 'url_change_ip_device' device.id%}"; | |||
|
38 | }); | |||
|
39 | ||||
33 | </script> |
|
40 | </script> | |
34 | {% endblock %} No newline at end of file |
|
41 | {% endblock %} |
@@ -15,6 +15,7 urlpatterns = ( | |||||
15 | url(r'^device/(?P<id_dev>-?\d+)/$', views.device, name='url_device'), |
|
15 | url(r'^device/(?P<id_dev>-?\d+)/$', views.device, name='url_device'), | |
16 | url(r'^device/(?P<id_dev>-?\d+)/edit/$', views.device_edit, name='url_edit_device'), |
|
16 | url(r'^device/(?P<id_dev>-?\d+)/edit/$', views.device_edit, name='url_edit_device'), | |
17 | url(r'^device/(?P<id_dev>-?\d+)/delete/$', views.device_delete, name='url_delete_device'), |
|
17 | url(r'^device/(?P<id_dev>-?\d+)/delete/$', views.device_delete, name='url_delete_device'), | |
|
18 | url(r'^device/(?P<id_dev>-?\d+)/change_ip/$', views.device_change_ip, name='url_change_ip_device'), | |||
18 |
|
19 | |||
19 | url(r'^campaign/new/$', views.campaign_new, name='url_add_campaign'), |
|
20 | url(r'^campaign/new/$', views.campaign_new, name='url_add_campaign'), | |
20 | url(r'^campaign/$', views.campaigns, name='url_campaigns'), |
|
21 | url(r'^campaign/$', views.campaigns, name='url_campaigns'), |
@@ -15,7 +15,7 except ImportError: | |||||
15 | from urllib import urlencode |
|
15 | from urllib import urlencode | |
16 |
|
16 | |||
17 | from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm |
|
17 | from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm | |
18 | from .forms import OperationSearchForm, FilterForm |
|
18 | from .forms import OperationSearchForm, FilterForm, ChangeIpForm | |
19 |
|
19 | |||
20 | from .tasks import task_start, task_stop |
|
20 | from .tasks import task_start, task_stop | |
21 |
|
21 | |||
@@ -276,6 +276,32 def device_delete(request, id_dev): | |||||
276 | return render(request, 'confirm.html', kwargs) |
|
276 | return render(request, 'confirm.html', kwargs) | |
277 |
|
277 | |||
278 |
|
278 | |||
|
279 | @user_passes_test(lambda u:u.is_staff) | |||
|
280 | def device_change_ip(request, id_dev): | |||
|
281 | ||||
|
282 | device = get_object_or_404(Device, pk=id_dev) | |||
|
283 | ||||
|
284 | if request.method=='POST': | |||
|
285 | ||||
|
286 | if request.user.is_staff: | |||
|
287 | device.change_ip(**request.POST.dict()) | |||
|
288 | messages.success(request, device.message) | |||
|
289 | else: | |||
|
290 | messages.error(request, 'Not enough permission to delete this object') | |||
|
291 | return redirect(device.get_absolute_url()) | |||
|
292 | ||||
|
293 | kwargs = { | |||
|
294 | 'title': 'Device', | |||
|
295 | 'suptitle': 'Change IP', | |||
|
296 | 'object': device, | |||
|
297 | 'previous': device.get_absolute_url(), | |||
|
298 | 'form': ChangeIpForm(initial={'ip_address':device.ip_address}), | |||
|
299 | 'message' : ' ', | |||
|
300 | } | |||
|
301 | ||||
|
302 | return render(request, 'confirm.html', kwargs) | |||
|
303 | ||||
|
304 | ||||
279 | def campaigns(request): |
|
305 | def campaigns(request): | |
280 |
|
306 | |||
281 | page = request.GET.get('page') |
|
307 | page = request.GET.get('page') |
General Comments 0
You need to be logged in to leave comments.
Login now