diff --git a/devapp/locale/ru/LC_MESSAGES/django.po b/devapp/locale/ru/LC_MESSAGES/django.po
index 0be4c36..0d31521 100644
--- a/devapp/locale/ru/LC_MESSAGES/django.po
+++ b/devapp/locale/ru/LC_MESSAGES/django.po
@@ -511,3 +511,6 @@ msgstr "Показать абонента на порту"
msgid "Subscribers on port does not exist"
msgstr "Абоненты на порту не найдены"
+
+msgid "Export to nagios objects"
+msgstr "Экспортировать конфиг для nagios"
diff --git a/devapp/templates/devapp/group_list.html b/devapp/templates/devapp/group_list.html
index 487e2aa..dbd78b1 100644
--- a/devapp/templates/devapp/group_list.html
+++ b/devapp/templates/devapp/group_list.html
@@ -27,10 +27,13 @@
- |
-
+ |
+
{% trans 'Devices without group' %}
+
+ {% trans 'Export to nagios objects' %}
+
|
diff --git a/devapp/urls.py b/devapp/urls.py
index 13a048e..adeeca8 100644
--- a/devapp/urls.py
+++ b/devapp/urls.py
@@ -26,5 +26,8 @@ urlpatterns = [
url(r'^search_dev$', views.search_dev),
# Monitoring api
- url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view())
+ url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view()),
+
+ # Nagios mon generate
+ url(r'^nagios/hosts/$', views.nagios_objects_conf, name='nagios_objects_conf')
]
diff --git a/devapp/views.py b/devapp/views.py
index 714db7a..05ba58f 100644
--- a/devapp/views.py
+++ b/devapp/views.py
@@ -11,7 +11,7 @@ from django.contrib import messages
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _, gettext
from easysnmp import EasySNMPTimeoutError, EasySNMPError
-from django.views.generic import DetailView
+from django.views.generic import DetailView, ListView
from devapp.base_intr import DeviceImplementationError
from mydefs import res_success, res_error, only_admins, ping, ip_addr_regex
@@ -573,3 +573,35 @@ class OnDeviceMonitoringEvent(global_base_views.AllowedSubnetMixin, global_base_
return {
'text': str(e)
}
+
+
+@login_required
+@only_admins
+def nagios_objects_conf(request):
+ from transliterate import translit
+ confs = list()
+
+ def templ(host_name, host_addr, parent_host_name):
+ return '\n'.join([
+ "define host{",
+ "\tuse generic-switch",
+ "\thost_name %s" % host_name,
+ "\taddress %s" % host_addr,
+ "\tparents %s" % parent_host_name if parent_host_name is not None else '',
+ "}\n"
+ ])
+
+ def norm_name(name: str, replreg=re.compile(r'\W+', re.IGNORECASE)):
+ return replreg.sub('', name)
+
+ for dev in Device.objects.exclude(devtype='On').select_related('parent_dev').only('ip_address', 'comment', 'parent_dev'):
+ conf = templ(host_name=norm_name("%d%s" % (dev.pk, translit(dev.comment, language_code='ru', reversed=True))),
+ host_addr=dev.ip_address,
+ parent_host_name=norm_name("%d%s" % (dev.parent_dev.pk,
+ translit(dev.parent_dev.comment, language_code='ru',
+ reversed=True))) if dev.parent_dev else None,
+ )
+ confs.append(conf)
+ response = HttpResponse(''.join(confs), content_type='text/plain')
+ response['Content-Disposition'] = 'attachment; filename="objects.cfg"'
+ return response
diff --git a/requirements.txt b/requirements.txt
index 4b8ad89..2ab81bd 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -22,3 +22,4 @@ webdavclient
pyst2
django-jsonview
django-bitfield
+transliterate
\ No newline at end of file