Browse Source

generate config for nagios

devel
bashmak 8 years ago
parent
commit
99371d831f
  1. 3
      devapp/locale/ru/LC_MESSAGES/django.po
  2. 7
      devapp/templates/devapp/group_list.html
  3. 5
      devapp/urls.py
  4. 34
      devapp/views.py
  5. 1
      requirements.txt

3
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"

7
devapp/templates/devapp/group_list.html

@ -27,10 +27,13 @@
</tbody>
<tfoot>
<tr>
<td>
<a href="{% url 'devapp:devices_null_group' %}" class="btn btn-primary btn-sm">
<td class="btn-group btn-group-sm">
<a href="{% url 'devapp:devices_null_group' %}" class="btn btn-primary">
<span class="glyphicon glyphicon-list-alt"></span> {% trans 'Devices without group' %}
</a>
<a href="{% url 'devapp:nagios_objects_conf' %}" class="btn btn-default" target="_blank">
<span class="glyphicon glyphicon-export"></span> {% trans 'Export to nagios objects' %}
</a>
</td>
</tr>
</tfoot>

5
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')
]

34
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

1
requirements.txt

@ -22,3 +22,4 @@ webdavclient
pyst2
django-jsonview
django-bitfield
transliterate
Loading…
Cancel
Save