Просмотр исходного кода

Simple export (as JSON) of trap configurations

Signed-off-by: Sven Velt <sven@velt.de>
Sven Velt 10 лет назад
Родитель
Сommit
76772f6656

+ 5 - 0
traps/models.py

@@ -64,5 +64,10 @@ class CfgTrap(models.Model):
 	severity = models.CharField(max_length=255, blank=True, default='')
 	# FIXME: Mehrere, aktiv/inaktiv
 
+	export_fields = ['trapoid', 'trapname', 'category', 'severity']
+
+
+	def __unicode__(self):
+		return u'%s (%s)' % (self.trapname, self.trapoid)
 
 

+ 5 - 2
traps/templates/traps/snippet_cfgtrap_as_tr.html

@@ -3,10 +3,13 @@
 	{% for cfgtrap in cfgtraps %}
 	{% cycle 'Odd' 'Even' as OddEven silent %}
 	<tr>
+		<td width="2%" class="status{{OddEven}}">
+			<input type="checkbox" name="cfgtrapIDs" value="{{ cfgtrap.id }}">
+		</td>
 		<td width="25%" class="status{{OddEven}}"><a href="{% url "trap_config_trapoid" cfgtrap.trapoid %}"{% if cfgtrap.trapname %}>{{ cfgtrap.trapname }}{% else %} style="color: #c00;">[ADMIN: Configure]{% endif %}</a></td>
 		<td width="25%" class="status{{OddEven}}"><a href="{% url "trap_config_trapoid" cfgtrap.trapoid %}">{{ cfgtrap.trapoid }}</a></td>
-		<td width="25%" class="status{{OddEven}}"><a href="{% url "trap_config_trapoid" cfgtrap.trapoid %}"{% if cfgtrap.category %}>{{ cfgtrap.category }}{% else %} style="color: #c00;">[ADMIN: Configure]{% endif %}</a></td>
-		<td width="25%" class="status{{OddEven}}"><a href="{% url "trap_config_trapoid" cfgtrap.trapoid %}"{% if cfgtrap.severity %}>{{ cfgtrap.severity }}{% else %} style="color: #c00;">[ADMIN: Configure]{% endif %}</a></td>
+		<td width="24%" class="status{{OddEven}}"><a href="{% url "trap_config_trapoid" cfgtrap.trapoid %}"{% if cfgtrap.category %}>{{ cfgtrap.category }}{% else %} style="color: #c00;">[ADMIN: Configure]{% endif %}</a></td>
+		<td width="24%" class="status{{OddEven}}"><a href="{% url "trap_config_trapoid" cfgtrap.trapoid %}"{% if cfgtrap.severity %}>{{ cfgtrap.severity }}{% else %} style="color: #c00;">[ADMIN: Configure]{% endif %}</a></td>
 
 	</tr>
 	{% endfor %}

+ 1 - 1
traps/templates/traps/snippet_cfgtrap_prev_next.html

@@ -1,7 +1,7 @@
 {% load staticfiles %}
 {% load add_get_parameter %}
 
-		<tr><td colspan=4><table border=1 width="100%"><tr>
+		<tr><td colspan=5><table border=1 width="100%"><tr>
 			<td width="45%" align="right">
 				{% if cfgtraps.has_previous %}<a href="{% add_get page=cfgtraps.previous_page_number %}"><img src="{% static "images/dropline/previous.png" %}" /></a>{% endif %}
 			</td>

+ 25 - 4
traps/templates/traps/trap_config_index.html

@@ -6,6 +6,10 @@
 {% block titlemore %}/Traps{% endblock %}
 {% block h1more %}/Traps{% endblock %}
 
+{% block headjs %}
+<script type="text/javascript" src="{% static "js/checkbox.js" %}"></script>
+{% endblock %}
+
 {% block body %}
 
 	<form action="" method="get">
@@ -50,24 +54,41 @@
 	</form>
 
 	<table border=1 width="100%">
