##// END OF EJS Templates
Campaign has been added to RadarSys Model...
Miguel Urco -
r13:6a2dde2f45c9
parent child
Show More
@@ -0,0 +1,8
1 from django import forms
2 from .models import ABSConfiguration
3
4 class ABSConfigurationForm(forms.ModelForm):
5
6 class Meta:
7 model = ABSConfiguration
8 fields = ('experiment',)
@@ -0,0 +1,1
1 {% extends "dev_conf.html" %} No newline at end of file
@@ -0,0 +1,11
1 {% extends "dev_conf.html" %}
2
3 {% block extra-js%}
4 <script type="text/javascript">
5
6 $("#bt_edit_device").click(function() {
7 document.location = "{% url 'url_edit_dds_conf' dev_conf.id%}";
8 });
9
10 </script>
11 {% endblock %} No newline at end of file
@@ -0,0 +1,1
1 {% extends "dev_conf_edit.html" %} No newline at end of file
@@ -0,0 +1,96
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block camp-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <table class="table table-bordered">
16 {% for key in campaign_keys %}
17 <tr><th>{{key|title}}</th><td>{{campaign|attr:key}}</td></tr>
18 {% endfor %}
19 </table>
20 <hr>
21
22 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
23 <div class="panel panel-default">
24 <div class="panel-heading" role="tab" id="headingOne">
25 <h4 class="panel-title">
26 <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
27 Edit Campaign Details
28 </a>
29 </h4>
30 </div>
31 <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne">
32 <div class="panel-body">
33 <form class="form" method="post" action="{% url 'url_edit_campaign' campaign.id %}">
34 {% csrf_token %}
35 {% bootstrap_form form layout='horizontal' size='medium' %}
36 <div style="clear: both;"></div>
37 <br>
38 <button type="submit" class="btn btn-primary pull-right" id="bt_update">Update</button>
39 </form>
40 </div>
41 </div>
42 </div>
43 <div class="panel panel-default">
44 <div class="panel-heading" role="tab" id="headingTwo">
45 <h4 class="panel-title">
46 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
47 Experiment List
48 </a>
49 </h4>
50 </div>
51
52 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
53 <div class="panel-body">
54 <table class="table table-hover">
55 <tr>
56 <th>#</th>
57 {% for header in experiment_keys %}
58 <th>{{ header|title }}</th>
59 {% endfor%}
60 </tr>
61 {% for item in experiments %}
62 <tr class="clickable-row" data-href="{% url 'url_experiment' item.id %}">
63 <td>{{ forloop.counter }}</td>
64 {% for key in experiment_keys %}
65 <td>{{ item|attr:key }}</td>
66 {% endfor %}
67 </tr>
68 {% endfor %}
69 </table>
70 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
71 </div>
72 </div>
73 </div>
74 </div>
75 {% endblock %}
76
77 {% block sidebar%}
78 {% include "sidebar_devices.html" %}
79 {% endblock %}
80
81 {% block extra-js%}
82 <script src="{% static 'js/moment.min.js' %}"></script>
83 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
84 <script type="text/javascript">
85 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
86
87 $("#bt_add").click(function() {
88 document.location = "{% url 'url_add_experiment' campaign.id%}";
89 });
90
91 $(".clickable-row").click(function() {
92 document.location = $(this).data("href");
93 });
94
95 </script>
96 {% endblock %} No newline at end of file
@@ -0,0 +1,35
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block camp-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <form class="form" method="post" action="">
16 {% csrf_token %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
18 <div style="clear: both;"></div>
19 <br>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
21 </form>
22 {% endblock %}
23
24 {% block sidebar%}
25 {% include "sidebar_devices.html" %}
26 {% endblock %}
27
28 {% block extra-js%}
29 <script src="{% static 'js/moment.min.js' %}"></script>
30 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
31 <script type="text/javascript">
32 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
33
34 </script>
35 {% endblock %} No newline at end of file
@@ -0,0 +1,54
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block camp-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <table class="table table-hover">
16 <tr>
17 <th>#</th>
18 {% for key in campaign_keys %}
19 <th>{{ key|title }}</th>
20 {% endfor%}
21 </tr>
22 {% for campaign in campaigns %}
23 <tr class="clickable-row" data-href="{% url 'url_campaign' campaign.id %}">
24 <td>{{ forloop.counter }}</td>
25 {% for key in campaign_keys %}
26 <td>{{ campaign|attr:key }}</td>
27 {% endfor %}
28 </tr>
29 {% endfor %}
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
33
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
37
38 {% block extra-js%}
39 <script src="{% static 'js/moment.min.js' %}"></script>
40 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
41 <script type="text/javascript">
42 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
43 $('.input-group.time').datetimepicker({"format": "HH:mm"});
44
45 $("#bt_add").click(function() {
46 document.location = "{% url 'url_add_campaign' %}";
47 });
48
49 $(".clickable-row").click(function() {
50 document.location = $(this).data("href");
51 });
52
53 </script>
54 {% endblock %} No newline at end of file
@@ -0,0 +1,34
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5
6 {% block conf-active %}active{% endblock %}
7
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
10
11 {% block content %}
12 <table class="table table-bordered">
13 {% for key in dev_conf_keys %}
14 <tr><th>{{key|title}}</th><td>{{dev_conf|attr:key}}</td></tr>
15 {% endfor %}
16 </table>
17 <button class="btn btn-primary pull-right" id="bt_edit_device">Edit Device Conf</button>
18 <br></br>
19 <br></br>
20 {% endblock %}
21
22 {% block sidebar%}
23 {% include "sidebar_devices.html" %}
24 {% endblock %}
25
26 {% block extra-js%}
27 <script type="text/javascript">
28
29 $("#bt_edit_device").click(function() {
30 document.location = "{% url 'url_edit_dev_conf' dev_conf.id%}";
31 });
32
33 </script>
34 {% endblock %} No newline at end of file
@@ -0,0 +1,54
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block conf-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <table class="table table-hover">
16 <tr>
17 <th>#</th>
18 {% for key in configuration_keys %}
19 <th>{{ key|title }}</th>
20 {% endfor%}
21 </tr>
22 {% for item in configurations %}
23 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
24 <td>{{ forloop.counter }}</td>
25 {% for key in configuration_keys %}
26 <td>{{ item|attr:key }}</td>
27 {% endfor %}
28 </tr>
29 {% endfor %}
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
33
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
37
38 {% block extra-js%}
39 <script src="{% static 'js/moment.min.js' %}"></script>
40 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
41 <script type="text/javascript">
42 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
43 $('.input-group.time').datetimepicker({"format": "HH:mm"});
44
45 $("#bt_add").click(function() {
46 document.location = "{% url 'url_add_dev_conf' 0%}";
47 });
48
49 $(".clickable-row").click(function() {
50 document.location = $(this).data("href");
51 });
52
53 </script>
54 {% endblock %} No newline at end of file
@@ -0,0 +1,29
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block dev-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <form class="form" method="post" action="">
16 {% csrf_token %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
18 <div style="clear: both;"></div>
19 <br>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
21 </form>
22 {% endblock %}
23
24 {% block sidebar%}
25 {% include "sidebar_devices.html" %}
26 {% endblock %}
27
28 {% block extra-js%}
29 {% endblock %} No newline at end of file
@@ -0,0 +1,54
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block dev-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <table class="table table-hover">
16 <tr>
17 <th>#</th>
18 {% for key in device_keys %}
19 <th>{{ key|title }}</th>
20 {% endfor%}
21 </tr>
22 {% for device in devices %}
23 <tr class="clickable-row" data-href="{% url 'url_device' device.id %}">
24 <td>{{ forloop.counter }}</td>
25 {% for key in device_keys %}
26 <td>{{ device|attr:key }}</td>
27 {% endfor %}
28 </tr>
29 {% endfor %}
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
33
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
37
38 {% block extra-js%}
39 <script src="{% static 'js/moment.min.js' %}"></script>
40 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
41 <script type="text/javascript">
42 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
43 $('.input-group.time').datetimepicker({"format": "HH:mm"});
44
45 $("#bt_add").click(function() {
46 document.location = "{% url 'url_add_device' %}";
47 });
48
49 $(".clickable-row").click(function() {
50 document.location = $(this).data("href");
51 });
52
53 </script>
54 {% endblock %} No newline at end of file
@@ -0,0 +1,167
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block exp-active %}active{% endblock %}
10
11 {% block content-title %}Experiment{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 {% if form_new %}
16 <form class="form" method="post" action="">
17 {% csrf_token %}
18 {% bootstrap_form form_new layout='horizontal' size='medium' %}
19 <div style="clear: both;"></div>
20 <br>
21 <button type="submit" class="btn btn-primary pull-right">Create</button>
22 </form>
23 {% elif experiment %}
24 <table class="table table-bordered">
25 {% for key in experiment_keys %}
26 <tr><th>{{key|title}}</th><td>{{experiment|attr:key}}</td></tr>
27 {% endfor %}
28 </table>
29 <hr>
30
31 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
32 <div class="panel panel-default">
33 <div class="panel-heading" role="tab" id="headingOne">
34 <h4 class="panel-title">
35 <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
36 Edit Experiment Details
37 </a>
38 </h4>
39 </div>
40 <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne">
41 <div class="panel-body">
42 <form class="form" method="post" action="{% url 'edit_experiment' id_exp %}">
43 {% csrf_token %}
44 {% bootstrap_form form layout='horizontal' size='medium' %}
45 <div style="clear: both;"></div>
46 <br>
47 <button type="submit" class="btn btn-primary pull-right" id="bt_update">Update</button>
48 </form>
49 </div>
50 </div>
51 </div>
52 <div class="panel panel-default">
53 <div class="panel-heading" role="tab" id="headingTwo">
54 <h4 class="panel-title">
55 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
56 Add Device to Experiment
57 </a>
58 </h4>
59 </div>
60 <div id="collapseTwo" class="panel-collapse collapse {%if id_dev_type%}in{%endif%}" role="tabpanel" aria-labelledby="headingTwo">
61 <div class="panel-body">
62 <form class="form" method="post" action="{% url 'experiment_add_device' id_exp %}">
63 {% csrf_token %}
64 {% bootstrap_form subform layout='horizontal' size='medium' %}
65 <div style="clear: both;"></div>
66 <br>
67 <table class="table">
68 <tr>
69 <th>#</th>
70 {% for header in keys %}
71 <th>{{ header|title }}</th>
72 {% endfor%}
73 </tr>
74 {% for item in items %}
75 <tr class="clickable-row" data-href="{%if base_url %}{{ base_url }}/{% endif %}{{ item.id }}">
76 <td>{{ forloop.counter }}</td>
77 {% for key in keys %}
78 <td>{{ item|attr:key }}</td>
79 {% endfor %}
80 <td>
81 <input type="hidden" id="id_device" name="device" value="{{item.id}}"></input>
82 <button type="submit" class="btn btn-primary btn-sm">Add</button>
83 </td>
84 </tr>
85 {% endfor %}
86 </table>
87 <br>
88 </form>
89 </div>
90 </div>
91 </div>
92 <div class="panel panel-default">
93 <div class="panel-heading" role="tab" id="headingThree">
94 <h4 class="panel-title">
95 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
96 Experiment's Devices
97 </a>
98 </h4>
99 </div>
100 <div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
101 <div class="panel-body">
102 <table class="table table-hover">
103 <tr>
104 <th>#</th>
105 {% for header in device_keys %}
106 <th>{{ header|title }}</th>
107 {% endfor%}
108 </tr>
109 {% for item in devices %}
110 <tr class="clickable-row" data-href="/{{item.device_type__alias}}/{{item.configuration__id}}/">
111 <td>{{ forloop.counter }}</td>
112 {% for key in device_keys %}
113 <td>{{ item|attr:key }}</td>
114 {% endfor %}
115 </tr>
116 {% endfor %}
117 </table>
118 </div>
119 </div>
120 </div>
121 </div>
122 {% else %}
123 <table class="table table-hover">
124 <tr>
125 <th>#</th>
126 {% for header in keys %}
127 <th>{{ header|title }}</th>
128 {% endfor%}
129 </tr>
130 {% for item in items %}
131 <tr class="clickable-row" data-href="{%if base_url %}{{ base_url }}/{% endif %}{{ item.id }}">
132 <td>{{ forloop.counter }}</td>
133 {% for key in keys %}
134 <td>{{ item|attr:key }}</td>
135 {% endfor %}
136 </tr>
137 {% endfor %}
138 </table>
139 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
140 {% endif %}
141
142 {% endblock %}
143
144 {% block sidebar%}
145 {% include "sidebar_devices.html" %}
146 {% endblock %}
147
148 {% block extra-js%}
149
150 <script src="{% static 'js/moment.min.js' %}"></script>
151 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
152 <script type="text/javascript">
153 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
154
155 $(".clickable-row").click(function() {
156 document.location = $(this).data("href");
157 });
158
159 $("#bt_add").click(function() {
160 document.location = "add";
161 });
162
163 $("#id_device_type").change(function() {
164 document.location = "{% url 'experiment' id_exp %}device/"+$(this).val();
165 });
166 </script>
167 {% endblock %} No newline at end of file
@@ -0,0 +1,35
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block exp-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <form class="form" method="post" action="">
16 {% csrf_token %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
18 <div style="clear: both;"></div>
19 <br>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
21 </form>
22 {% endblock %}
23
24 {% block sidebar%}
25 {% include "sidebar_devices.html" %}
26 {% endblock %}
27
28 {% block extra-js%}
29
30 <script src="{% static 'js/moment.min.js' %}"></script>
31 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
32 <script type="text/javascript">
33 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
34 </script>
35 {% endblock %} No newline at end of file
@@ -0,0 +1,54
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block exp-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <table class="table table-hover">
16 <tr>
17 <th>#</th>
18 {% for key in experiment_keys %}
19 <th>{{ key|title }}</th>
20 {% endfor%}
21 </tr>
22 {% for experiment in experiments %}
23 <tr class="clickable-row" data-href="{% url 'url_experiment' experiment.id %}">
24 <td>{{ forloop.counter }}</td>
25 {% for key in experiment_keys %}
26 <td>{{ experiment|attr:key }}</td>
27 {% endfor %}
28 </tr>
29 {% endfor %}
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
33
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
37
38 {% block extra-js%}
39
40 <script src="{% static 'js/moment.min.js' %}"></script>
41 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
42 <script type="text/javascript">
43 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
44
45 $(".clickable-row").click(function() {
46 document.location = $(this).data("href");
47 });
48
49 $("#bt_add").click(function() {
50 document.location = "{% url 'url_add_experiment' 0 %}";
51 });
52
53 </script>
54 {% endblock %} No newline at end of file
@@ -0,0 +1,25
1 from django.conf.urls import url
2
3 urlpatterns = (
4
5 url(r'^device/add/$', 'apps.main.views.add_device', name='url_add_device'),
6 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
7 url(r'^device/(?P<id_dev>-?\d+)/$', 'apps.main.views.device', name='url_device'),
8 url(r'^device/(?P<id_dev>-?\d+)/edit/$', 'apps.main.views.edit_device', name='url_edit_device'),
9
10 url(r'^campaign/add/$', 'apps.main.views.add_campaign', name='url_add_campaign'),
11 url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'),
12 url(r'^campaign/(?P<id_camp>-?\d+)/$', 'apps.main.views.campaign', name='url_campaign'),
13 url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.edit_campaign', name='url_edit_campaign'),
14
15 url(r'^campaign/(?P<id_camp>-?\d+)/add_experiment/$', 'apps.main.views.add_experiment', name='url_add_experiment'),
16 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
17 url(r'^experiment/(?P<id_exp>-?\d+)/$', 'apps.main.views.experiment', name='url_experiment'),
18 url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.edit_experiment', name='url_edit_experiment'),
19
20 url(r'^experiment/(?P<id_exp>-?\d+)/add_dev_conf/$', 'apps.main.views.add_dev_conf', name='url_add_dev_conf'),
21 url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'),
22 url(r'^dev_conf/(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'),
23 url(r'^dev_conf/(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_dev_conf'),
24
25 )
@@ -0,0 +1,8
1 from django import forms
2 from .models import RCConfiguration
3
4 class RCConfigurationForm(forms.ModelForm):
5
6 class Meta:
7 model = RCConfiguration
8 fields = ('experiment',)
@@ -0,0 +1,8
1 from django import forms
2 from .models import USRPConfiguration
3
4 class USRPConfigurationForm(forms.ModelForm):
5
6 class Meta:
7 model = USRPConfiguration
8 fields = ('device',)
@@ -1,5 +1,6
1 1 from django.conf.urls import url
2 2
3 3 urlpatterns = (
4
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_abs_conf'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_abs_conf'),
5 6 )
@@ -1,4 +1,5
1 1 from django import forms
2 from apps.main.models import Device
2 3 from .models import CGSConfiguration
3 4
4 5 class CGSConfigurationForm(forms.ModelForm):
@@ -7,16 +8,27 class CGSConfigurationForm(forms.ModelForm):
7 8 #request = kwargs.pop('request')
8 9 super(CGSConfigurationForm, self).__init__(*args, **kwargs)
9 10
10 def clean(self):
11 # Custom validation to force an integer when type of unit = "Unit"
12 form_data = self.cleaned_data
13 if (form_data['freq0'] or form_data['freq1'] or form_data['freq2'] or form_data['freq3'] < 0):
14 raise forms.ValidationError("Please introduce positive Number")
11 instance = getattr(self, 'instance', None)
12
13 if instance and instance.pk:
14
15 devices = Device.objects.filter(device_type__name='cgs')
16 items = devices.values('id', 'name', 'device_type__name', 'ip_address')
15 17
16 return form_data
18 self.fields['experiment'].widget.attrs['readonly'] = True
19 self.fields['device'].widget.choices = [(item['id'], '[%s]: %s | %s' % (item['device_type__name'], item['name'], item['ip_address'])) for item in items]
20
21 def clean(self):
22 return
23 # # Custom validation to force an integer when type of unit = "Unit"
24 # form_data = self.cleaned_data
25 # if (form_data['freq0'] or form_data['freq1'] or form_data['freq2'] or form_data['freq3'] < 0):
26 # raise forms.ValidationError("Please introduce positive Number")
27 #
28 # return form_data
17 29
18 30 class Meta:
19 31 model = CGSConfiguration
20 32 #exclude = ('freqs', 'clk_in', 'mult','div',)
21 33 # exclude = ('freqs',)
22 fields = ('freq0', 'freq1', 'freq2', 'freq3')
34 fields = ('experiment', 'device', 'freq0', 'freq1', 'freq2', 'freq3')
@@ -7,17 +7,13 from apps.main.models import Device
7 7 # Create your views here.
8 8
9 9 def configurate_frequencies(request, id=0):
10 kwargs = {}
11 if id:
12
13 conf = CGSConfiguration.objects.get(pk=id)
14 experiment = conf.experiment
15 10
11 if id:
16 12 conf = CGSConfiguration.objects.get(pk=id)
17 13 devices = Device.objects.filter(configuration__experiment=conf.experiment)
18 devices = devices.values('configuration__id', 'device_type__alias', 'device_type__name')
14 devices = devices.values('configuration__id', 'device_type__name')
19 15 for device in devices:
20 if device['device_type__alias']=='cgs':
16 if device['device_type__name']=='cgs':
21 17 device['active'] = 'active'
22 18 break
23 19
@@ -31,10 +27,13 def configurate_frequencies(request, id=0):
31 27 'device': device,
32 28 'devices':devices,
33 29 'title': ('YAP'),
34 'experiment': experiment,
30 'experiment': conf.experiment,
35 31
36 32 }
37 33
34 data['dev_conf'] = conf
35 data['dev_conf_keys'] = ['experiment', 'device']
36
38 37 if request.method == 'POST':
39 38 form = CGSConfigurationForm(request.POST) #, initial={'purchase_request':purchase_request})
40 39 if form.is_valid():
@@ -49,10 +48,6 def configurate_frequencies(request, id=0):
49 48 else:
50 49 form = CGSConfigurationForm()
51 50
52
53 return render_to_response('conf_cgs.html', data, context_instance=RequestContext(request))
54 #return render_to_response("index.html", kwargs, context_instance=RequestContext(request))
55 #return_to_response('index.html', {'title': 'Configura','form': form}, context_instance=RequestContext(request))
56
51 return render(request, 'cgs_conf.html', data)
57 52
58 53
@@ -1,24 +1,36
1 1 from django import forms
2 from apps.main.models import Device
2 3 from .models import DDSConfiguration
3 4
4 5 from django.core.validators import MinValueValidator, MaxValueValidator
5 6
6 7 class DDSConfigurationForm(forms.ModelForm):
7 8
8 freq0 = forms.FloatField(label='Frequency', validators=[MinValueValidator(0e6), MaxValueValidator(150e6)])
9 pha0 = forms.FloatField(label='Phase', validators=[MinValueValidator(0), MaxValueValidator(360)])
9 frequency = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)])
10 phase = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)])
10 11
11 freq1 = forms.FloatField(label='Modulated Frequency', validators=[MinValueValidator(5e6), MaxValueValidator(150e6)], required=False)
12 pha1 = forms.FloatField(label='Modulated Phase', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False)
12 frequency_mod = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], required=False)
13 phase_mod = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False)
13 14
14 15 def __init__(self, *args, **kwargs):
15 16 #request = kwargs.pop('request')
16 17 super(DDSConfigurationForm, self).__init__(*args, **kwargs)
17 18
19 instance = getattr(self, 'instance', None)
20
21 if instance and instance.pk:
22
23 devices = Device.objects.filter(device_type__name='dds')
24 items = devices.values('id', 'name', 'device_type__name', 'ip_address')
25
26 self.fields['experiment'].widget.attrs['readonly'] = True
27 self.fields['device'].widget.choices = [(item['id'], '[%s]: %s | %s' % (item['device_type__name'], item['name'], item['ip_address'])) for item in items]
28
29
18 30 def clean(self):
19 31 # Custom validation to force an integer when type of unit = "Unit"
20 32 return
21 33
22 34 class Meta:
23 35 model = DDSConfiguration
24 fields = ('clock', 'multiplier', 'modulation')
36 fields = ('experiment', 'device', 'clock', 'multiplier', 'modulation')
@@ -4,18 +4,28 from apps.main.models import Configuration
4 4
5 5 from django.core.validators import MinValueValidator, MaxValueValidator
6 6
7 MOD_TYPES = (
8 (None, 'Select a modulation type'),
9 (0, 'No modulation'),
10 (1, 'ASK'),
11 (2, 'FSK'),
12 (3, 'PSK'),
13 )
14
7 15 class DDSConfiguration(Configuration):
8 16
9 clock = models.FloatField(verbose_name='Clock Master',validators=[MinValueValidator(5e6), MaxValueValidator(50e6)], blank=True, null=True)
10 multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(0), MaxValueValidator(20)], default=4)
11 modulation = models.PositiveIntegerField(verbose_name='Modulation',validators=[MinValueValidator(0), MaxValueValidator(3)], default=0)
12 frequency0 = models.PositiveIntegerField(verbose_name='Frequency 0',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
13 frequency1 = models.PositiveIntegerField(verbose_name='Frequency 1',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
14 phase0 = models.PositiveIntegerField(verbose_name='Phase 0',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True)
15 phase1 = models.PositiveIntegerField(verbose_name='Phase 1',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True)
17 clock = models.FloatField(verbose_name='Clock Master (MHz)',validators=[MinValueValidator(5), MaxValueValidator(50)], blank=True, null=True)
18 multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4)
19 freq_reg = models.PositiveIntegerField(verbose_name='Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
20 phase_reg = models.PositiveIntegerField(verbose_name='Phase (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True)
21
16 22 amplitude_chA = models.PositiveIntegerField(verbose_name='Amplitude CHA',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
17 23 amplitude_chB = models.PositiveIntegerField(verbose_name='Amplitude CHB',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
18 24
25 modulation = models.PositiveIntegerField(choices = MOD_TYPES, default = 0)
26 freq_reg_mod = models.PositiveIntegerField(verbose_name='Frequency Mod (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
27 phase_reg_mod = models.PositiveIntegerField(verbose_name='Phase Mod (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True)
28
19 29 class Meta:
20 30 db_table = 'dds_configurations'
21 31 No newline at end of file
@@ -1,6 +1,6
1 1 from django.conf.urls import url
2 2
3 3 urlpatterns = (
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.dds.views.config_dds', name='url_conf_dds'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.dds.views.config_dds_edit', name='url_conf_dds_edit'),
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.dds.views.dds_conf', name='url_dds_conf'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.dds.views.edit_dds_conf', name='url_edit_dds_conf'),
6 6 )
@@ -2,56 +2,48
2 2
3 3 from django.shortcuts import redirect, render
4 4
5 from apps.main.models import Device
6 5 from .models import DDSConfiguration
7 6 from .forms import DDSConfigurationForm
8 7 # Create your views here.
9 8
10 def config_dds(request, id_conf):
9 def dds_conf(request, id_conf):
11 10
12 if id_conf:
11 dev_conf = DDSConfiguration.objects.get(pk=id_conf)
13 12
14 conf = DDSConfiguration.objects.get(pk=id_conf)
15 form = DDSConfigurationForm(instance=conf)
16 experiment = conf.experiment
13 kwargs = {}
14 kwargs['dev_conf'] = dev_conf
15 kwargs['dev_conf_keys'] = ['experiment', 'device',
16 'clock', 'multiplier',
17 'freq_reg', 'phase_reg',
18 'amplitude_chA', 'amplitude_chB',
19 'modulation',
20 'freq_reg_mod', 'phase_reg_mod']
17 21
18 devices = Device.objects.filter(configuration__experiment=experiment)
22 kwargs['title'] = 'DDS Configuration'
23 kwargs['suptitle'] = 'Details'
19 24
20 deviceList = devices.values('configuration__id', 'device_type__alias', 'device_type__name')
25 kwargs['button'] = 'Edit Configuration'
21 26
22 for thisDevice in deviceList:
23 if thisDevice['configuration__id'] == conf.id:
24 thisDevice['active'] = 'active'
25 break
27 return render(request, 'dds_conf.html', kwargs)
26 28
27 device = thisDevice
29 def edit_dds_conf(request, id_conf):
28 30
29 else:
30 form = DDSConfigurationForm()
31 device = ''
32 experiment = ''
33 devices = {}
31 dev_conf = DDSConfiguration.objects.get(pk=id_conf)
34 32
35 kwargs = {
36 'form': form,
37 'device': device,
38 'experiment': experiment,
39 'devices': deviceList
40 }
41
42 # return render_to_response('conf_dds.html', kwargs, context_instance=RequestContext(request))
43 return render(request, 'conf_dds.html', kwargs)
44
45 def config_dds_edit(request, id_conf):
33 if request.method=='GET':
34 form = DDSConfigurationForm(instance=dev_conf)
46 35
47 36 if request.method=='POST':
48
49 conf = DDSConfiguration.objects.get(pk=id_conf)
50 form = DDSConfigurationForm(instance=conf)
37 form = DDSConfigurationForm(request.POST, instance=dev_conf)
51 38
52 39 if form.is_valid():
53 40 form.save()
54 else:
55 raise ValueError, "Error"
41 return redirect('url_dds_conf', id_conf=id_conf)
42
43 kwargs = {}
44 kwargs['form'] = form
45 kwargs['title'] = 'Device Configuration'
46 kwargs['suptitle'] = 'Edit'
47 kwargs['button'] = 'Update'
56 48
57 return redirect('url_conf_dds', id_conf=id_conf) No newline at end of file
49 return render(request, 'dds_conf_edit.html', kwargs) No newline at end of file
@@ -8,7 +8,7 class JARSConfigurationForm(forms.ModelForm):
8 8 instance = getattr(self, 'instance', None)
9 9 if instance and instance.pk:
10 10 self.fields['experiment'].widget.attrs['disabled'] = True
11 self.fields['device'].widget.choices = [(item['id'], '%s %s | %s' % (item['device_type__alias'], item['model'], item['ip_address'])) for item in Device.objects.filter(device_type__alias='jars').values('id', 'device_type__alias', 'model', 'ip_address')]
11 self.fields['device'].widget.choices = [(item['id'], '%s | %s' % (item['device_type__name'], item['ip_address'])) for item in Device.objects.filter(device_type__name='jars').values('id', 'device_type__name', 'ip_address')]
12 12
13 13 class Meta:
14 14 model = JARSConfiguration
@@ -11,9 +11,9 def jars_config(request, id):
11 11 if id:
12 12 conf = JARSConfiguration.objects.get(pk=id)
13 13 devices = Device.objects.filter(configuration__experiment=conf.experiment)
14 devices = devices.values('configuration__id', 'device_type__alias', 'device_type__name')
14 devices = devices.values('configuration__id', 'device_type__name')
15 15 for device in devices:
16 if device['device_type__alias']=='jars':
16 if device['device_type__name']=='jars':
17 17 device['active'] = 'active'
18 18 form = JARSConfigurationForm(instance=conf)
19 19 else:
@@ -1,8 +1,8
1 1 from django.contrib import admin
2 from .models import Device, DeviceType, Experiment
2 from .models import Device, DeviceType, Experiment, Campaign
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) No newline at end of file
@@ -1,7 +1,7
1 1 from django import forms
2 2 from django.utils.safestring import mark_safe
3 3
4 from .models import DeviceType, Device, Experiment
4 from .models import DeviceType, Device, Experiment, Campaign, Configuration
5 5
6 6 def add_empty_choice(choices, pos=0, label='-----'):
7 7 if len(choices)>0:
@@ -17,21 +17,44 class DatepickerWidget(forms.widgets.TextInput):
17 17 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
18 18 return mark_safe(html)
19 19
20 class NewExperimentForm(forms.ModelForm):
20 class TimepickerWidget(forms.widgets.TextInput):
21 def render(self, name, value, attrs=None):
22 input_html = super(TimepickerWidget, self).render(name, value, attrs)
23 html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>'
24 return mark_safe(html)
25
26 class CampaignForm(forms.ModelForm):
21 27 def __init__(self, *args, **kwargs):
22 super(NewExperimentForm, self).__init__(*args, **kwargs)
28 super(CampaignForm, self).__init__(*args, **kwargs)
23 29 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
24 30 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
25 31
26 32 class Meta:
33 model = Campaign
34 fields = ['name', 'start_date', 'end_date', 'tags', 'description', 'template']
35
36 class ExperimentForm(forms.ModelForm):
37 def __init__(self, *args, **kwargs):
38 super(ExperimentForm, self).__init__(*args, **kwargs)
39 self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs)
40 self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs)
41
42 self.fields['campaign'].widget.attrs['readonly'] = True
43
44 class Meta:
27 45 model = Experiment
28 fields = ['name', 'alias', 'start_date', 'end_date']
46 fields = ['campaign', 'name', 'start_time', 'end_time']
29 47
30 class NewDeviceForm(forms.ModelForm):
48 class DeviceForm(forms.ModelForm):
31 49 class Meta:
32 50 model = Device
33 51 exclude = ['status']
34 52
53 class ConfigurationForm(forms.ModelForm):
54 class Meta:
55 model = Configuration
56 fields = ['experiment', 'device']
57
35 58 class DeviceTypeForm(forms.Form):
36 59 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
37 60
@@ -7,63 +7,89 STATES = (
7 7 (1, 'Active'),
8 8 )
9 9
10 DEV_TYPES = (
11 ('', 'Select a device type'),
12 ('rc', 'Radar Controller'),
13 ('dds', 'Direct Digital Synthesizer'),
14 ('jars', 'Jicamarca Radar System'),
15 ('usrp', 'Universal Software Radio Peripheral'),
16 ('cgs', 'Clock Generator System'),
17 ('abs', 'Automatic Beam Switching'),
18 )
19
10 20 # Create your models here.
11 21
12 22 class DeviceType(models.Model):
13 23
14 name = models.CharField(max_length=40)
15 alias = models.CharField(max_length=40)
16 info = models.TextField(blank=True, null=True)
17 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
24 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
25
26 description = models.TextField(blank=True, null=True)
27
28 # info = models.TextField(blank=True, null=True)
29 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
18 30
19 31 class Meta:
20 db_table = 'device_types'
32 db_table = 'db_device_types'
21 33
22 34 def __unicode__(self):
23 return u'%s' % self.alias
35 return u'%s' % self.name
24 36
25 37 class Device(models.Model):
26 38
27 39 device_type = models.ForeignKey(DeviceType)
28 40 name = models.CharField(max_length=40, default='')
29 model = models.CharField(max_length=40, default='')
30 serial_number = models.CharField(max_length=40, default='')
31 41 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
32 mac_address = models.CharField(max_length = 20, null=True, blank=True)
42 port_address = models.PositiveSmallIntegerField(default=2000)
33 43 description = models.TextField(blank=True, null=True)
34 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
44
45 # serial_number = models.CharField(max_length=40, default='')
46 # mac_address = models.CharField(max_length = 20, null=True, blank=True)
47 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
35 48
36 49 class Meta:
37 db_table = 'devices'
50 db_table = 'db_devices'
38 51
39 52 def __unicode__(self):
40 return u'%s - %s' % (self.device_type, self.ip_address)
53 return u'[%s]: %s | %s' % (self.device_type.name, self.name, self.ip_address)
41 54
42 class Experiment(models.Model):
55 class Campaign(models.Model):
43 56
44 name = models.CharField(max_length=40)
45 alias = models.CharField(max_length=40)
46 start_date = models.DateTimeField()
47 end_date = models.DateTimeField()
57 name = models.CharField(max_length=40, unique=True)
58 start_date = models.DateTimeField(blank=True, null=True)
59 end_date = models.DateTimeField(blank=True, null=True)
60 tags = models.CharField(max_length=40)
61 description = models.TextField(blank=True, null=True)
48 62 template = models.BooleanField(default=False)
49 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
50 63
51 64 class Meta:
52 db_table = 'experiments'
65 db_table = 'db_campaigns'
66
67 def __unicode__(self):
68 return u'%s: %s - %s' % (self.name, self.start_date.date(), self.end_date.date())
69
70 class Experiment(models.Model):
71
72 campaign = models.ForeignKey(Campaign)
73 name = models.CharField(max_length=40, default='')
74 start_time = models.TimeField(default='00:00:00')
75 end_time = models.TimeField(default='23:59:59')
76
77 class Meta:
78 db_table = 'db_experiments'
53 79
54 80 def __unicode__(self):
55 return u'%s: %s - %s' % (self.alias, self.start_date, self.end_date)
81 return u'[%s]: %s: %s - %s' % (self.campaign.name, self.name, self.start_time, self.end_time)
56 82
57 83 class Configuration(PolymorphicModel):
58 84
59 85 experiment = models.ForeignKey(Experiment)
60 86 device = models.ForeignKey(Device)
61 parameters = models.TextField(default='{}')
62 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
87 # parameters = models.TextField(default='{}')
88 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
63 89
64 90 class Meta:
65 db_table = 'configurations'
91 db_table = 'db_configurations'
66 92
67 93 def __unicode__(self):
68 return u'%s - %s' % (self.experiment.alias, self.device)
94 return u'%s [%s]' % (self.experiment.name, self.device.name)
69 95 No newline at end of file
@@ -37,9 +37,13
37 37 </div>
38 38 <div class="collapse navbar-collapse" id="navigationbar">
39 39 <ul class="nav navbar-nav">
40 <li class=" dropdown {% block exp-active %}{% endblock %}"><a href="{% url 'experiments'%}">Experiments</a>
40 <li class=" dropdown {% block camp-active %}{% endblock %}"><a href="{% url 'url_campaigns'%}">Campaigns</a>
41 41 </li>
42 <li class=" dropdown {% block dev-active %}{% endblock %}"><a href="{% url 'devices'%}">Devices</a>
42 <li class=" dropdown {% block exp-active %}{% endblock %}"><a href="{% url 'url_experiments'%}">Experiments</a>
43 </li>
44 <li class=" dropdown {% block dev-active %}{% endblock %}"><a href="{% url 'url_devices'%}">Devices</a>
45 </li>
46 <li class=" dropdown {% block conf-active %}{% endblock %}"><a href="{% url 'url_dev_confs'%}">Device Configurations</a>
43 47 </li>
44 48 </ul>
45 49 <ul class="nav navbar-nav navbar-right">
@@ -105,6 +109,7
105 109 {# bootstrap_javascript jquery=True #}
106 110 <script src="{% static 'js/jquery.min.js' %}"></script>
107 111 <script src="{% static 'js/bootstrap.min.js' %}"></script>
112
108 113 {% block extra-js %}
109 114 {% endblock%}
110 115 </body>
@@ -1,9 +1,12
1 1 {% extends "base.html" %}
2 2 {% load bootstrap3 %}
3 {% block mainactive %}active{% endblock %}
3 {% load static %}
4 {% load main_tags %}
4 5
5 {% block content-title %}{{experiment.alias}}{% endblock %}
6 {% block content-suptitle %}{{device.device_type__name}}{% endblock %}
6 {% block conf-active %}active{% endblock %}
7
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
7 10
8 11 {% block content %}
9 12 <form class="form" method="post" action="">
@@ -11,10 +14,13
11 14 {% bootstrap_form form layout='horizontal' size='medium' %}
12 15 <div style="clear: both;"></div>
13 16 <br>
14 <button type="submit" class="btn btn-primary pull-right" id="bt_update">Send</button>
17 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
15 18 </form>
16 19 {% endblock %}
17 20
18 21 {% block sidebar%}
19 22 {% include "sidebar_devices.html" %}
20 23 {% endblock %}
24
25 {% block extra-js%}
26 {% endblock %} No newline at end of file
@@ -5,49 +5,32
5 5
6 6 {% block dev-active %}active{% endblock %}
7 7
8 {% block content-title %}Device{% endblock %}
8 {% block content-title %}{{title}}{% endblock %}
9 9 {% block content-suptitle %}{{suptitle}}{% endblock %}
10 10
11 11 {% block content %}
12
13 {% if form %}
14 <form class="form" method="post" action="{{action}}">
15 {% csrf_token %}
16 {% bootstrap_form form layout='horizontal' size='medium' %}
17 <div style="clear: both;"></div>
18 <br>
19 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
20 </form>
21 {% else %}
22 <table class="table table-hover">
23 <tr>
24 <th>#</th>
25 {% for header in keys %}
26 <th>{{ header|title }}</th>
27 {% endfor%}
28 </tr>
29 {% for item in items %}
30 <tr class="clickable-row" data-href="{%if base_url %}{{ base_url }}/{% endif %}{{ item.id }}">
31 <td>{{ forloop.counter }}</td>
32 {% for key in keys %}
33 <td>{{ item|attr:key }}</td>
34 {% endfor %}
35 </tr>
12 <table class="table table-bordered">
13 {% for key in device_keys %}
14 <tr><th>{{key|title}}</th><td>{{device|attr:key}}</td></tr>
36 15 {% endfor %}
37 16 </table>
38 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
39 {% endif %}
17 <button class="btn btn-primary pull-right" id="bt_edit_device">Edit Device</button>
18 <br></br>
19 <br></br>
20 {% endblock %}
40 21
22 {% block sidebar%}
23 {% include "sidebar_devices.html" %}
41 24 {% endblock %}
42 25
43 26 {% block extra-js%}
27 <script src="{% static 'js/moment.min.js' %}"></script>
28 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
44 29 <script type="text/javascript">
45 $(".clickable-row").click(function() {
46 document.location = $(this).data("href");
47 });
48 30
49 $("#bt_add").click(function() {
50 document.location = "add/";
31 $("#bt_edit_device").click(function() {
32 document.location = "{% url 'url_edit_device' device.id%}";
51 33 });
34
52 35 </script>
53 36 {% endblock %} No newline at end of file
@@ -8,134 +8,52
8 8
9 9 {% block exp-active %}active{% endblock %}
10 10
11 {% block content-title %}Experiment{% endblock %}
11 {% block content-title %}{{title}}{% endblock %}
12 12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13 13
14 14 {% block content %}
15 {% if form_new %}
16 <form class="form" method="post" action="">
17 {% csrf_token %}
18 {% bootstrap_form form_new layout='horizontal' size='medium' %}
19 <div style="clear: both;"></div>
20 <br>
21 <button type="submit" class="btn btn-primary pull-right">Create</button>
22 </form>
23 {% elif experiment %}
24 15 <table class="table table-bordered">
25 16 {% for key in experiment_keys %}
26 17 <tr><th>{{key|title}}</th><td>{{experiment|attr:key}}</td></tr>
27 18 {% endfor %}
28 19 </table>
29 <hr>
20 <button class="btn btn-primary pull-right" id="bt_edit_experiment">Edit Experiment</button>
21 <br></br>
22 <br></br>
30 23
31 24 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
32 <div class="panel panel-default">
33 <div class="panel-heading" role="tab" id="headingOne">
34 <h4 class="panel-title">
35 <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
36 Edit Experiment Details
37 </a>
38 </h4>
39 </div>
40 <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne">
41 <div class="panel-body">
42 <form class="form" method="post" action="{% url 'edit_experiment' id_exp %}">
43 {% csrf_token %}
44 {% bootstrap_form form layout='horizontal' size='medium' %}
45 <div style="clear: both;"></div>
46 <br>
47 <button type="submit" class="btn btn-primary pull-right" id="bt_update">Update</button>
48 </form>
49 </div>
50 </div>
51 </div>
25
52 26 <div class="panel panel-default">
53 27 <div class="panel-heading" role="tab" id="headingTwo">
54 28 <h4 class="panel-title">
55 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
56 Add Device to Experiment
57 </a>
58 </h4>
59 </div>
60 <div id="collapseTwo" class="panel-collapse collapse {%if id_dev_type%}in{%endif%}" role="tabpanel" aria-labelledby="headingTwo">
61 <div class="panel-body">
62 <form class="form" method="post" action="{% url 'experiment_add_device' id_exp %}">
63 {% csrf_token %}
64 {% bootstrap_form subform layout='horizontal' size='medium' %}
65 <div style="clear: both;"></div>
66 <br>
67 <table class="table">
68 <tr>
69 <th>#</th>
70 {% for header in keys %}
71 <th>{{ header|title }}</th>
72 {% endfor%}
73 </tr>
74 {% for item in items %}
75 <tr class="clickable-row" data-href="{%if base_url %}{{ base_url }}/{% endif %}{{ item.id }}">
76 <td>{{ forloop.counter }}</td>
77 {% for key in keys %}
78 <td>{{ item|attr:key }}</td>
79 {% endfor %}
80 <td><input type="hidden" id="id_device" name="device" value="{{item.id}}"></input><button type="submit" class="btn btn-primary btn-sm">Add</button></td>
81 </tr>
82 {% endfor %}
83 </table>
84 <br>
85 </form>
86 </div>
87 </div>
88 </div>
89 <div class="panel panel-default">
90 <div class="panel-heading" role="tab" id="headingThree">
91 <h4 class="panel-title">
92 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
29 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseThree">
93 30 Experiment's Devices
94 31 </a>
95 32 </h4>
96 33 </div>
97 <div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
34 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
98 35 <div class="panel-body">
99 36 <table class="table table-hover">
100 37 <tr>
101 38 <th>#</th>
102 {% for header in device_keys %}
103 <th>{{ header|title }}</th>
39 {% for key in configuration_keys %}
40 <th>{{ key|title }}</th>
104 41 {% endfor%}
105 42 </tr>
106 {% for item in devices %}
107 <tr class="clickable-row" data-href="/{{item.device_type__alias}}/{{item.configuration__id}}/">
43 {% for item in configurations %}
44 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
108 45 <td>{{ forloop.counter }}</td>
109 {% for key in device_keys %}
46 {% for key in configuration_keys %}
110 47 <td>{{ item|attr:key }}</td>
111 48 {% endfor %}
112 49 </tr>
113 50 {% endfor %}
114 51 </table>
52 <button class="btn btn-primary pull-right" id="bt_add_conf">{{button}}</button>
115 53 </div>
116 54 </div>
117 55 </div>
118 56 </div>
119 {% else %}
120 <table class="table table-hover">
121 <tr>
122 <th>#</th>
123 {% for header in keys %}
124 <th>{{ header|title }}</th>
125 {% endfor%}
126 </tr>
127 {% for item in items %}
128 <tr class="clickable-row" data-href="{%if base_url %}{{ base_url }}/{% endif %}{{ item.id }}">
129 <td>{{ forloop.counter }}</td>
130 {% for key in keys %}
131 <td>{{ item|attr:key }}</td>
132 {% endfor %}
133 </tr>
134 {% endfor %}
135 </table>
136 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
137 {% endif %}
138
139 57 {% endblock %}
140 58
141 59 {% block sidebar%}
@@ -153,12 +71,13
153 71 document.location = $(this).data("href");
154 72 });
155 73
156 $("#bt_add").click(function() {
157 document.location = "add";
74 $("#bt_edit_experiment").click(function() {
75 document.location = "{% url 'url_edit_experiment' experiment.id%}";
158 76 });
159 77
160 $("#id_device_type").change(function() {
161 document.location = "{% url 'experiment' id_exp %}device/"+$(this).val();
78 $("#bt_add_conf").click(function() {
79 document.location = "{% url 'url_add_dev_conf' experiment.id%}";
162 80 });
81
163 82 </script>
164 83 {% endblock %} No newline at end of file
@@ -4,7 +4,7
4 4 <h3>Experiment</h3>
5 5 </div>
6 6 <div class="list-group">
7 <a href="{% url 'experiment' experiment.id %}" class="list-group-item active" >{{ experiment.alias }}</a>
7 <a href="{% url 'url_experiment' experiment.id %}" class="list-group-item active" >{{ experiment.name }}</a>
8 8 </div>
9 9 </div>
10 10 {% endif %}
@@ -16,7 +16,7
16 16 </div>
17 17 <div class="list-group">
18 18 {% for item in devices %}
19 <a href="/{{item.device_type__alias}}/{{item.configuration__id}}/" class="list-group-item {{item.active}}">{{item.device_type__alias}}</a>
19 <a href="/{{item.device_type__name}}/{{item.configuration__id}}/" class="list-group-item {{item.active}}">{{item.device_type__alias}}</a>
20 20 {% endfor %}
21 21 </div>
22 22 </div>
This diff has been collapsed as it changes many lines, (517 lines changed) Show them Hide them
@@ -1,133 +1,494
1 from django.shortcuts import redirect, render_to_response
2 from django.template import RequestContext
3 from .forms import NewExperimentForm, NewDeviceForm, DeviceTypeForm
1 from django.shortcuts import render, redirect
4 2
5 from .models import Experiment, Device, Configuration
3 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm
4 from apps.cgs.forms import CGSConfigurationForm
5 from apps.jars.forms import JARSConfigurationForm
6 from apps.usrp.forms import USRPConfigurationForm
7 from apps.abs.forms import ABSConfigurationForm
8 from apps.rc.forms import RCConfigurationForm
9 from apps.dds.forms import DDSConfigurationForm
10
11 from .models import Campaign, Experiment, Device, Configuration
6 12 from apps.cgs.models import CGSConfiguration
7 13 from apps.jars.models import JARSConfiguration
8 #from apps.usrp.models import USRPConfiguration
14 from apps.usrp.models import USRPConfiguration
9 15 from apps.abs.models import ABSConfiguration
10 16 from apps.rc.models import RCConfiguration
11 17 from apps.dds.models import DDSConfiguration
12 18
13 19 # Create your views here.
14 20
15 MODELS = {
21 CONF_FORMS = {
22 'rc': RCConfigurationForm,
23 'dds': DDSConfigurationForm,
24 'jars': JARSConfigurationForm,
25 'cgs': CGSConfigurationForm,
26 'abs': ABSConfigurationForm,
27 'usrp': USRPConfigurationForm,
28 }
29
30 CONF_MODELS = {
16 31 'rc': RCConfiguration,
17 32 'dds': DDSConfiguration,
18 33 'jars': JARSConfiguration,
19 34 'cgs': CGSConfiguration,
20 35 'abs': ABSConfiguration,
36 'usrp': USRPConfiguration,
21 37 }
22 38
23 39 def index(request):
24 40 kwargs = {}
25 41
26 return render_to_response("index.html", kwargs, context_instance=RequestContext(request))
42 return render(request, 'index.html', kwargs)
43
44 def devices(request):
45
46 devices = Device.objects.all().order_by('device_type__name')
47
48 keys = ['id', 'device_type__name', 'name', 'ip_address']
27 49
28 def experiment(request, id_exp=0, id_dev_type=0):
29 50 kwargs = {}
30 if id_exp:
31 experiment = Experiment.objects.get(pk=id_exp)
32 devices = Device.objects.filter(configuration__experiment=experiment)
33 kwargs['experiment'] = experiment
34 kwargs['experiment_keys'] = ['name', 'alias', 'start_date', 'end_date']
51 kwargs['device_keys'] = keys[1:]
52 kwargs['devices'] = devices.values(*keys)
53 kwargs['title'] = 'Device'
54 kwargs['suptitle'] = 'List'
55 kwargs['button'] = 'New Device'
56
57 return render(request, 'devices.html', kwargs)
58
59 def device(request, id_dev):
60
61 device = Device.objects.get(pk=id_dev)
62
63 # form = DeviceForm(instance=device)
64
65 kwargs = {}
66 kwargs['device'] = device
67 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
68
69 kwargs['title'] = 'Device'
70 kwargs['suptitle'] = 'Details'
71
72 # kwargs['form'] = form
73 kwargs['button'] = 'Add Device'
74
75 return render(request, 'device.html', kwargs)
76
77 def add_device(request):
35 78
36 form = NewExperimentForm(instance=experiment)
79 if request.method == 'GET':
80 form = DeviceForm()
37 81
38 if id_dev_type:
39 subform = DeviceTypeForm(initial={'device_type':id_dev_type})
40 kwargs['keys'] = ['model', 'ip_address', 'status']
41 keys = ['id']+kwargs['keys']
42 kwargs['items'] = Device.objects.filter(device_type=id_dev_type).values(*keys)
43 else:
44 subform = DeviceTypeForm()
82 if request.method == 'POST':
83 form = DeviceForm(request.POST)
45 84
85 if form.is_valid():
86 form.save()
87 return redirect('url_devices')
88
89 kwargs = {}
46 90 kwargs['form'] = form
47 kwargs['subform'] = subform
48 kwargs['device_keys'] = ['device_type__name', 'model', 'ip_address', 'status']
49 kwargs['devices'] = devices.values('device_type__name', 'model', 'ip_address', 'status', 'device_type__alias', 'configuration__id')
50 kwargs['suptitle'] = 'Detail'
51 else:
52 experiments = Experiment.objects.all().order_by('start_date')
53 kwargs['keys'] = ['name', 'start_date', 'end_date']
54 keys = ['id']+kwargs['keys']
55 kwargs['items'] = experiments.values(*keys)
91 kwargs['title'] = 'Device'
92 kwargs['suptitle'] = 'New'
93 kwargs['button'] = 'Create'
94
95 return render(request, 'device_edit.html', kwargs)
96
97 def edit_device(request, id_dev):
98
99 device = Device.objects.get(pk=id_dev)
100
101 if request.method=='GET':
102 form = DeviceForm(instance=device)
103
104 if request.method=='POST':
105 form = DeviceForm(request.POST, instance=device)
106
107 if form.is_valid():
108 form.save()
109 return redirect('url_devices')
110
111 kwargs = {}
112 kwargs['form'] = form
113 kwargs['title'] = 'Device'
114 kwargs['suptitle'] = 'Edit'
115 kwargs['button'] = 'Update'
116
117 return render(request, 'device_edit.html', kwargs)
118
119 def campaigns(request):
120
121 campaigns = Campaign.objects.all().order_by('start_date')
122
123 keys = ['id', 'name', 'start_date', 'end_date']
124
125 kwargs = {}
126 kwargs['campaign_keys'] = keys[1:]
127 kwargs['campaigns'] = campaigns.values(*keys)
128 kwargs['title'] = 'Campaign'
56 129 kwargs['suptitle'] = 'List'
130 kwargs['button'] = 'New Campaign'
131
132 return render(request, 'campaigns.html', kwargs)
133
134 def campaign(request, id_camp):
135
136 campaign = Campaign.objects.get(pk=id_camp)
137 experiments = Experiment.objects.filter(campaign=campaign)
138
139 form = CampaignForm(instance=campaign)
140
141 kwargs = {}
142 kwargs['campaign'] = campaign
143 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
144
145 keys = ['id', 'name', 'start_time', 'end_time']
146
147 kwargs['experiment_keys'] = keys[1:]
148 kwargs['experiments'] = experiments.values(*keys)
149
150 kwargs['title'] = 'Campaign'
151 kwargs['suptitle'] = 'Details'
152
153 kwargs['form'] = form
57 154 kwargs['button'] = 'Add Experiment'
58 155
59 kwargs['id_dev_type'] = id_dev_type
60 kwargs['id_exp'] = id_exp
61 return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
156 return render(request, 'campaign.html', kwargs)
157
158 def add_campaign(request):
159
160 if request.method == 'GET':
161 form = CampaignForm()
62 162
63 def edit_experiment(request, id_exp):
64 163 if request.method=='POST':
65 experiment = Experiment.objects.get(pk=id_exp)
66 form = NewExperimentForm(request.POST, instance=experiment)
164 form = CampaignForm(request.POST)
165
67 166 if form.is_valid():
68 form.save()
69 return redirect('experiment', id_exp=id_exp)
167 campaign = form.save()
168 return redirect('url_campaign', id_camp=campaign.id)
169
170 kwargs = {}
171 kwargs['form'] = form
172 kwargs['title'] = 'Campaign'
173 kwargs['suptitle'] = 'New'
174 kwargs['button'] = 'Create'
175
176 return render(request, 'campaign_edit.html', kwargs)
177
178 def edit_campaign(request, id_camp):
179
180 campaign = Campaign.objects.get(pk=id_camp)
181
182 if request.method=='GET':
183 form = CampaignForm(instance=campaign)
70 184
71 def experiment_add_device(request, id_exp):
72 185 if request.method=='POST':
186 form = CampaignForm(request.POST, instance=campaign)
187
188 if form.is_valid():
189 form.save()
190 return redirect('url_campaign', id_camp=id_camp)
191
192 kwargs = {}
193 kwargs['form'] = form
194 kwargs['title'] = 'Campaign'
195 kwargs['suptitle'] = 'Edit'
196 kwargs['button'] = 'Update'
197
198 return render(request, 'campaign_edit.html', kwargs)
199
200 def experiments(request):
201
202 campaigns = Experiment.objects.all().order_by('start_time')
203
204 keys = ['id', 'campaign__name', 'name', 'start_time', 'end_time']
205
206 kwargs = {}
207
208 kwargs['experiment_keys'] = keys[1:]
209 kwargs['experiments'] = campaigns.values(*keys)
210
211 kwargs['title'] = 'Experiment'
212 kwargs['suptitle'] = 'List'
213 kwargs['button'] = 'New Experiment'
214
215 return render(request, 'experiments.html', kwargs)
216
217 def experiment(request, id_exp):
218
73 219 experiment = Experiment.objects.get(pk=id_exp)
74 device = Device.objects.get(pk=request.POST['device'])
75 model = MODELS[device.device_type.alias]
76 conf = model(experiment=experiment, device=device)
77 conf.save()
78 return redirect('experiment', id_exp=id_exp)
220 campaign = Campaign.objects.get(pk = experiment.campaign.id)
221 configurations = Configuration.objects.filter(experiment=experiment)
222
223 # form = ExperimentForm(instance=experiment)
79 224
80 def add_experiment(request):
81 225 kwargs = {}
226
227 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
228 kwargs['campaign'] = campaign
229
230 kwargs['experiment_keys'] = ['campaign', 'name', 'start_time', 'end_time']
231 kwargs['experiment'] = experiment
232
233 keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
234
235 kwargs['configuration_keys'] = keys[1:]
236 kwargs['configurations'] = configurations.values(*keys)
237
238 kwargs['title'] = 'Experiment'
239 kwargs['suptitle'] = 'Details'
240
241 # kwargs['form'] = form
242 kwargs['button'] = 'Add Device'
243
244 return render(request, 'experiment.html', kwargs)
245
246 def add_experiment(request, id_camp=0):
247
248 if request.method == 'GET':
249 form = ExperimentForm(initial={'campaign':id_camp})
250
82 251 if request.method == 'POST':
83 form = NewExperimentForm(request.POST)
252 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
253
84 254 if form.is_valid():
85 255 experiment = form.save()
86 return redirect('experiment', id_exp=experiment.id)
87 else:
88 form = NewExperimentForm()
89 kwargs['form_new'] = form
256 return redirect('url_experiment', id_exp=experiment.id)
257
258 kwargs = {}
259 kwargs['form'] = form
90 260 kwargs['title'] = 'Experiment'
91 261 kwargs['suptitle'] = 'New'
92 kwargs['id_exp'] = 0
93 return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
262 kwargs['button'] = 'Create'
263
264 return render(request, 'experiment_edit.html', kwargs)
265
266 def edit_experiment(request, id_exp):
267
268 experiment = Experiment.objects.get(pk=id_exp)
269
270 if request.method == 'GET':
271 form = ExperimentForm(instance=experiment)
272
273 if request.method=='POST':
274 form = ExperimentForm(request.POST, instance=experiment)
275
276 if form.is_valid():
277 experiment = form.save()
278 return redirect('url_experiment', id_exp=experiment.id)
94 279
95 def device(request, id_dev=0):
96 280 kwargs = {}
97 if id_dev:
98 device = Device.objects.get(pk=id_dev)
99 kwargs['form'] = NewDeviceForm(instance=device)
100 kwargs['action'] = 'edit/'
281 kwargs['form'] = form
282 kwargs['title'] = 'Experiment'
283 kwargs['suptitle'] = 'Edit'
101 284 kwargs['button'] = 'Update'
102 kwargs['suptitle'] = 'Detail'
103 else:
104 devices = Device.objects.all()
105 kwargs['keys'] = ['device_type__name', 'model', 'serial_number', 'ip_address', 'status']
106 keys = ['id']+kwargs['keys']
107 kwargs['items'] = devices.values(*keys)
285
286 return render(request, 'experiment_edit.html', kwargs)
287
288 def dev_confs(request):
289
290 configurations = Configuration.objects.all().order_by('device__device_type')
291
292 keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
293
294 kwargs = {}
295
296 kwargs['configuration_keys'] = keys[1:]
297 kwargs['configurations'] = configurations.values(*keys)
298
299 kwargs['title'] = 'Configurations'
108 300 kwargs['suptitle'] = 'List'
109 kwargs['button'] = 'Add Device'
110 return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
301 kwargs['button'] = 'New Configuration'
302
303 return render(request, 'dev_confs.html', kwargs)
304
305 def dev_conf(request, id_conf):
306
307 conf = Configuration.objects.get(pk=id_conf)
308
309 DevConfModel = CONF_MODELS[conf.device.device_type.name]
310 dev_conf = DevConfModel.objects.get(pk=id_conf)
311
312 kwargs = {}
313 kwargs['dev_conf'] = dev_conf
314 kwargs['dev_conf_keys'] = ['experiment', 'device']
315
316 kwargs['title'] = 'Configuration'
317 kwargs['suptitle'] = 'Details'
318
319 kwargs['button'] = 'Edit Configuration'
320
321 return render(request, 'dev_conf.html', kwargs)
322
323 def add_dev_conf(request, id_exp=0):
324
325 if request.method == 'GET':
326 form = ConfigurationForm(initial={'experiment':id_exp})
111 327
112 def edit_device(request, id_dev):
113 328 if request.method=='POST':
114 device = Device.objects.get(pk=id_dev)
115 form = NewDeviceForm(request.POST, instance=device)
329 form = ConfigurationForm(request.POST)
330
116 331 if form.is_valid():
117 form.save()
118 return redirect('devices')
332 experiment = Experiment.objects.get(pk=request.POST['experiment'])
333 device = Device.objects.get(pk=request.POST['device'])
334
335 exp_devices = Device.objects.filter(configuration__experiment=experiment)
336
337 if device.id not in exp_devices.values('id',):
338
339 DevConfModel = CONF_MODELS[device.device_type.name]
340 conf = DevConfModel(experiment=experiment, device=device)
341 conf.save()
342
343 return redirect('url_experiment', id_exp=experiment.id)
119 344
120 def add_device(request):
121 345 kwargs = {}
346 kwargs['form'] = form
347 kwargs['title'] = 'Configuration'
348 kwargs['suptitle'] = 'New'
349 kwargs['button'] = 'Create'
350
351 return render(request, 'dev_conf_edit.html', kwargs)
352
353 def edit_dev_conf(request, id_conf):
354
355 conf = Configuration.objects.get(pk=id_conf)
356
357 DevConfModel = CONF_MODELS[conf.device.device_type.name]
358 DevConfForm = CONF_FORMS[conf.device.device_type.name]
359
360 dev_conf = DevConfModel.objects.get(pk=id_conf)
361
362 if request.method=='GET':
363 form = DevConfForm(instance=dev_conf)
364
122 365 if request.method == 'POST':
123 form = NewDeviceForm(request.POST)
366 form = DevConfForm(request.POST, instance=dev_conf)
367
124 368 if form.is_valid():
125 369 form.save()
126 return redirect('devices')
127 else:
128 form = NewDeviceForm()
370 return redirect('url_dev_conf', id_conf=id_conf)
371
372 kwargs = {}
129 373 kwargs['form'] = form
130 kwargs['button'] = 'Create'
131 kwargs['suptitle'] = 'New'
132 return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
374 kwargs['title'] = 'Device Configuration'
375 kwargs['suptitle'] = 'Edit'
376 kwargs['button'] = 'Update'
377
378 return render(request, 'dev_conf_edit.html', kwargs)
379
380
381 # def experiment(request, id_exp=0, id_dev_type=0):
382 # kwargs = {}
383 # if id_exp:
384 # experiment = Experiment.objects.get(pk=id_exp)
385 # devices = Configuration.objects.filter(configuration__experiment=experiment)
386 # kwargs['experiment'] = experiment
387 # kwargs['experiment_keys'] = ['campaign', 'name', 'start_time', 'end_time']
388 #
389 # form = ExperimentForm(instance=experiment)
390 #
391 # if id_dev_type:
392 # subform = DeviceTypeForm(initial={'device_type':id_dev_type})
393 # kwargs['keys'] = ['ip_address']
394 # keys = ['id']+kwargs['keys']
395 # kwargs['items'] = Device.objects.filter(device_type=id_dev_type).values(*keys)
396 # else:
397 # subform = DeviceTypeForm()
398 #
399 # kwargs['form'] = form
400 # kwargs['subform'] = subform
401 # kwargs['device_keys'] = ['device_type__name', 'ip_address']
402 # kwargs['devices'] = devices.values('device_type__name', 'ip_address', 'configuration__id')
403 # kwargs['suptitle'] = 'Detail'
404 # else:
405 # experiments = Experiment.objects.all().order_by('start_time')
406 # kwargs['keys'] = ['name', 'start_time', 'end_time']
407 # keys = ['id']+kwargs['keys']
408 # kwargs['items'] = experiments.values(*keys)
409 # kwargs['suptitle'] = 'List'
410 # kwargs['button'] = 'Add Experiment'
411 #
412 # kwargs['id_dev_type'] = id_dev_type
413 # kwargs['id_exp'] = id_exp
414 # return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
415
416 # def edit_experiment(request, id_exp):
417 # if request.method=='POST':
418 # experiment = Experiment.objects.get(pk=id_exp)
419 # form = ExperimentForm(request.POST, instance=experiment)
420 # if form.is_valid():
421 # form.save()
422 # return redirect('experiment', id_exp=id_exp)
423
424 # def experiment_add_device(request, id_exp):
425 # if request.method=='POST':
426 # experiment = Experiment.objects.get(pk=id_exp)
427 #
428 # exp_devices = Device.objects.filter(configuration__experiment=experiment)
429 #
430 # device = Device.objects.get(pk=request.POST['device'])
431 #
432 # if device.id in exp_devices.values('id',):
433 # return redirect('experiment', id_exp=id_exp)
434 #
435 # model = MODELS[device.device_type.alias]
436 # conf = model(experiment=experiment, device=device)
437 # conf.save()
438 # return redirect('experiment', id_exp=id_exp)
439
440 # def add_experiment(request):
441 #
442 # kwargs = {}
443 # if request.method == 'POST':
444 # form = ExperimentForm(request.POST)
445 # if form.is_valid():
446 # experiment = form.save()
447 # return redirect('experiment', id_exp=experiment.id)
448 # else:
449 # form = ExperimentForm()
450 # kwargs['form_new'] = form
451 # kwargs['title'] = 'Experiment'
452 # kwargs['suptitle'] = 'New'
453 # kwargs['id_exp'] = 0
454 # return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
455
456 # def device(request, id_dev=0):
457 # kwargs = {}
458 # if id_dev:
459 # device = Device.objects.get(pk=id_dev)
460 # kwargs['form'] = DeviceForm(instance=device)
461 # kwargs['action'] = 'edit/'
462 # kwargs['button'] = 'Update'
463 # kwargs['suptitle'] = 'Detail'
464 # else:
465 # devices = Device.objects.all()
466 # kwargs['keys'] = ['device_type__name', 'ip_address']
467 # keys = ['id']+kwargs['keys']
468 # kwargs['items'] = devices.values(*keys)
469 # kwargs['suptitle'] = 'List'
470 # kwargs['button'] = 'Add Device'
471 # return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
472 #
473 # def edit_device(request, id_dev):
474 # if request.method=='POST':
475 # device = Device.objects.get(pk=id_dev)
476 # form = DeviceForm(request.POST, instance=device)
477 # if form.is_valid():
478 # form.save()
479 # return redirect('devices')
480 #
481 # def add_device(request):
482 # kwargs = {}
483 # if request.method == 'POST':
484 # form = DeviceForm(request.POST)
485 # if form.is_valid():
486 # form.save()
487 # return redirect('devices')
488 # else:
489 # form = DeviceForm()
490 # kwargs['form'] = form
491 # kwargs['button'] = 'Create'
492 # kwargs['suptitle'] = 'New'
493 # return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
133 494
@@ -1,5 +1,6
1 1 from django.conf.urls import url
2 2
3 3 urlpatterns = (
4
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_rc_conf'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_rc_conf'),
5 6 )
@@ -1,3 +1,9
1 1 from django.db import models
2
2 from apps.main.models import Configuration
3 3 # Create your models here.
4
5 class USRPConfiguration(Configuration):
6
7
8 class Meta:
9 db_table = 'usrp_configurations' No newline at end of file
@@ -1,5 +1,6
1 1 from django.conf.urls import url
2 2
3 3 urlpatterns = (
4
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_usrp_conf'),
5 url(r'^(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_usrp_conf'),
5 6 )
@@ -18,18 +18,9 from django.contrib import admin
18 18
19 19 urlpatterns = [
20 20 url(r'^$', 'apps.main.views.index', name='index'),
21 url(r'^experiment/$', 'apps.main.views.experiment', name='experiments'),
22 url(r'^experiment/add/$', 'apps.main.views.add_experiment', name='add_experiment'),
23 url(r'^experiment/(?P<id_exp>-?\d+)/$', 'apps.main.views.experiment', name='experiment'),
24 url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.edit_experiment', name='edit_experiment'),
25 url(r'^experiment/(?P<id_exp>-?\d+)/device/(?P<id_dev_type>-?\d+)/$', 'apps.main.views.experiment', name='experiment_device'),
26 url(r'^experiment/(?P<id_exp>-?\d+)/add_device/$', 'apps.main.views.experiment_add_device', name='experiment_add_device'),
27 url(r'^device/$', 'apps.main.views.device', name='devices'),
28 url(r'^device/(?P<id_dev>-?\d+)/$', 'apps.main.views.device'),
29 url(r'^device/(?P<id_dev>-?\d+)/edit/$', 'apps.main.views.edit_device', name='edit_device'),
30 url(r'^device/add/$', 'apps.main.views.add_device', name='add_device'),
31 21 url(r'^admin/', include(admin.site.urls)),
32 22 url(r'^accounts/', include('apps.accounts.urls')),
23 url(r'^', include('apps.main.urls')),
33 24 url(r'^rc/', include('apps.rc.urls')),
34 25 url(r'^dds/', include('apps.dds.urls')),
35 26 url(r'^cgs/', include('apps.cgs.urls')),
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now