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" msgid "Subscribers on port does not exist"
msgstr "Абоненты на порту не найдены" msgstr "Абоненты на порту не найдены"
msgid "Export to nagios objects"
msgstr "Экспортировать конфиг для nagios"

7
devapp/templates/devapp/group_list.html

@ -27,10 +27,13 @@
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <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' %} <span class="glyphicon glyphicon-list-alt"></span> {% trans 'Devices without group' %}
</a> </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> </td>
</tr> </tr>
</tfoot> </tfoot>

5
devapp/urls.py

@ -26,5 +26,8 @@ urlpatterns = [
url(r'^search_dev$', views.search_dev), url(r'^search_dev$', views.search_dev),
# Monitoring api # 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.decorators import method_decorator
from django.utils.translation import gettext_lazy as _, gettext from django.utils.translation import gettext_lazy as _, gettext
from easysnmp import EasySNMPTimeoutError, EasySNMPError 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 devapp.base_intr import DeviceImplementationError
from mydefs import res_success, res_error, only_admins, ping, ip_addr_regex 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 { return {
'text': str(e) '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 pyst2
django-jsonview django-jsonview
django-bitfield django-bitfield
transliterate
Loading…
Cancel
Save