+		<form action="{% url "trap_config_export" %}{% add_get %}" method="post">
+		{% csrf_token %}
+
 		<!-- Previous - Next -->
-		<tr><td colspan=4>
+		<tr><td colspan=5>
 			{% include "snippet_obj_prev_next.html" with objs=cfgtraps objcount=cfgtrapcount objname="Trap configs" %}
 		</td></tr>
 
 		<!-- Header line -->
 		<tr>
+			<th class="status" width="2%"></th>
 			<th class="status" width="25%">Trap name</th>
 			<th class="status" width="25%">Trap OID</th>
-			<th class="status" width="25%">Category</th>
-			<th class="status" width="25%">Severity</th>
+			<th class="status" width="24%">Category</th>
+			<th class="status" width="24%">Severity</th>
 		</tr>
 
 		<!-- Traps as table row -->
 		{% include "traps/snippet_cfgtrap_as_tr.html" %}
 
+		<tr>
+			<td class="linkBox">
+				<!-- <img src="./images/dropline/arrow.png" border="0"> -->
+				<input type="checkbox" name="checkbox" value="checkbox" onClick="checkboxes_CheckAll('cfgtrapIDs', this.checked); return true;">
+			</td>
+			<td colspan=2 class="linkBox">
+				<select name="action" size=1>
+					<option value="export-json">Export as JSON</option>
+				</select>
+				<input type="submit" name="submit" value="Go" />
+			</td>
+		</tr>
+
 		<!-- Previous - Next -->
-		<tr><td colspan=4>
+		<tr><td colspan=5>
 			{% include "snippet_obj_prev_next.html" with objs=cfgtraps objcount=cfgtrapcount objname="Trap configs" %}
 		</td></tr>
 

+ 1 - 0
traps/urls.py

@@ -4,6 +4,7 @@ from django.conf.urls import patterns, url
 urlpatterns = patterns('',
 	url(r'^$', 'traps.views.trap_index', name='trap_index'),
 	url(r'^config/$', 'traps.views.config_index', name='trap_config_index'),
+	url(r'^config/export/$', 'traps.views.config_export', name='trap_config_export'),
 	url(r'^config/trapoid/(?P<trapoid>\.[0-9\.]+)/$', 'traps.views.config_trapoid', name='trap_config_trapoid'),
 	url(r'^modify/$', 'traps.views.trap_modify', name='trap_modify'),
 	url(r'^resolve/trapoid/(?P<trapoid>\.[0-9\.]+)/$', 'traps.views.resolve_trapoid', name='trap_resolve_trapoid'),

+ 26 - 0
traps/views.py

@@ -12,6 +12,8 @@ from .forms import *
 from .tools import get_filtered_traps_for_querydict, get_filtered_cfgtraps_for_querydict
 from .translate import *
 
+import json
+
 from pprint import pprint
 
 ##############################################################################
@@ -100,6 +102,30 @@ def config_index(Request):
 
 
 
+def config_export(Request):
+	action = Request.POST.get('action') or Request.GET.get('action')
+	cfgtrapID = Request.GET.get('cfgtrapID')
+	cfgtrapIDs= Request.POST.getlist('cfgtrapIDs')
+
+	if not action in ['export-json', ]:
+		return HttpResponse(u'Action "%s" not implemented' % action )
+
+	if cfgtrapID:
+		cfgtrapIDs.append(cfgtrapID)
+
+	export_list = []
+	for cfgtrap in CfgTrap.objects.filter(id__in=cfgtrapIDs):
+		export_obj = {}
+		for fieldname in cfgtrap.export_fields:
+			export_obj[fieldname] = getattr(cfgtrap, fieldname)
+		export_list.append(export_obj)
+
+	export_js = json.dumps(export_list)
+
+	return HttpResponse(export_js, content_type='application/json')
+
+
+
 def config_trapoid(Request, trapoid):
 	env = {}
 	try: