##// 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 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
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 from django import forms
1 from django import forms
2 from apps.main.models import Device
2 from .models import CGSConfiguration
3 from .models import CGSConfiguration
3
4
4 class CGSConfigurationForm(forms.ModelForm):
5 class CGSConfigurationForm(forms.ModelForm):
@@ -7,16 +8,27 class CGSConfigurationForm(forms.ModelForm):
7 #request = kwargs.pop('request')
8 #request = kwargs.pop('request')
8 super(CGSConfigurationForm, self).__init__(*args, **kwargs)
9 super(CGSConfigurationForm, self).__init__(*args, **kwargs)
9
10
10 def clean(self):
11 instance = getattr(self, 'instance', None)
11 # Custom validation to force an integer when type of unit = "Unit"
12
12 form_data = self.cleaned_data
13 if instance and instance.pk:
13 if (form_data['freq0'] or form_data['freq1'] or form_data['freq2'] or form_data['freq3'] < 0):
14
14 raise forms.ValidationError("Please introduce positive Number")
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 class Meta:
30 class Meta:
19 model = CGSConfiguration
31 model = CGSConfiguration
20 #exclude = ('freqs', 'clk_in', 'mult','div',)
32 #exclude = ('freqs', 'clk_in', 'mult','div',)
21 # exclude = ('freqs',)
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 # Create your views here.
7 # Create your views here.
8
8
9 def configurate_frequencies(request, id=0):
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 conf = CGSConfiguration.objects.get(pk=id)
12 conf = CGSConfiguration.objects.get(pk=id)
17 devices = Device.objects.filter(configuration__experiment=conf.experiment)
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 for device in devices:
15 for device in devices:
20 if device['device_type__alias']=='cgs':
16 if device['device_type__name']=='cgs':
21 device['active'] = 'active'
17 device['active'] = 'active'
22 break
18 break
23
19
@@ -31,10 +27,13 def configurate_frequencies(request, id=0):
31 'device': device,
27 'device': device,
32 'devices':devices,
28 'devices':devices,
33 'title': ('YAP'),
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 if request.method == 'POST':
37 if request.method == 'POST':
39 form = CGSConfigurationForm(request.POST) #, initial={'purchase_request':purchase_request})
38 form = CGSConfigurationForm(request.POST) #, initial={'purchase_request':purchase_request})
40 if form.is_valid():
39 if form.is_valid():
@@ -49,10 +48,6 def configurate_frequencies(request, id=0):
49 else:
48 else:
50 form = CGSConfigurationForm()
49 form = CGSConfigurationForm()
51
50
52
51 return render(request, 'cgs_conf.html', data)
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
57
52
58
53
@@ -1,24 +1,36
1 from django import forms
1 from django import forms
2 from apps.main.models import Device
2 from .models import DDSConfiguration
3 from .models import DDSConfiguration
3
4
4 from django.core.validators import MinValueValidator, MaxValueValidator
5 from django.core.validators import MinValueValidator, MaxValueValidator
5
6
6 class DDSConfigurationForm(forms.ModelForm):
7 class DDSConfigurationForm(forms.ModelForm):
7
8
8 freq0 = forms.FloatField(label='Frequency', validators=[MinValueValidator(0e6), MaxValueValidator(150e6)])
9 frequency = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)])
9 pha0 = forms.FloatField(label='Phase', validators=[MinValueValidator(0), MaxValueValidator(360)])
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 frequency_mod = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], required=False)
12 pha1 = forms.FloatField(label='Modulated Phase', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False)
13 phase_mod = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False)
13
14
14 def __init__(self, *args, **kwargs):
15 def __init__(self, *args, **kwargs):
15 #request = kwargs.pop('request')
16 #request = kwargs.pop('request')
16 super(DDSConfigurationForm, self).__init__(*args, **kwargs)
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 def clean(self):
30 def clean(self):
19 # Custom validation to force an integer when type of unit = "Unit"
31 # Custom validation to force an integer when type of unit = "Unit"
20 return
32 return
21
33
22 class Meta:
34 class Meta:
23 model = DDSConfiguration
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 from django.core.validators import MinValueValidator, MaxValueValidator
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 class DDSConfiguration(Configuration):
15 class DDSConfiguration(Configuration):
8
16
9 clock = models.FloatField(verbose_name='Clock Master',validators=[MinValueValidator(5e6), MaxValueValidator(50e6)], blank=True, null=True)
17 clock = models.FloatField(verbose_name='Clock Master (MHz)',validators=[MinValueValidator(5), MaxValueValidator(50)], blank=True, null=True)
10 multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(0), MaxValueValidator(20)], default=4)
18 multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4)
11 modulation = models.PositiveIntegerField(verbose_name='Modulation',validators=[MinValueValidator(0), MaxValueValidator(3)], default=0)
19 freq_reg = models.PositiveIntegerField(verbose_name='Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
12 frequency0 = models.PositiveIntegerField(verbose_name='Frequency 0',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)
13 frequency1 = models.PositiveIntegerField(verbose_name='Frequency 1',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
21
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)
16 amplitude_chA = models.PositiveIntegerField(verbose_name='Amplitude CHA',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
22 amplitude_chA = models.PositiveIntegerField(verbose_name='Amplitude CHA',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
17 amplitude_chB = models.PositiveIntegerField(verbose_name='Amplitude CHB',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True)
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 class Meta:
29 class Meta:
20 db_table = 'dds_configurations'
30 db_table = 'dds_configurations'
21 No newline at end of file
31
@@ -1,6 +1,6
1 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
3 urlpatterns = (
4 url(r'^(?P<id_conf>-?\d+)/$', 'apps.dds.views.config_dds', name='url_conf_dds'),
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.config_dds_edit', name='url_conf_dds_edit'),
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 from django.shortcuts import redirect, render
3 from django.shortcuts import redirect, render
4
4
5 from apps.main.models import Device
6 from .models import DDSConfiguration
5 from .models import DDSConfiguration
7 from .forms import DDSConfigurationForm
6 from .forms import DDSConfigurationForm
8 # Create your views here.
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)
13 kwargs = {}
15 form = DDSConfigurationForm(instance=conf)
14 kwargs['dev_conf'] = dev_conf
16 experiment = conf.experiment
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:
27 return render(request, 'dds_conf.html', kwargs)
23 if thisDevice['configuration__id'] == conf.id:
24 thisDevice['active'] = 'active'
25 break
26
28
27 device = thisDevice
29 def edit_dds_conf(request, id_conf):
28
30
29 else:
31 dev_conf = DDSConfiguration.objects.get(pk=id_conf)
30 form = DDSConfigurationForm()
31 device = ''
32 experiment = ''
33 devices = {}
34
32
35 kwargs = {
33 if request.method=='GET':
36 'form': form,
34 form = DDSConfigurationForm(instance=dev_conf)
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):
46
35
47 if request.method=='POST':
36 if request.method=='POST':
48
37 form = DDSConfigurationForm(request.POST, instance=dev_conf)
49 conf = DDSConfiguration.objects.get(pk=id_conf)
50 form = DDSConfigurationForm(instance=conf)
51
38
52 if form.is_valid():
39 if form.is_valid():
53 form.save()
40 form.save()
54 else:
41 return redirect('url_dds_conf', id_conf=id_conf)
55 raise ValueError, "Error"
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 instance = getattr(self, 'instance', None)
8 instance = getattr(self, 'instance', None)
9 if instance and instance.pk:
9 if instance and instance.pk:
10 self.fields['experiment'].widget.attrs['disabled'] = True
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 class Meta:
13 class Meta:
14 model = JARSConfiguration
14 model = JARSConfiguration
@@ -11,9 +11,9 def jars_config(request, id):
11 if id:
11 if id:
12 conf = JARSConfiguration.objects.get(pk=id)
12 conf = JARSConfiguration.objects.get(pk=id)
13 devices = Device.objects.filter(configuration__experiment=conf.experiment)
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 for device in devices:
15 for device in devices:
16 if device['device_type__alias']=='jars':
16 if device['device_type__name']=='jars':
17 device['active'] = 'active'
17 device['active'] = 'active'
18 form = JARSConfigurationForm(instance=conf)
18 form = JARSConfigurationForm(instance=conf)
19 else:
19 else:
@@ -1,8 +1,8
1 from django.contrib import admin
1 from django.contrib import admin
2 from .models import Device, DeviceType, Experiment
2 from .models import Device, DeviceType, Experiment, Campaign
3
3
4 # Register your models here.
4 # Register your models here.
5
5 admin.site.register(Campaign)
6 admin.site.register(Experiment)
6 admin.site.register(Experiment)
7 admin.site.register(Device)
7 admin.site.register(Device)
8 admin.site.register(DeviceType) No newline at end of file
8 admin.site.register(DeviceType)
@@ -1,7 +1,7
1 from django import forms
1 from django import forms
2 from django.utils.safestring import mark_safe
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 def add_empty_choice(choices, pos=0, label='-----'):
6 def add_empty_choice(choices, pos=0, label='-----'):
7 if len(choices)>0:
7 if len(choices)>0:
@@ -17,21 +17,44 class DatepickerWidget(forms.widgets.TextInput):
17 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
17 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
18 return mark_safe(html)
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 def __init__(self, *args, **kwargs):
27 def __init__(self, *args, **kwargs):
22 super(NewExperimentForm, self).__init__(*args, **kwargs)
28 super(CampaignForm, self).__init__(*args, **kwargs)
23 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
29 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
24 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
30 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
25
31
26 class Meta:
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 model = Experiment
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 class Meta:
49 class Meta:
32 model = Device
50 model = Device
33 exclude = ['status']
51 exclude = ['status']
34
52
53 class ConfigurationForm(forms.ModelForm):
54 class Meta:
55 model = Configuration
56 fields = ['experiment', 'device']
57
35 class DeviceTypeForm(forms.Form):
58 class DeviceTypeForm(forms.Form):
36 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
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 (1, 'Active'),
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 # Create your models here.
20 # Create your models here.
11
21
12 class DeviceType(models.Model):
22 class DeviceType(models.Model):
13
23
14 name = models.CharField(max_length=40)
24 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
15 alias = models.CharField(max_length=40)
25
16 info = models.TextField(blank=True, null=True)
26 description = models.TextField(blank=True, null=True)
17 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
27
28 # info = models.TextField(blank=True, null=True)
29 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
18
30
19 class Meta:
31 class Meta:
20 db_table = 'device_types'
32 db_table = 'db_device_types'
21
33
22 def __unicode__(self):
34 def __unicode__(self):
23 return u'%s' % self.alias
35 return u'%s' % self.name
24
36
25 class Device(models.Model):
37 class Device(models.Model):
26
38
27 device_type = models.ForeignKey(DeviceType)
39 device_type = models.ForeignKey(DeviceType)
28 name = models.CharField(max_length=40, default='')
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 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
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 description = models.TextField(blank=True, null=True)
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 class Meta:
49 class Meta:
37 db_table = 'devices'
50 db_table = 'db_devices'
38
51
39 def __unicode__(self):
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)
57 name = models.CharField(max_length=40, unique=True)
45 alias = models.CharField(max_length=40)
58 start_date = models.DateTimeField(blank=True, null=True)
46 start_date = models.DateTimeField()
59 end_date = models.DateTimeField(blank=True, null=True)
47 end_date = models.DateTimeField()
60 tags = models.CharField(max_length=40)
61 description = models.TextField(blank=True, null=True)
48 template = models.BooleanField(default=False)
62 template = models.BooleanField(default=False)
49 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
50
63
51 class Meta:
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 def __unicode__(self):
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 class Configuration(PolymorphicModel):
83 class Configuration(PolymorphicModel):
58
84
59 experiment = models.ForeignKey(Experiment)
85 experiment = models.ForeignKey(Experiment)
60 device = models.ForeignKey(Device)
86 device = models.ForeignKey(Device)
61 parameters = models.TextField(default='{}')
87 # parameters = models.TextField(default='{}')
62 status = models.PositiveSmallIntegerField(default=1, choices=STATES)
88 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
63
89
64 class Meta:
90 class Meta:
65 db_table = 'configurations'
91 db_table = 'db_configurations'
66
92
67 def __unicode__(self):
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 No newline at end of file
95
@@ -37,9 +37,13
37 </div>
37 </div>
38 <div class="collapse navbar-collapse" id="navigationbar">
38 <div class="collapse navbar-collapse" id="navigationbar">
39 <ul class="nav navbar-nav">
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 </li>
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 </li>
47 </li>
44 </ul>
48 </ul>
45 <ul class="nav navbar-nav navbar-right">
49 <ul class="nav navbar-nav navbar-right">
@@ -105,6 +109,7
105 {# bootstrap_javascript jquery=True #}
109 {# bootstrap_javascript jquery=True #}
106 <script src="{% static 'js/jquery.min.js' %}"></script>
110 <script src="{% static 'js/jquery.min.js' %}"></script>
107 <script src="{% static 'js/bootstrap.min.js' %}"></script>
111 <script src="{% static 'js/bootstrap.min.js' %}"></script>
112
108 {% block extra-js %}
113 {% block extra-js %}
109 {% endblock%}
114 {% endblock%}
110 </body>
115 </body>
@@ -1,9 +1,12
1 {% extends "base.html" %}
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
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 conf-active %}active{% endblock %}
6 {% block content-suptitle %}{{device.device_type__name}}{% endblock %}
7
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
7
10
8 {% block content %}
11 {% block content %}
9 <form class="form" method="post" action="">
12 <form class="form" method="post" action="">
@@ -11,10 +14,13
11 {% bootstrap_form form layout='horizontal' size='medium' %}
14 {% bootstrap_form form layout='horizontal' size='medium' %}
12 <div style="clear: both;"></div>
15 <div style="clear: both;"></div>
13 <br>
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 </form>
18 </form>
16 {% endblock %}
19 {% endblock %}
17
20
18 {% block sidebar%}
21 {% block sidebar%}
19 {% include "sidebar_devices.html" %}
22 {% include "sidebar_devices.html" %}
20 {% endblock %}
23 {% endblock %}
24
25 {% block extra-js%}
26 {% endblock %} No newline at end of file
@@ -5,49 +5,32
5
5
6 {% block dev-active %}active{% endblock %}
6 {% block dev-active %}active{% endblock %}
7
7
8 {% block content-title %}Device{% endblock %}
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
10
10
11 {% block content %}
11 {% block content %}
12
12 <table class="table table-bordered">
13 {% if form %}
13 {% for key in device_keys %}
14 <form class="form" method="post" action="{{action}}">
14 <tr><th>{{key|title}}</th><td>{{device|attr:key}}</td></tr>
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>
36 {% endfor %}
15 {% endfor %}
37 </table>
16 </table>
38 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
17 <button class="btn btn-primary pull-right" id="bt_edit_device">Edit Device</button>
39 {% endif %}
18 <br></br>
19 <br></br>
20 {% endblock %}
40
21
22 {% block sidebar%}
23 {% include "sidebar_devices.html" %}
41 {% endblock %}
24 {% endblock %}
42
25
43 {% block extra-js%}
26 {% block extra-js%}
27 <script src="{% static 'js/moment.min.js' %}"></script>
28 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
44 <script type="text/javascript">
29 <script type="text/javascript">
45 $(".clickable-row").click(function() {
46 document.location = $(this).data("href");
47 });
48
30
49 $("#bt_add").click(function() {
31 $("#bt_edit_device").click(function() {
50 document.location = "add/";
32 document.location = "{% url 'url_edit_device' device.id%}";
51 });
33 });
34
52 </script>
35 </script>
53 {% endblock %} No newline at end of file
36 {% endblock %}
@@ -8,134 +8,52
8
8
9 {% block exp-active %}active{% endblock %}
9 {% block exp-active %}active{% endblock %}
10
10
11 {% block content-title %}Experiment{% endblock %}
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
13
14 {% block content %}
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">
15 <table class="table table-bordered">
25 {% for key in experiment_keys %}
16 {% for key in experiment_keys %}
26 <tr><th>{{key|title}}</th><td>{{experiment|attr:key}}</td></tr>
17 <tr><th>{{key|title}}</th><td>{{experiment|attr:key}}</td></tr>
27 {% endfor %}
18 {% endfor %}
28 </table>
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 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
24 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
32 <div class="panel panel-default">
25
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">
26 <div class="panel panel-default">
53 <div class="panel-heading" role="tab" id="headingTwo">
27 <div class="panel-heading" role="tab" id="headingTwo">
54 <h4 class="panel-title">
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">
29 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseThree">
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">
93 Experiment's Devices
30 Experiment's Devices
94 </a>
31 </a>
95 </h4>
32 </h4>
96 </div>
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 <div class="panel-body">
35 <div class="panel-body">
99 <table class="table table-hover">
36 <table class="table table-hover">
100 <tr>
37 <tr>
101 <th>#</th>
38 <th>#</th>
102 {% for header in device_keys %}
39 {% for key in configuration_keys %}
103 <th>{{ header|title }}</th>
40 <th>{{ key|title }}</th>
104 {% endfor%}
41 {% endfor%}
105 </tr>
42 </tr>
106 {% for item in devices %}
43 {% for item in configurations %}
107 <tr class="clickable-row" data-href="/{{item.device_type__alias}}/{{item.configuration__id}}/">
44 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
108 <td>{{ forloop.counter }}</td>
45 <td>{{ forloop.counter }}</td>
109 {% for key in device_keys %}
46 {% for key in configuration_keys %}
110 <td>{{ item|attr:key }}</td>
47 <td>{{ item|attr:key }}</td>
111 {% endfor %}
48 {% endfor %}
112 </tr>
49 </tr>
113 {% endfor %}
50 {% endfor %}
114 </table>
51 </table>
52 <button class="btn btn-primary pull-right" id="bt_add_conf">{{button}}</button>
115 </div>
53 </div>
116 </div>
54 </div>
117 </div>
55 </div>
118 </div>
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 {% endblock %}
57 {% endblock %}
140
58
141 {% block sidebar%}
59 {% block sidebar%}
@@ -153,12 +71,13
153 document.location = $(this).data("href");
71 document.location = $(this).data("href");
154 });
72 });
155
73
156 $("#bt_add").click(function() {
74 $("#bt_edit_experiment").click(function() {
157 document.location = "add";
75 document.location = "{% url 'url_edit_experiment' experiment.id%}";
158 });
76 });
159
77
160 $("#id_device_type").change(function() {
78 $("#bt_add_conf").click(function() {
161 document.location = "{% url 'experiment' id_exp %}device/"+$(this).val();
79 document.location = "{% url 'url_add_dev_conf' experiment.id%}";
162 });
80 });
81
163 </script>
82 </script>
164 {% endblock %} No newline at end of file
83 {% endblock %}
@@ -4,7 +4,7
4 <h3>Experiment</h3>
4 <h3>Experiment</h3>
5 </div>
5 </div>
6 <div class="list-group">
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 </div>
8 </div>
9 </div>
9 </div>
10 {% endif %}
10 {% endif %}
@@ -16,7 +16,7
16 </div>
16 </div>
17 <div class="list-group">
17 <div class="list-group">
18 {% for item in devices %}
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 {% endfor %}
20 {% endfor %}
21 </div>
21 </div>
22 </div>
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
1 from django.shortcuts import render, redirect
2 from django.template import RequestContext
3 from .forms import NewExperimentForm, NewDeviceForm, DeviceTypeForm
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 from apps.cgs.models import CGSConfiguration
12 from apps.cgs.models import CGSConfiguration
7 from apps.jars.models import JARSConfiguration
13 from apps.jars.models import JARSConfiguration
8 #from apps.usrp.models import USRPConfiguration
14 from apps.usrp.models import USRPConfiguration
9 from apps.abs.models import ABSConfiguration
15 from apps.abs.models import ABSConfiguration
10 from apps.rc.models import RCConfiguration
16 from apps.rc.models import RCConfiguration
11 from apps.dds.models import DDSConfiguration
17 from apps.dds.models import DDSConfiguration
12
18
13 # Create your views here.
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 'rc': RCConfiguration,
31 'rc': RCConfiguration,
17 'dds': DDSConfiguration,
32 'dds': DDSConfiguration,
18 'jars': JARSConfiguration,
33 'jars': JARSConfiguration,
19 'cgs': CGSConfiguration,
34 'cgs': CGSConfiguration,
20 'abs': ABSConfiguration,
35 'abs': ABSConfiguration,
36 'usrp': USRPConfiguration,
21 }
37 }
22
38
23 def index(request):
39 def index(request):
24 kwargs = {}
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 kwargs = {}
50 kwargs = {}
30 if id_exp:
51 kwargs['device_keys'] = keys[1:]
31 experiment = Experiment.objects.get(pk=id_exp)
52 kwargs['devices'] = devices.values(*keys)
32 devices = Device.objects.filter(configuration__experiment=experiment)
53 kwargs['title'] = 'Device'
33 kwargs['experiment'] = experiment
54 kwargs['suptitle'] = 'List'
34 kwargs['experiment_keys'] = ['name', 'alias', 'start_date', 'end_date']
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:
82 if request.method == 'POST':
39 subform = DeviceTypeForm(initial={'device_type':id_dev_type})
83 form = DeviceForm(request.POST)
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()
45
84
85 if form.is_valid():
86 form.save()
87 return redirect('url_devices')
88
89 kwargs = {}
46 kwargs['form'] = form
90 kwargs['form'] = form
47 kwargs['subform'] = subform
91 kwargs['title'] = 'Device'
48 kwargs['device_keys'] = ['device_type__name', 'model', 'ip_address', 'status']
92 kwargs['suptitle'] = 'New'
49 kwargs['devices'] = devices.values('device_type__name', 'model', 'ip_address', 'status', 'device_type__alias', 'configuration__id')
93 kwargs['button'] = 'Create'
50 kwargs['suptitle'] = 'Detail'
94
51 else:
95 return render(request, 'device_edit.html', kwargs)
52 experiments = Experiment.objects.all().order_by('start_date')
96
53 kwargs['keys'] = ['name', 'start_date', 'end_date']
97 def edit_device(request, id_dev):
54 keys = ['id']+kwargs['keys']
98
55 kwargs['items'] = experiments.values(*keys)
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 kwargs['suptitle'] = 'List'
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 kwargs['button'] = 'Add Experiment'
154 kwargs['button'] = 'Add Experiment'
58
155
59 kwargs['id_dev_type'] = id_dev_type
156 return render(request, 'campaign.html', kwargs)
60 kwargs['id_exp'] = id_exp
157
61 return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
158 def add_campaign(request):
159
160 if request.method == 'GET':
161 form = CampaignForm()
62
162
63 def edit_experiment(request, id_exp):
64 if request.method=='POST':
163 if request.method == 'POST':
65 experiment = Experiment.objects.get(pk=id_exp)
164 form = CampaignForm(request.POST)
66 form = NewExperimentForm(request.POST, instance=experiment)
165
67 if form.is_valid():
166 if form.is_valid():
68 form.save()
167 campaign = form.save()
69 return redirect('experiment', id_exp=id_exp)
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 if request.method=='POST':
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 experiment = Experiment.objects.get(pk=id_exp)
219 experiment = Experiment.objects.get(pk=id_exp)
74 device = Device.objects.get(pk=request.POST['device'])
220 campaign = Campaign.objects.get(pk = experiment.campaign.id)
75 model = MODELS[device.device_type.alias]
221 configurations = Configuration.objects.filter(experiment=experiment)
76 conf = model(experiment=experiment, device=device)
222
77 conf.save()
223 # form = ExperimentForm(instance=experiment)
78 return redirect('experiment', id_exp=id_exp)
79
224
80 def add_experiment(request):
81 kwargs = {}
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 if request.method == 'POST':
251 if request.method == 'POST':
83 form = NewExperimentForm(request.POST)
252 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
253
84 if form.is_valid():
254 if form.is_valid():
85 experiment = form.save()
255 experiment = form.save()
86 return redirect('experiment', id_exp=experiment.id)
256 return redirect('url_experiment', id_exp=experiment.id)
87 else:
257
88 form = NewExperimentForm()
258 kwargs = {}
89 kwargs['form_new'] = form
259 kwargs['form'] = form
90 kwargs['title'] = 'Experiment'
260 kwargs['title'] = 'Experiment'
91 kwargs['suptitle'] = 'New'
261 kwargs['suptitle'] = 'New'
92 kwargs['id_exp'] = 0
262 kwargs['button'] = 'Create'
93 return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
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 kwargs = {}
280 kwargs = {}
97 if id_dev:
281 kwargs['form'] = form
98 device = Device.objects.get(pk=id_dev)
282 kwargs['title'] = 'Experiment'
99 kwargs['form'] = NewDeviceForm(instance=device)
283 kwargs['suptitle'] = 'Edit'
100 kwargs['action'] = 'edit/'
101 kwargs['button'] = 'Update'
284 kwargs['button'] = 'Update'
102 kwargs['suptitle'] = 'Detail'
285
103 else:
286 return render(request, 'experiment_edit.html', kwargs)
104 devices = Device.objects.all()
287
105 kwargs['keys'] = ['device_type__name', 'model', 'serial_number', 'ip_address', 'status']
288 def dev_confs(request):
106 keys = ['id']+kwargs['keys']
289
107 kwargs['items'] = devices.values(*keys)
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 kwargs['suptitle'] = 'List'
300 kwargs['suptitle'] = 'List'
109 kwargs['button'] = 'Add Device'
301 kwargs['button'] = 'New Configuration'
110 return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
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 if request.method=='POST':
328 if request.method == 'POST':
114 device = Device.objects.get(pk=id_dev)
329 form = ConfigurationForm(request.POST)
115 form = NewDeviceForm(request.POST, instance=device)
330
116 if form.is_valid():
331 if form.is_valid():
117 form.save()
332 experiment = Experiment.objects.get(pk=request.POST['experiment'])
118 return redirect('devices')
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 kwargs = {}
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 if request.method == 'POST':
365 if request.method=='POST':
123 form = NewDeviceForm(request.POST)
366 form = DevConfForm(request.POST, instance=dev_conf)
367
124 if form.is_valid():
368 if form.is_valid():
125 form.save()
369 form.save()
126 return redirect('devices')
370 return redirect('url_dev_conf', id_conf=id_conf)
127 else:
371
128 form = NewDeviceForm()
372 kwargs = {}
129 kwargs['form'] = form
373 kwargs['form'] = form
130 kwargs['button'] = 'Create'
374 kwargs['title'] = 'Device Configuration'
131 kwargs['suptitle'] = 'New'
375 kwargs['suptitle'] = 'Edit'
132 return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
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 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
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 from django.db import models
1 from django.db import models
2
2 from apps.main.models import Configuration
3 # Create your models here.
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 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
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 urlpatterns = [
19 urlpatterns = [
20 url(r'^$', 'apps.main.views.index', name='index'),
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 url(r'^admin/', include(admin.site.urls)),
21 url(r'^admin/', include(admin.site.urls)),
32 url(r'^accounts/', include('apps.accounts.urls')),
22 url(r'^accounts/', include('apps.accounts.urls')),
23 url(r'^', include('apps.main.urls')),
33 url(r'^rc/', include('apps.rc.urls')),
24 url(r'^rc/', include('apps.rc.urls')),
34 url(r'^dds/', include('apps.dds.urls')),
25 url(r'^dds/', include('apps.dds.urls')),
35 url(r'^cgs/', include('apps.cgs.urls')),
26 url(r'^cgs/', include('apps.cgs.urls')),
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now